NEWS
Test Adapter canbus v1.1.x Latest
-
@crycode
Ich habe zb den hier: bbflyOBD VINT-TT55502 USB OBDII... https://www.amazon.de/dp/B01N18TOFB?ref=ppx_pop_mob_ap_share -
@crycode :
Auch erstmal vielen DANK für diesen Adapter, das ist genau was ich gesucht habe!!!!
Mein Plan wäre eine PV-Anlage (Fronius) mit meiner ROTEX HPSU Wärmepumpe intelligent miteinander kommunizieren zu lassen, damit man die maximale Autarkie über den Wärmespeicher Beton und Wasser meines Hauses erreichen kann. Für meine Rotex HPSU kenne ich über 150 Parameter.
Verstanden habe ich allerdings die Parameter des Adapters nicht ganz:Beispiel (alle Zahlen in Hex) für die Soll-Heizkreistemperatur T-HK Soll (kein erweiterter CAN Code):
Der Adapter stellt die Frage nach T-HK-Soll:
10A 61 00 04 00 00 00 00Die Antwort kommt:
300 22 0A 04 01 66 00 00 bedeutet 35,9°C bei einem Divisor von 10Schreiben kann ich T-HK Soll mit:
300 20 0A 04 01 2F auf 30,30°C bei einem Divisor von 10Wie bilde ich das im CAN Adapter ab?
Vielen Dank im Voraus
Michael
-
@michael-wind Dafür musst du dann zwei Nachrichten anlegen. Eine mit der ID 10A zum Senden der Anfrage und eine mit der ID 300 für die Antwort bzw. das Schreiben der Soll-Temperatur.
Ich hatte bereits Kontakt mit anderen Nutzern von (Rotex) Wärmepumpen. Diese Wärmepumpen verwenden scheinbar die gleichen CAN-IDs für unterschiedliche Nachrichten, wobei die Kennung der jeweiligen Nachricht dann in den ersten Datenbytes enthalten ist.
Zum Senden der Anfrage würde ich daher einen Custom Parser für die ID 10A vorschlagen mit folgendem Skript zum Schreiben:
buffer = Buffer.from([0x61, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00]);
Damit würde, egal was du als Wert in den entsprechenden State schreibst, immer die passende Nachricht gesendet werden. Zum Auslösen kannst du dann z.B. einfach per Skript eine 1 in den State schreiben.
Für die Antwort dann auch wieder ein Custom Parser mit folgendem Skript zum lesen bzw. schreiben:
// auf richtige Nachricht prüfen if (buffer.length >= 5 && buffer[0] === 0x22 && buffer[1] === 0x0A && buffer[2] === 0x04) { // Wert aus dem Buffer lesen und durch 10 teilen value = buffer.readUInt16BE(3) / 10; }
// Buffer zum Schreiben vorbereiten buffer = Buffer.from([0x20, 0x0A, 0x04, 0x00, 0x00]); // Wert * 10 auf Ganzzahl gerundet in den Buffer schreiben buffer.writeUInt16BE(Math.round(value * 10), 3);
Für weitere Daten müsstest du dann (wahrscheinlich) nur zusätzliche Custom Parser für die Nachrichten hinzufügen.
Ich hoffe das hilft dir weiter.
Grüße
Peter -
@michael-wind
Wie bekommst du denn die verbindung hin zur Rotex mit dem Adapter?
-
@cb187
Hallo,ich habe einen CAN HAT von an einem RasPi, beispielsweise:
https://www.ebay.de/itm/Waveshare-RS485-CAN-HAT-for-Raspberry-Pi-Zero-Zero-W-Zero-WH-2B-3B-3B-Allows-/183752124300?hash=item2ac87ae78cLG
Michael
-
@crycode
Hallo,da wäre ich ja nie drauf gekommen, vielen Dank.
Das Lesen funktioniert schon mal.
Beim Schreiben mit beispielsweise// Buffer zum Schreiben vorbereiten buffer = Buffer.from([0x30, 0x00, 0x13, 0x00, 0x00]); // Wert * 10 auf Ganzzahl gerundet in den Buffer schreiben buffer.writeUInt16BE(Math.round(value * 10), 3);
Kommt leider nur folgende Fehlermeldung:
(2973) Failed parsing JSON from canbus.0.680.json: No state foundIch bin allerdingsa auch kein Blockly Experte, mein Script sieht so aus:
var timeout; on({id: "hm-rpc.0.MEQ1849422.1.PRESS_SHORT"/*WW-OG-OS-OBEN.PRESS_SHORT*/, change: "any"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setStateDelayed("canbus.0.680.300013"/*T-WW-Soll1-Set*/, 46, 1000, false); sendTo("email", "send", { html: 'Die Warmwasser-Solltemperatur ist für die nächsten 30 Minuten auf 47°C erhöht worden.', to: 'Michael.Wind@GMX.de', subject: 'WW-Solltemperatur für die nächsten 30 Minuten erhöht' }); timeout = setTimeout(async function () { setStateDelayed("canbus.0.680.300013"/*T-WW-Soll1-Set*/, 44, 1000, false); sendTo("email", "send", { html: 'WW-Solltemperatur zurückgestellt', to: 'Michael.Wind@GMX.de', subject: 'Die Warmwasser-Solltemperatur ist auf 44 °C zurückgestellt worden.' }); }, 60000); });
-
@michael-wind Huch, das ist tatsächlich noch ein Bug im Adapter. Schau ich mir die nächsten Tage genauer an.
Als Workaround kannst du einmalig per Hand in den State canbus.0.680.json[]
schreiben, damit der State angelegt wird. Dann sollte es funktionieren. -
@michael-wind lässt du bei dir keine Datenpunkte erzeugen die du dann einfach verändern kannst?
-
@crycode
Hallo crycode,ok, jetzt lautet die Fehlermeldung:
(4742) Failed parsing JSON from canbus.0.680.json: SyntaxError: Unexpected end of JSON inputDer Code ist aber doch korrekt, sogar https://jsonformatter.curiousconcept.com/# meckert ihn nicht an.
-
@michael-wind Wann genau kommt die Meldung und was steht dabei im json State?
Beim Schreiben von z.B. 46 in den Temperatur-State sollte der json-State mit dem oben genannten Schreiben-Skript diesen Inhalt bekommen:[48,0,19,1,204]
-
@crycode
Hi,das war jetzt wunderbare Selbstheilung, ich hatte wirklich nichts geändert über Nacht
:
canbus.0 (8632) sending can message: {"id":1664,"ext":false,"rtr":false,"data":{"type":"Buffer","data":[48,0,19,1,204]}} canbus.0 (8632) sending can message: {"id":1664,"ext":false,"rtr":false,"data":{"type":"Buffer","data":[48,0,19,1,184]}}
Und die Rotex HPSU reagiert auch korrekt. Alles perfekt. Dann kann ich mein 6 Jahre altes Script jetzt in Rente schicken.
Vielen Dank für die schnellen Hilfen, der Rest ist ja dann nur noch ein Kinderspiel.
Michael
-
@michael-wind Super, das freut mich
Wenn du noch ein paar Beispiele für andere Daten der Wärmepumpe hast, dann kannst du mir die gerne PN zukommen lassen. Dann kann ich ein paar Beispiele dafür in die Doku mit aufnehmen.
Ich werde heute die v1.0.2 auf NPM veröffentlichen und ab morgen sollte sie dann auch im Latest-Repo auftauchen. Darin ist dann der Bug mit dem fehlenden State behoben (es kommt weiterhin einmalig die Warnung, aber der State wird dann erzeugt) und ein paar Übersetzungen sind aktualisiert.
-
Jetzt wäre es noch schön wenn elm funktionieren würde
-
Hallo ich habe jetzt nen richtiges CAN Modul in Iobroker wie frage ich jetzt die Rotex ab?
Ich versteh nur Bahnhof.
Kann ich vielleicht auch erstmal testen ob was ankommt?
Auf was für ne baudrate muss ich das can einstellen? -
@cb187 Was heißt bei dir "richtiges CAN Modul"?
Wenn dein Modul einen MCP2515 CAN-Controller hat, dann hilft dir vielleicht meine Anleitung dazu weiter: https://crycode.de/can-bus-am-raspberry-piWenn das soweit eingerichtet ist, dann kannst du über
candump can0
in einem Terminal dir den kompletten Datenverkehr auf dem Bus anzeigen lassen.
In einem zweiten Terminal kannst du mittelscansend can0 xxx#yyyyyy
Nachrichten senden, wobei xxx die Nachrichten-ID und yyyyyy die Daten in hex sind.
Den Infos von @Michael-Wind nach solltest du mittelscansend can0 10A#61000400000000
die Soll-Heizkreistemperatur abfragen können und im candump dann eine Antwort ähnlich300 22 0A 04 01 66 00 00
erhalten.Zur Bitrate der Wärmepumpe kann ich dir leider nichts sagen, da ich keine Wärmepumpe habe. Da kann dir aber bestimmt @Michael-Wind weiter helfen.
Was die Konfiguration angeht hast du ein paar Beiträge weiter oben schon ein Beispiel für die Soll-Heizkreistemperatur. Andere Daten müssten entsprechend dem Muster ähnlich zu implementieren sein.
Ich bin aktuell dabei eine Export/Import Funktion im json- und csv-Format einzubauen, wodurch man dann relativ einfach seine Konfiguration teilen kann und andere Konfigurationen dazu laden kann.
Weiterhin stelle ich mir vor, dass ich bekannte Configs für z.B. diese Wärmepumpe mit im GitHub Repo ablege und man diese dann einfach über die Adminseite laden kann. Somit wären dann die Einstellungen für einige Geräte für alle Nutzer zentral verfügbar und es muss nicht jeder selbst alles neu zusammenbauen.
-
@cb187
Hallo,anbei mal ein Export zum Ausprobieren, ohne Gewähr.
Warnung: Wenn an das System die falschen Befehle gesendet werden, kann sich das gesamte System "Aufhängen". Das kann im best case mit einem Neustart behoben werden, im worst case fragt das System nach und es müssen alle Grundparameter neu eingegeben werden. Das Fachmann-Passwort sollte also bekannt sein und man muss wissen, was man wo eingeben muss!
Es handelt sich bei mir um eine Rotex HPSU compact 516, model 141537, mit 11 kW Aussengerät, Baujahr 2013.
-
@michael-wind kann die Datei nicht laden.Und das rauskopieren und in eine exportierte Datei einfügen und wieder hochladen funzt auch nicht.
-
-
@michael-wind joa.miss der can socket im root laufen oder ist das egal?
In einer anderen vm funktioniert der usb2can jetzt nur in der vm von iobroker nicht.Aso kannste mal nen screenshot von einem parameter hier posten dann kann ich den mal eingeben.
-
Hallo @cb187,
mit -Ask fragen, dann sollte der richtige Wert in -Read stehen (die auskommentierten Zeilen kannst Du weglassen).
Mic