Forum: Haus & Smart Home Wilo Stratos PICO plus Pumpe Schnittstelle


von Moritz M. (moritz2)


Lesenswert?

Guten Abend zusammen,

ich habe eine Heizungspumpe Wilo Stratos pico plus (WILO-4244375) und 
habe gesehen, dass es dort ein (relativ nutzloses) Bluetooth-Modul zu 
gibt namens Wilo Smart Connect (WILO-4239241).

Ich habe da mal ein paar Drähte zwischengebastelt um das Protokoll 
mitzuhören, mit dem Ziel, die Pumpe per ESP32 oder RS485 oder ähnlichem 
vernünftig anzusprechen.

Verbunden ist das Modul über einen 2x5 poligen card edge connector mit 
1mm pitch.

Wichtig: Die Pumpe ist nicht galvanisch getrennt, hier liegen also 
230VAC an! Genau wie bei vielen Homematic oder Shelly Produkten.

Benutzt werden von den 5 pins an der oberseite nur 4. Dabei sind GND und 
VCC etwas länger und auch auf die gegenüberliegende Seite verbunden.
1
1 Pump-TX (3v3, 115200 8N1)
2
2 GND
3
3 Pump-RX (3v3, 115200 8N1)
4
4 nicht verbunden
5
5 VCC (15v DC)

Ohne verbundenes Bluetooth-Modul empfängt man dann von der Pumpe (also 
auf Pin 1) so etwas wie ein heartbeat-Signal, in hex:
7E 02 nn 7E

7E scheint hier frame start / end marker zu sein, 02 der code für ein 
heartbeat, und nn ist zufällig, aber immer ein gleicher Wert in Folge.

Zudem gibt es noch 7E 04 nn mm .. .. 7E, dies scheint die eigentliche 
Kommunikation zu sein, die erst entsteht, wenn das Bluetooth Smart 
Connect mit angeschlossen ist.

Hier mal ein Auszug aus der Kommunikation, 1> ist, was das Smart Connect 
Modul an die Pumpe sendet, und 2> was die Pumpe sendet. Die 7E 
Start/Endmarker sind weggelassen:
1
1> 0275
2
2> 0275
3
1> 0275
4
2> 0275
5
1> 0275
6
2> 0275
7
1> 0275
8
2> 0275
9
1> 0275
10
2> 0275
11
1> 0275
12
2> 0275
13
1> 0275
14
2> 0275
15
1> 0275
16
1> 04193013134201016e0f02b430663032113ce106e71121035823
17
2> 0275
18
2> 02f6
19
1> 029a
20
1> 043e3013134201016f0b3ab430623361113ce106e71121037661
21
2> 049a30210c6245016e0f02c13ce106e7182111ff7153747261746f73205049434f2030303637e00d
22
1> 043e3013134201016f0b3ab430623361113ce106e71121037661
23
1> 043e3013134201016f0b3ab430623361113ce106e71121037661
24
1> 043e3013134201016f0b3ab430623361113ce106e71121037661
25
2> 027b
26
2> 04df3013116284016f0b3ab430623361113ce106e70521110690
27
2> 02df
28
1> 02df
29
1> 04b3301313420101700c8bb430633862113ce106e71121035f3a
30
1> 04b3301313420101700c8bb430633862113ce106e71121035f3a
31
1> 04b3301313420101700c8bb430633862113ce106e71121035f3a
32
1> 04b3301313420101700c8bb430633862113ce106e71121035f3a
33
2> 025c
34
1> 0230
35
1> 049430131342010171067db430363764113ce106e7112103a640
36
1> 049430131342010171067db430363764113ce106e7112103a640
37
1> 049430131342010171067db430363764113ce106e7112103a640
38
2> 043030100c624501700c8bc13ce106e7072111ff80b511
39
2> 0230
40
2> 02d1
41
1> 0275
42
1> 041930300642030172f00db466303030113ce106e7112120ff8a1908c51908fd1908fe1909d918791903a219067f1906810119067d81af
43
2> 047530100c62450171067dc13ce106e7072111ff02923b
44
2> 0275
45
1> 041930300642030172f00db466303030113ce106e7112120ff8a1908c51908fd1908fe1909d918791903a219067f1906810119067d81af
46
1> 029a
47
2> 049a30420662440172f006c13ce106e7142111ffaa1908c5011908fd1908cb1908fe1a801c02a61909d919935a18791917771903a2195b2019067f18fc19068109010819067d02e911
48
2> 029a
49
1> 029a
50
2> 029a
51
1> 029a

Hat hierzu jemand eine Idee, welche Art Protokoll dies sein könnte? 
Womöglich ist in den 04- Datensätzen ein anderes Protokoll gekapselt?

Hier habe ich eine Spezifikation von Wilo gefunden, die aber ein anderes 
Protokoll zu beschreiben scheint:
https://github.com/christoph2/wiloPLR/blob/master/doc/WILO_PLR(RS485)spec_deutsch_v1.04.pdf


Besten Dank

Moritz
von Matthias Q. (zaphod_beeblebrox)


Lesenswert?

Hallo, bist du da weiter gekommen? Es gibt ja offiziell auch das 
"Schnittstellenmodul Connect module Modbus RTU". Grundsätzlich kann man 
also über die Schnittstelle bidirektional kommunizieren. Das "Wilo-Smart 
Gateway" hat auch eine RS485-Schnittstelle.
Gibt es irgendwo weitere Informationen über die Schnittstelle an den 
neuen Pumpen?

Danke und viele Grüße
Matthias
von Moritz M. (moritz2)


Lesenswert?

Hi,

ja, bin (etwas) weiter gekokmmen.

BLE: GATT-UUID 0000xxxx-0000-1000-8000-0023f5000001. Service 0001 hat 
0002 für write, 0003 für lesen, und 0005 schreiben verschlüsselt.

Ablauf zum Lesen:

1. Als BLE-Central verbinden, ATT-MTU auf 185 hochsetzen, Notifications 
auf char-03 aktivieren.
2. Handshake auf char-02 (Request -> Antwort): 
`0103010001`->`0103030002b400`, `0103010003`->`01030300040000`, 
`0103010005`->`010302000613`, `0503010001`->`050302000205`.
3. PIN: die Pumpe zeigt pro Verbindung eine frische 4-stellige Zahl im 
LCD. Diese als `05 03 03 00 03 <code:2B LE>` schicken -> Ack 
`0503010004`. Ohne Auth wird sofort getrennt.
4. Read-Request auf char-02 (nach dem Transport-Header `1f 03 <len16 
LE>`):
   `42 01 <seq> <pid:2B> b4 "<PID-ASCII>" 11 3c e1 06 e7 13 21 00 ff 19 
<pid:2B>`
   Antwort auf char-03: `... 62 45 00 <seq> <pid> c1 3c e1 06 e7 00 21 
13 ff <tag><wert>`.
   Wichtig: `<seq>` ist ein Transaktionszähler (01, 02, 03 ..., wird in 
der Antwort gespiegelt), und es darf immer nur ein Request gleichzeitig 
offen sein, sonst trennt das Modul. Werte-Tags: `18`=u8, `19`=u16, 
`1a`=u32.

Zu den PIDs: auf dem Draht wird ein Parameter über eine 16-Bit-PID 
adressiert.
Bisher decodierte PIDs (Service PV, sid 4):

- `08fd` (u16) — Drehzahl in U/min
- `08fe` (u32) — Förderstrom Q, /1000 → m3/h (die oberen Bits sind 
Flags)
- `03a2` (u16) — Förderhöhe, /10000 → m
- `09ee` (u8) — Leistung, *0,5 W
- `09dc` (u32) — Betriebssekunden (+1/s, monoton)
- `0bc9` (u16) — Sollwert-Multiplikator: `round(Prozent * 40.96)`, Q12 
(100 % = `0x1000`) — schreibbar
- `0669` — Motor AN/AUS: `ff01` = an, `ff00` = aus — schreibbar

Schreiben (Sollwert, Motor an/aus) geht mit demselben Frame-Format über 
char-02, nur mit Opcode `42 03 ...` statt `42 01`.


UART -> im ist 115200 8E1, nicht 8N1. Das Wire-Protokoll ist ähnlich, 
hat aber zusätzlich eine 16-Bit-Prüfsumme, die ich nicht herausgefunden 
habe. Aktuell nutze ich BLE, und UART sniffing um die PIN zu bekommen.
von Martin D. (mdewendt)


Lesenswert?

Hallo,

Kannst du noch etwas weiter erklären wie du via BLE mit der Pumpe 
kommunizierst? Ich würde da gerne einen Rpi mit USB BLE Modul für 
verwenden.
Nutzt du das gatttool?

Martin
von Thomas (kosmos)


Lesenswert?

ich habs mal durch die KI gejagt

1. Das äußere Framing (Sicherungsschicht)7E (Flag): Das ist der absolute 
Standard-Marker für HDLC / PPP. Er signalisiert Frame-Start und 
Frame-Ende.Byte nach 7E (02 oder 04): Das ist der Frame-Typ 
(Control-Byte).02 = Control/Signaling (Heartbeat / Token): Ein kurzes 
Lebenszeichen. Dahinter folgt eine fortlaufende Sequenznummer/CRC 
(nn).04 = Data Frame (Information): Kapselt die eigentlichen 
Nutzdaten.Letzte Bytes vor 7E: Ein Prüfsummen-Mechanismus (meist CRC-16f 
oder CRC-8), weshalb sich bei identischem Inhalt die letzten Bytes 
ändern.2. Der "Smoking Gun"-Beweis in den Nutzdaten 
(Klartext-Analyse)Wenn wir die Hex-Werte der langen 04-Pakete in ASCII 
übersetzen, springen uns sofort Gerätenamen ins Auge. Schauen wir uns 
Zeile 16 deiner Nachricht an (Antwort von der Pumpe 2> auf ein 
04-Paket):04 9a 30210c6245016e0f02c13ce106e7182111ff71 53 74 72 61 74 6f 
73 20 50 49 43 4f 20 30 30 36 37 e00dWenn man den hinteren Teil ab 53... 
in Text umwandelt, erhält man:
53 74 72 61 74 6f 73 20 50 49 43 4f 20 \(\rightarrow \) "Stratos PICO 
"30 30 36 37 \(\rightarrow \) "0067" (vermutlich ein Teil der Firmware- 
oder Seriennummer)3. Warum es sich um BACnet MS/TP handeltDas 
Kapselungsschema (7E \(\rightarrow \) Frame-Typ \(\rightarrow \) Daten) 
und die Struktur der Datenpunkte entsprechen exakt dem BACnet-Protokoll. 
Wilo bildet damit intern BACnet-Objekte ab (Analog Inputs/Outputs für 
Durchfluss, Leistung, Förderhöhe).Schauen wir uns ein Request-Paket an 
(Zeile 27):04 19 
30300642030172f00db466303030113ce106e7112120ff8a1908c51908fd1908fe1909d9 
...30  30 06 / 42 03 01: Das sind typische ASN.1-codierte Identifier für 
BACnet-Objekttypen (z.B. Device-Objekt, Analog Value, etc.).Die sich 
wiederholenden Blöcke wie 19 08 c5, 19 08 fd, 19 08 fe am Ende sind 
BACnet-Property-Tags (Read-Property-Multiple Requests). Das 
Bluetooth-Modul fragt hier zyklisch eine ganze Liste von Registern ab.In 
Zeile 29 antwortet die Pumpe mit einer riesigen Liste:04 9a 
30420662440172f006c13ce106e7142111ffaa1908c5011908fd...Hier liefert die 
Pumpe die aktuellen Live-Werte (Leistung in Watt, Durchfluss in m³/h, 
Fehlermeldungen) zurück.4. Das Token- / Heartbeat-VerhaltenDie Sequenz 
am Anfang zeigt ein klassisches Master-Slave-Polling:1> 0275 und 2> 
0275: Das BT-Modul und die Pumpe werfen sich im Idle-Zustand extrem 
schnell (115200 Baud) den "Token" (02) mit einer Prüfsumme/ID (75) hin 
und her.Erst wenn das BT-Modul Daten will, bricht es den 02-Zyklus auf 
und sendet stattdessen einen 04-Datenframe.Praxistipp für dein 
ESP32-VorhabenSicherheit zuerst: Da du korrekterweise erkannt hast, dass 
die Pumpe das GND-Potenzial auf 230V-Phase/Nullleiter legt 
(kondensatorbasiertes Netzteil ohne Trafo), darfst du deinen ESP32 
niemals per USB an den PC anschließen, während er mit der Pumpe 
verbunden ist! Es knallt sofort.Die Lösung: Nutze einen digitalen 
Optokoppler (z.B. 6N137 oder einen fertigen UART-Isolator) für die 
TX/RX-Leitungen. Den ESP32 versorgst du über ein eigenes, galvanisch 
getrenntes 5V-Netzteil. Die Pumpe versorgt dann nur die pumpenseitige 
LED des Optokopplers über ihre 15V/GND (Spannungsregler auf 3,3V für die 
Koppler-VCC nicht vergessen).Software-Umsetzung: Du musst das Rad nicht 
neu erfinden. Da es sich um BACnet handelt, kannst du bestehende 
Open-Source-Bibliotheken nutzen. Du kannst entweder die rohen 
Hex-Pakete, die du aufgezeichnet hast, eins-zu-eins vom ESP32 
"abspielen" (Replay-Attacke), um bestimmte Werte abzufragen, oder einen 
BACnet-Stack auf dem ESP32 aufsetzen, um die Daten sauber zu parsen.

Formatierung ist leider flöten gegangen aber es sind ja schon einige 
Infos drin
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.