NEWS
Script Hilfe für Abfrage Serielle Kommunikation gesucht!
-
Hallo zusammen,
erst einmal vorweg: Ich bin absoluter Neuling und habe gestern erst den ioBroker installiert.
Ich hätte einen konkreten Anwendungsfall und kann dazu aber leider trotz intensiver Suche nichts finden.
Ich möchte meine Wärmepumpe über die vorhandene serielle Schnittstelle auslesen.
Die Kommandos sind mir bekannt und das funktioniert auch prima manuell über ein Terminal-Programm.
Der ioBroker läuft auf einem Raspberry Pi 3 und die serielle Schnittstelle ist ttyUSB0.
Es geht wirklich nur darum eine einzige Befehlskette (HEX) an die Wärmepumpe zu schicken und dann die Antwort (HEX) einzulesen.
Baudrate ist 9600 8N1
Wie bekomme ich das hin?
Ich hoffe, dass mir jemand von euch helfen kann.
Gruß
Franz
-
Hi,
Eventuell solltest du dir den Node-Red Adapter oder Blockly (JavaScript zum klicken) mal ansehen.
Darf ich mal fragen was für einen WP du hast? Ist nicht zufällig eine Waterkotte?
Gruß
Mirko
-
Hallo Mirko,
danke für die Info aber leider habe ich mit Node-Red oder Blocky noch nie was gemacht.
Ich habe aber bereits versucht das mit JavaScript und serialport hin zu bekommen, komme aber leider gerade auf keinen grünen Zweig.
Ja, das ist eine (mittlerweile 10 Jahre alte) Waterkotte.
Das Auslesen und auch Steuern über die serielle Schnittstelle funktioniert ja manuell ganz gut.
Hast Du da auch schon diesbezüglich was gemacht?
Ich möchte die Wärmepumpe nun halt in meine neue Homematic integrieren.
Gruß
Franz
-
Hi Franz,
Welche hast du genau? Ich habe eine Ai1 und würde die auch gerne auslesen.
Kannst du mir mal bereitstellen wie du das bisher gemacht hast?
Dann versuche ich mal Node-Red oder Blockly.
Gesendet von iPhone mit Tapatalk Pro
-
Hi Mirko,
ich habe eine DS.
Wenn Du auch noch den alten Resümat Regler mit serieller Schnittstelle hast, dann sollte das auch bei Dir funktionieren.
Die Infos kannst ich Dir gerne geben.
Ich suche mal alles zusammen.
Gruß
Franz
-
Hi,
Resümat habe ich auch.
Wenn du was für mich hast versuche ich mich mal.
Mirko
Gesendet von iPhone mit Tapatalk Pro
-
Hallo Mirko,
das Protokoll hier hier sehr gut beschrieben:
https://www.symcon.de/forum/threads/209 … e-abfragen
Protokoll:
! > - PC->WPP ::= DLE STX <kommando>DLE ETX <crc>> - WPP->PC ::= 'FF' DLE STX <daten>DLE ETX <crc>'FF'
! >
! > KOMMANDO ::= <cmd><adr><anz>>
! > CMD ::= '01 15' - SPEICHER LESEN
! > ADR ::= XXXX -
! > ANZ ::= XXXX -
! > DATEN ::= <gelesen>> GELESEN ::= '00 17' XX..XX - ANZ Antwortbytes
! >
! > CRC ::= CRC == Standard CRC-16
! > über <daten>| <kommando>mit Polynom=8005 init=0 lsb=0;
! > keine sonstige Verknüpfung, wie XOR
! >
! > In <daten>| <kommando>eventuell vorkommende DLE Zeichen werden zur
! > Wahrung der Codetransparenz verdoppelt.
! >
! > Beispiel um die Version zu lesen
! > Senden von
! > 10 02 01 15 00 00 00 02 10 03 FE 17
! > um ab Adresse 0000 zwei Datenbytes zu lesen (Version)
! >
! > Die WP antwortet mit
! > FF 10 02 00 17 1F BE 10 03 C0 AB FF</kommando></daten></kommando></daten></gelesen></anz></adr></cmd></crc></daten></crc></kommando>Die Adressen sind hier aufgeführt:
http://www.haustechnikdialog.de/Forum/t … sen?page=2
Adressen:
! Adresse Anzahl MenueEntry MenueName_de
! 0x0000 0x0002 00.00 Versions-Nummer
! 0x0002 0x0003 00.01 Versions-Datum
! 0x0005 0x0003 00.02 Betriebs-Mode
! 0x0008 0x0004 01.00 Temp-Aussen
! 0x000C 0x0004 01.01 Temp-Aussen-24h
! 0x0010 0x0004 01.02 Temp-Aussen-1h
! 0x0014 0x0004 01.03 Temp-Ruecklauf Soll
! 0x0018 0x0004 01.04 Temp-Ruecklauf
! 0x001C 0x0004 01.05 Temp-Vorlauf
! 0x0020 0x0004 01.06 Temp-WW Soll
! 0x0024 0x0004 01.07 Temp-WW Ist
! 0x0028 0x0004 01.08 Temp-Raum
! 0x002C 0x0004 01.09 Temp-Raum-1h
! 0x0030 0x0004 01.10 Temp-WQuelle-Ein
! 0x0034 0x0004 01.11 Temp-WQuelle-Aus
! 0x0038 0x0004 01.12 Temp-Verdampfer
! 0x003C 0x0004 01.13 Temp-Kondensator
! 0x0040 0x0004 01.14 Temp-Saugleitung
! 0x0044 0x0004 01.15 Temp-frei
! 0x0048 0x0004 01.16 Druck-Verdampfer
! 0x004C 0x0004 01.17 Druck-Kondensator
! 0x00F3 0x0001 02.00 Handabschaltung
! 0x00F4 0x0004 02.01 Hzg Einsatzzeitpunkt Sollwert
! 0x00F8 0x0004 02.02 Hzg Ruecklauf Sollwert am Einsatzp.
! 0x00FC 0x0004 02.03 Kennline Steigung Soll
! 0x0100 0x0004 02.04 Kennline Obere Begrenzung
! 0x0050 0x0004 02.05 Hzg: Temp Ruecklauf Soll
! 0x0054 0x0004 02.06 Hzg: Temp Ruecklauf Ist
! 0x0104 0x0001 02.07 Sollwertanhebung 4k fuer 24 Stunden
! 0x0105 0x0004 02.08 Pilotraum Sollwert
! 0x0109 0x0001 02.09 Pilotraum Faktor
! 0x010A 0x0004 02.10 Externe Anhebung
! 0x010E 0x0003 02.11 Freigabe Heizung
! 0x0111 0x0003 02.12 Sperren Heizung
! 0x0114 0x0003 02.13 Sollwertaenderung Ein
! 0x0117 0x0003 02.14 Sollwertaenderung Aus
! 0x011A 0x0004 02.15 St. 2 Kl. Obere Begrenzung
! 0x011E 0x0004 02.16 Kennlinie Hysterese
! 0x0122 0x0001 02.17 Pumpen Nachlaufzeit
! 0x0123 0x0001 03.00 Abschaltung
! 0x0124 0x0004 03.01 Klg Einsatzzeitpunkt
! 0x0128 0x0004 03.02 Ruecklauftemp. Sollwert am Einsatzzeitp.
! 0x012C 0x0004 03.03 Klg Kennlinie Steigung Soll
! 0x0130 0x0004 03.04 Kennlinie untere Begrenzung
! 0x0058 0x0004 03.05 Klg: Temp Ruecklauf Soll
! 0x005C 0x0004 03.06 Klg: Temp Ruecklauf Ist
! 0x0134 0x0001 04.00 Abschaltung
! 0x0135 0x0003 04.01 Zeit ein
! 0x0138 0x0003 04.02 Zeit aus
! 0x0060 0x0004 04.03 WW: Temp Ist
! 0x013b 0x0004 04.04 Warmwasser Soll
! 0x013F 0x0004 04.05 Beckenwasser Temperatur Soll
! 0x0143 0x0004 04.06 Warmwasser Hysterese
! 0x0147 0x0004 04.07 Beckenwasser Hysterese
! 0x0064 0x0003 05.00 Uhrzeit
! 0x0067 0x0003 05.01 Datum
! 0x006A 0x0004 05.02 Betriebsstunden Kompressor
! 0x006E 0x0004 05.03 Betriebsstunden Heizbetrieb
! 0x0072 0x0004 05.04 Betriebsstunden Warmwasserbetrieb
! 0x0076 0x0004 05.05 Betriebsstunden Stufe 2
! 0x007A 0x0003 05.06 Messbeginn Zeit Kompressor
! 0x007D 0x0003 05.07 Messbeginn Datum Kompressor
! 0x0080 0x0003 05.08 Messbeginn Zeit Pumpen
! 0x0083 0x0003 05.09 Messbeginn Datum Pumpen
! 0x0086 0x0001 05.10 Betriebsstunden Reset Kompressor
! 0x0087 0x0001 05.11 Betriebsstunden Reset Pumpen
! 0x0088 0x0001 06.00 Kennwort
! 0x0089 0x0001 06.01 Werkseinstellung
! 0x014B 0x0001 06.02 Modem Klingelzeichen
! 0x014C 0x0001 06.03 Fremdzugriff
! 0x014D 0x0001 06.04 Schluesselnummer
! 0x014E 0x0003 06.05 SetBetriebsMode
! 0x008A 0x0001 06.06 Reset Waermepumpe
! 0x0151 0x0001 06.07 Hzg: Externe Freigabe
! 0x0152 0x0004 06.08 Hzg: Externe Ruecklaufsteuerung
! 0x0156 0x0004 06.09 St2: TempQAus < Min
! 0x015A 0x0004 06.10 St2: TempVerd < Min
! 0x015E 0x0001 06.11 Estrich Aufheizen
! 0x015F 0x0001 06.12 Hzg: Externe Steuerung
! 0x0160 0x0001 06.13 St2 bei EVU Absch.
! 0x0161 0x0001 06.14 Frg. Beckenwasser
! 0x0162 0x0004 06.15 Scale Faktor
! 0x0166 0x0004 06.16 Offset Niederdr.
! 0x016A 0x0004 06.17 Offset Hochdr.
! 0x016E 0x0001 06.18 DO-Handkanal
! 0x016F 0x0001 06.19 DO-Handkanal Ein
! 0x008B 0x0002 06.20 CRC-Summe
! 0x0174 0x0001 06.21 Neu-Start
! 0x0175 0x0001 06.22 Run-Flag
! 0x008E 0x0002 06.23 Display Zeile 1
! 0x0090 0x0001 06.24 Display Zeile 2
! 0x0091 0x0003 07.00 Ausfall Zeit
! 0x0094 0x0003 07.01 Ausfall Datum
! 0x0097 0x0001 07.02 Ausfall Betriebszustaende
! 0x0098 0x0001 07.03 Ausfall DO Buffer
! 0x0099 0x0001 07.04 Ausfall DI Buffer
! 0x009A 0x0001 07.05 Ausfall AI Error
! 0x009B 0x0001 07.06 Ausfall AI DI
! 0x009C 0x0004 07.07 Ausfall AI Temp Aussen
! 0x00A0 0x0004 07.08 Ausfall AI Temp WQ Ein
! 0x00A4 0x0004 07.09 Ausfall AI Temp WQ Aus
! 0x00A8 0x0004 07.10 Ausfall AI Temp Verdampfer
! 0x00AC 0x0004 07.11 Ausfall AI Temp Heizung Ein
! 0x00B0 0x0004 07.12 Ausfall AI Temp Heizung Aus
! 0x00B4 0x0004 07.13 Ausfall AI Temp Kondensation
! 0x00B8 0x0004 07.14 Ausfall AI Temp Warmwasser
! 0x00BC 0x0001 07.15 Ausfall Term AI Error
! 0x00BD 0x0001 07.16 Ausfall Term AI Di
! 0x00BE 0x0004 07.17 Ausfall AI Temp Raum
! 0x00C2 0x0001 07.18 Clear Ausfälle
! 0x00C3 0x0001 08.00 Unterbrechungen
! 0x00C4 0x0001 08.01 Warnung Eingangsseite
! 0x00C5 0x0001 08.02 Warnung Ausgangsseite
! 0x00C6 0x0001 08.03 Warnung Sonstige
! 0x00C7 0x0001 08.04 Ausfall
! 0x00C8 0x0001 08.05 AI Error Fuehler Ausfall
! 0x00C9 0x0001 08.06 AI Di Fuehler defekt
! 0x00C9 0x0003 08.07 Kontrollwert fuer Fuehlerkalibrierung
! 0x00CC 0x0001 08.08 Unterbrechung Raumfuehler
! 0x00CD 0x0001 08.09 Kurzschluss Raumfuehler
! 0x0171 0x0001 08.10 Unterbrechung Warung Eingangsseite
! 0x0172 0x0001 08.11 Unterbrechung Warung Ausgangsseite
! 0x0173 0x0001 08.12 Unterbrechung Warung Ausgangsseite
! 0x00CE 0x0001 09.00 Betriebszustaende
! 0x00CF 0x0001 09.01 DO-Buffer
! 0x00D0 0x0001 09.02 DI-Buffer
! 0x00D1 0x0003 09.03 Gesamtstatus
! 0x00D4 0x0003 09.04 Status Verriegelung
! 0x00D7 0x0003 09.05 Status Heizung
! 0x00DF 0x0001 09.10 Mode Heizung
! 0x00E0 0x0001 09.11 Mode Kuehlung
! 0x00E1 0x0001 09.12 Mode Warmwasser
! 0x0000 0x0001 10.00 Logger Zyklus
! 0x0000 0x0001 10.01 Initialisierung des Loggers
! 0x0000 0x0004 10.02 Speicherfehler des Loggers
! 0x00E3 0x0003 10.03 Uhrzeit der Initialisierung
! 0x00E6 0x0003 10.04 Datum der Initialisierung
! 0x00E9 0x0002 10.05 Maximale Anzahl der Datensaetze
! 0x00EB 0x0003 10.06 Laufende Nr. aktueller Datensatz
! 0x00ED 0x0002 10.07 Anzahl gespeicherter Datensaetze
! 0x00EF 0x0002 10.08 Groesse eines Datensatzes
! 0x00F1 0x0002 10.09 Max Groesse das DatenspeicherEs gibt auch die Möglichkeit, alles auf einmal mit nur einem Befehl auszulesen.
Genau das macht z.B. das original Serviceprogramm von Waterkotte.
Genau diesen Befehl müsste man also zyklisch schicken.
Man erhält dann eine ewig lange Antwort von der Wärmepumpe mit allen oben ausgeführten Adressen zurück.
Genau diese Antwort muss man dann noch zerlegen und schon hat man sämtliche Informationen von der Wärmepumpe.
Der Befehl lautet:
0x10 0x02 0x01 0x15 0x00 0x00 0x00 0xf3 0x10 0x03 0x7c 0x32
Der macht eigentlich nichts Anderes als ab Adresse 0x00 insgesamt 243 bytes auszulesen.
Dementsprechend lang ist dann auch die Antwort…
Zum Zerlegen und Umrechnen der Antwort hatte ich mir schon mal ein JavaScript programmiert.
Das müsste ich noch irgendwo auf einem anderen Rechner haben.
Dann hätte man auch gleich die richtigen Werte.
Ich such es raus und poste es hier.
Wir bräuchten also jetzt für den Anfang wirklich nur eine Funktion, die zyklisch 0x10 0x02 0x01 0x15 0x00 0x00 0x00 0xf3 0x10 0x03 0x7c 0x32 schickt und die Antwort einliest.
Mehr erst mal nicht.
Gruß
Franz
-
OK.
Danke für die Info. Ich schau mal aber erwarte bitte kein kurzfristiges Wunder von mir.
Wenn eventuell jemand anderes der mit liest hierzu eine Idee hat… gerne her damit
-
Hallo Mirko,
kein Thema.
Ich habe das alte Script gefunden.
Ich habe es gerade mit einem aktuellen Datensatz aus der Wärmepumpe getestet - funktioniert einwandfrei.
Die Antwort der Wärmepumpe auf den oben erwähnten Befehl ist z.B.: FF100200171FBE180B060105011010D2A33EA8F5923F782A0B3F5B0F00427208FE41BA1F1442ECFF4742721C4E425238DEC200007041705363412DCF32419A4D89410BB1B3410000A0410000000000000000000000005B0F00427208FE41000090417208FE41721C4E42081715170212E154B545EC27AA453C1BB44310100600230101010101010101010101010000000000AF630000080628140E0B021200A1280000986BC7404D357141664A404105528141D6BCF441614CF3413BFAC0415953724203000000A04100000000000000002769030000002800050000568B000000000000000050080C003713060A0811012700BB01270028351210031BD0FF
Mein JavaScript braucht die Daten aber derzeit noch zwischen den Bytes ein Leerzeichen.
Also FF 10 02 00 17 1F BE ….
In der rar im Anhang sind drei Dateien:
1. test.html
2. wpauswert.js
3. wpdata.js
Mit dem wpauswert.js werden die Daten zerlegt und umgerechnet.
In der wpdata.js steht die Rückantwort der WP im Rohformat.
Die wpdata.js bräuchten wir aber nicht unbedingt.
Die wpauswert.js liest nämlich die Daten aus wpdata.js in eine Variable ein.
Ich hatte das damals mal für eine Darstellung / Visualisierung geschrieben.
Gruß
Franz
5996_wp_auswertung.rar -
Hi Franz,
du hast ja schon Javascripte.
Kannst du den Titel des Themas eventuell ändern z.B.: Script Hilfe für Abfrage Serielle Kommunikation gesucht!
Denke dann könnte uns eventuell einer der Script Gurus hier schneller helfen.
Vielleicht sollten wir auch einen Mod bitten das in Script Unterforum zu verschieben.
Gruß
Mirko
EDIT: @Franz: habe es schonmal verschieben lassen
-
Hallo Mirko,
ja, das das habe ich mal vor ca 8 Jahren geschrieben, da die Auswertung der Daten nicht so ganz einfach ist.
Wie gesagt - wir bräuchten echt nur noch ein Script mit dem wir die Daten von der Wärmepumpe abfragen und in eine Variable schreiben.
Ich hab da jetzt auch was gefunden und angepasst:
! createState('Waterkotte.Daten.Rohdaten');
! var SerialPort = require("serialport");
! var port = new SerialPort("/dev/ttyUSB0", {
! baudRate: 9600,
! // xon: true,
! // xoff: true,
! //flowControl: false
! //parser: SerialPort.parsers.byteDelimiter([2,4])
! // platformOptions: {vmin: 0, vtime: 10, hupcl: false}
! },
! function (err) {
! if (err) {
! return console.log('Error1: ', err.message);
! }
! // Flush input
! port.flush();
! // send hello
! port.write("\x10\x02\x01\x15\x00\x00\x00\xf3\x10\x03\x7c\x32", function(err) {
! if (err) {
! return console.log('Error on write: ', err.message);
! }
! console.log('Daten gesendet');
! // port.close();
! });
! });
! port.on('data', function (data) {
! console.log('Data: ' + data.toString('hex'));
! var daten=[];
! daten=data.toString('hex');
! setState('Waterkotte.Daten.Rohdaten', daten & 0xFF,true);
! port.close();
! });
! port.on('open', function() {
! console.log('Connected');
! });
! port.on('error', function(err) {
! console.log('Error2: ', err.message);
! // port.close();
! });
! // close port if the script stopped (to be able to open it again)
! onStop(function (callback) {
! if (port && port.isOpen()) {
! port.close();
! console.log('port closed');
! }
! // callback();
! });
Quelle = http://forum.iobroker.net/viewtopic.php … serialportDas Script schickt auch tatsächlich die Daten über die Serielle raus und empfängt auch was.
Ich hab es aber bisher nur mit einem zweiten Rechner via Terminalprogramm getestet.
Probleme:
1. der iobroker hängt sich irgendwann komplett auf (zumindest bei mir)
2. So wie es jetzt ist empfängt es nicht alle Daten wegen dem port.close() hier:
__setState('Waterkotte.Daten.Rohdaten', daten & 0xFF,true);
<u>port.close();</u>__
3. wenn man das port.close() hier weg lässt, dann bleibt die serielle immer offen und man kann keine neuen Daten mehr senden.
Gruß
Franz
-
Werde mir morgen mal nen Rechner zurecht machen und ein langes Kabel suchen damit ich nicht in der Kälte an der WP stehen muss und dann testen.
Gesendet von iPhone mit Tapatalk Pro
-
Alles klar.
Du brauchst ein Nullmodem-Kabel.
Gruß
Franz
-
OK.
Kabel ist kein Problem. Aber da die Heizung im Garagen Anbau steht … brrr... ist mir das heute zu kühl mit einem Kurzen Kabel.
Morgen komme ich an mein 10 m Kabel. Da kann ich im warmen sitzen bleiben
-
Noch ein kleiner Tipp:
Probier's vielleicht erst mal über ein Terminal-Programm.
Hterm z.B.
Dann weißt Du zumindest, dass die Hardware funktioniert.
Und Du musst in der WP den Fernzugriff einschalten.
Wenn nix geht, dann schau mal in der WP, ob das Flachbandkabel am Resümat angesteckt ist.
Viel Erfolg morgen!
Gruß
Franz
-
Hi Franz,
abfrage mit HTERM klappt nach Kabel anstecken und freischalten des Fernzugangs.
Script läuft aber auf dem alten Testrechner der jetzt an der WP steht nicht.
Muss das Teilchen mal auf den aktuellen Stand bringen und dann testen.
Mirko
-
Hallo Mirko,
das hört sich doch schon mal gut an.
Bin schon gespannt.
Gruß
Franz
-
Hallo Mirko,
ich habe gestern jetzt selber noch etwas probiert und hätte jetzt eventuell eine Ausweichlösung mit einem Python-Script.
Das muss ich jetzt erst aber erst ausführlich testen.
Falls das also direkt mit JavaScript mit dem iobroker nicht funktionieren sollte, dann könnten wir hier weitermachen.
Gruß
Franz
-
Hi Franz,
als du mit deinem Script die Werte ausgelesen hast, wurde die Ausgabe dann komplett in der Console angezeigt?
Ich kann aktuell mit Sniffer sehen das die Antwort der WP am Serialport ankommt aber das Javascript zeigt mir das nicht in der Console an.
Benutze aktuell einen PI3 mit USB Serial Konverter mit PL2303 Chip.
Mirko
-
aber das Javascript zeigt mir das nicht in der Console an. `
Das liegt evtl. an einem Bug in der aktuellen version des js-Adapters.Bitte im Reiter log nachsehen.
Gruß
Rainer