NEWS
Stiebel-ISG - Modbus
-
@netfritz
Hallo
Da ich mit dem Modbus Adapter die Holdingregister z.Z. nicht beschreiben kann,
vor allem SG Ready 1 und 2.
Habe ich es Heute mit ioBroker Node Red versucht.
Nach ein paar fehl Versuchen habe ich es hinbekommen SG Ready 1 und 2 anzusteuern.
Habe den node-red-contrib-modbus und node-red-contrib-modbus-flex-server installiert.
Dann den Flex.Server Knoten und Modbus-Red und Modbus-Write in das Flow gezogen
und Konfiguriert.
Hier noch der Flow zum Importieren.
Gruß NetFritz[ { "id": "e30b3d7c8e9c13ae", "type": "tab", "label": "Modbus", "disabled": false, "info": "", "env": [] }, { "id": "1c58a83f7b099c2c", "type": "modbus-flex-server", "z": "e30b3d7c8e9c13ae", "name": "", "logEnabled": false, "serverAddress": "localhost", "serverPort": "502", "responseDelay": 100, "unitId": 1, "delayUnit": "ms", "coilsBufferSize": 20000, "registersBufferSize": 20000, "minAddress": 0, "splitAddress": 10000, "funcGetCoil": "function getFlexCoil(addr, unitID) {\n\tif (unitID === node.unitId && \n\t\taddr >= node.minAddress && \n\t\taddr <= node.splitAddress) { \n\n\t\treturn node.coils.readUInt8(addr * node.bufferFactor) \n\t} \n}", "funcGetDiscreteInput": "function getFlexDiscreteInput(addr, unitID) {\n\taddr += node.splitAddress\n\tif (unitID === node.unitId && \n\t\taddr >= node.splitAddress && \n\t\taddr <= node.splitAddress * 2) { \n\n\t\treturn node.coils.readUInt8(addr * node.bufferFactor) \n\t} \n}", "funcGetInputRegister": "function getFlexInputRegister(addr, unitID) { \n\tif (unitID === node.unitId && \n\t\taddr >= node.minAddress && \n\t\taddr <= node.splitAddress) { \n\n\t\treturn node.registers.readUInt16BE(addr * node.bufferFactor) \n\t} \n}", "funcGetHoldingRegister": "function getFlexHoldingRegsiter(addr, unitID) { \n\taddr += node.splitAddress\n\tif (unitID === node.unitId && \n\t\taddr >= node.splitAddress && \n\t\taddr <= node.splitAddress * 2) { \n\n\t\treturn node.registers.readUInt16BE(addr * node.bufferFactor) \n\t} \n}", "funcSetCoil": "function setFlexCoil(addr, value, unitID) { \n\tif (unitID === node.unitId && \n\t\taddr >= node.minAddress && \n\t\taddr <= node.splitAddress) { \n\n\t\tnode.coils.writeUInt8(value, addr * node.bufferFactor) \n\t} \n}", "funcSetRegister": "function setFlexRegister(addr, value, unitID) { \n\taddr += node.splitAddress\n\tif (unitID === node.unitId && \n\t\taddr >= node.splitAddress && \n\t\taddr <= node.splitAddress * 2) { \n\n\t\tnode.registers.writeUInt16BE(value, addr * node.bufferFactor) \n\t} \n}", "showErrors": false, "x": 280, "y": 60, "wires": [ [ "d47aa0d1fa728da8" ], [ "d47aa0d1fa728da8" ], [ "d47aa0d1fa728da8" ], [ "d47aa0d1fa728da8" ], [ "d47aa0d1fa728da8" ] ] }, { "id": "d47aa0d1fa728da8", "type": "debug", "z": "e30b3d7c8e9c13ae", "name": "debug 231", "active": false, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 510, "y": 60, "wires": [] }, { "id": "e5d4b02e39142509", "type": "inject", "z": "e30b3d7c8e9c13ae", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "str", "x": 90, "y": 60, "wires": [ [ "1c58a83f7b099c2c" ] ] }, { "id": "802c615c03960bb5", "type": "modbus-read", "z": "e30b3d7c8e9c13ae", "name": "Read", "topic": "", "showStatusActivities": false, "logIOActivities": false, "showErrors": false, "showWarnings": true, "unitid": "1", "dataType": "HoldingRegister", "adr": "1500", "quantity": "20", "rate": "5", "rateUnit": "s", "delayOnStart": false, "startDelayTime": "", "server": "0b269ba065891482", "useIOFile": false, "ioFile": "", "useIOForPayload": false, "emptyMsgOnFail": false, "x": 270, "y": 140, "wires": [ [ "850acb94b17b4b94" ], [ "850acb94b17b4b94" ] ] }, { "id": "850acb94b17b4b94", "type": "debug", "z": "e30b3d7c8e9c13ae", "name": "debug 232", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 510, "y": 140, "wires": [] }, { "id": "cf41e8a95857a041", "type": "modbus-write", "z": "e30b3d7c8e9c13ae", "name": "Write", "showStatusActivities": false, "showErrors": false, "showWarnings": true, "unitid": "1", "dataType": "MHoldingRegisters", "adr": "4001", "quantity": "2", "server": "0b269ba065891482", "emptyMsgOnFail": false, "keepMsgProperties": false, "delayOnStart": false, "startDelayTime": "", "x": 250, "y": 200, "wires": [ [ "36fc03fafb4bfac3" ], [ "36fc03fafb4bfac3" ] ] }, { "id": "36fc03fafb4bfac3", "type": "debug", "z": "e30b3d7c8e9c13ae", "name": "debug 233", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 510, "y": 200, "wires": [] }, { "id": "6188c6b9a087442e", "type": "inject", "z": "e30b3d7c8e9c13ae", "name": "SG 2", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "[0,0]", "payloadType": "json", "x": 90, "y": 180, "wires": [ [ "cf41e8a95857a041" ] ] }, { "id": "361c3ea15c934a33", "type": "inject", "z": "e30b3d7c8e9c13ae", "name": "SG 3", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "[1,0]", "payloadType": "json", "x": 90, "y": 220, "wires": [ [ "cf41e8a95857a041" ] ] }, { "id": "0b269ba065891482", "type": "modbus-client", "name": "", "clienttype": "tcp", "bufferCommands": true, "stateLogEnabled": false, "queueLogEnabled": false, "failureLogEnabled": true, "tcpHost": "192.168.2.103", "tcpPort": "502", "tcpType": "DEFAULT", "serialPort": "/dev/ttyUSB", "serialType": "RTU-BUFFERD", "serialBaudrate": "9600", "serialDatabits": "8", "serialStopbits": "1", "serialParity": "none", "serialConnectionDelay": "100", "serialAsciiResponseStartDelimiter": "0x3A", "unit_id": "1", "commandDelay": "1", "clientTimeout": "1000", "reconnectOnTimeout": true, "reconnectTimeout": "2000", "parallelUnitIdsAllowed": true, "showErrors": false, "showWarnings": true, "showLogs": true } ]
-
welche Holding-Adresse (SGready) versuchst du denn zu schalten? bzw. zu schreiben?
Ich mache das über 44002 und dann über meine VIS... das funktioniert gut.
-
@android51
Hallo
Beim mir will der IOB Modbusadpter keine Holding Register beschreiben.
Beim User QLink geht es auch nicht.In Node Red Modbus wir die Adresse -1 angegeben.
Also wenn Du Die Adresse 4002 = SG Ready 1 schalten willst muss Du die 4001 eingeben.Beim ioBroker Modbus Adapter wird noch eine 4 vorrangestellt.
Um es genau zu sagen die Adresse setzt sich zusammen 40000 + 4002 = 44002.
Ich habe die 4001 angegeben.Bei Quantity habe ich eine 2 Eingegeben, es werden 2 Adressen beschrieben die 4002 und die 4003.
Einmal mit der 1 SG Ready1 und die 0 SG Ready2.
Und zurück beidemal 0 0.
Gruß NetFritz -
@netfritz
Wenn ich mich recht erinnere, konnte ich die 4001 damals auch nicht schalten, die 4002 hingegen schon. -
@android51
Hallo
Bei den Modbus Adressen für SG Ready 4001 - 4003 steht r/w in der Beschreibung.
Das muss eigentlich gehen.
Gruß NetFritz -
Da schon öfter mal die Frage aufkam, ob per Modbus auch die Aufnahmeleistung des Wärmetauschers ausgelesen werden kann.
In meiner Anleitung hat der Nutzer David in den Kommentaren gelistet, dass er die Werte dafür herausgefunden hat.
Vielen Dank dafür.
-
Danke für die Info. Ich habe die Modbus 33680 mal eingebunden und werde beobachten, wie sie sich heute über Tag verhält.
Ich finde allerdings ein wenig merkwürdig, dass die Adresse verfügbar ist, aber offiziell vom Stiebel Support (hatte Mailkontakt) noch nicht bekannt gegeben wird.
Zudem habe ich irgendwo gelesen, dass der Wert ziemlich "geschönt" ist und nicht der tatsächlichen Stromaufnahme entspricht. -
@android51 said in Stiebel-ISG - Modbus:
Zudem habe ich irgendwo gelesen, dass der Wert ziemlich "geschönt" ist und nicht der tatsächlichen Stromaufnahme entspricht.
Das Problem ist auch die Rundung, der Wert wird nur mit einer Stelle nach dem Komma angegeben. 0,999 wird halt 0,9 im Modbus
Ich habe bei mir ein Offset von +100W angelegt. Das kommt ganz gut hin wenn ich Nachts den Ruheverbrauch + Heizung zusammenrechne passt das. -
@android51
Kam bei dem Registerauslesetest was heraus?
Wir haben eine WPL15AS und einen WPM3 + ISG Web.
Für die SG-Ready Steuerung nutzen wir EVCC, was prima funktioniert, bis auf den fehlenden Wert der Stromaufnahme des Inverters bei uns. Betriebszustand 2 zu 3 und umgekehrt klappt, aber es wird immer 0kW Leistung angezeigt. (EVCC hat im Modbus template Register 680 stehen, welches scheinbar bei manchen Nutzern die aktuellen Verbrauch ausgibt (WPM G?))Wir haben WPM3 Software 6 (ISG 12/2/3/260) und komischerweise weder Prozessdaten in der Servicewelt, noch wirft das Register einen Wert aus.
Weißt du, ob man die Prozessdaten irgendwie in die Servicewelt bekommt, und auch wenn nicht, ob man die Inverterleitung doch irgendwie bekommen kann? -
@funkymaddox
bei mir lässt sich die Aufnahmeleistung ohne Probleme per Modbus auslesen. Ich traue nur den Wert nicht zu 100 %. Habe inzwischen einen shelly pro 3em, mit dem ich die Stromaufnahme der Wärmepumpe tracke. Der misst die einzelnen Phasen der Wärmepumpe. Der Wert ist grundsätzlich höher. Je höher die Aufnahmeleistung der Wärmepumpe, desto größer die Abweichung.
Was kannst du denn mit EVCC steuern? Ich dachte, dass wäre nur für Wallboxen. Kannste mal ein Screenshot von der Oberfläche posten und ein wenig beschreiben, wie du das nutzt? -
@android51 sagte in Stiebel-ISG - Modbus:
Je höher die Aufnahmeleistung der Wärmepumpe, desto größer die Abweichung.
kann es sein, dass am Gerät nur die "wirklich" für die Wärmeerzeugung genutzte Energie/Leistung angezeigt wird.
Nicht der Verbrauch von irgendwelchen Zusatzaggregaten?Hab so einen Effekt beim e-Auto.
Da zeigt das Auto anscheinend nur den reinen Verbrauch des Antriebs an, kein Licht, Heizung, Klima usw. -
@homoran
Ja, habe anderswo gelesen, dass dies genau so ist. Der Lüfter/Rotor und co zählen nicht zu der Inverteraufnahme in kW. Hatte auch gelesen, dass jemand anhand der Hz des Lüfters und co errechnen konnte, wie groß die Abweichung ist. Darauf könnte man eine Formel erstellen. Aber selbst ohne wäre ein geschätzter/gerundeter Wert schon besser als 0 -
@funkymaddox sagte in Stiebel-ISG - Modbus:
selbst ohne wäre ein geschätzter/gerundeter Wert schon besser als 0
meine Antwort bezog sich auf
@android51 sagte in Stiebel-ISG - Modbus:
Der Wert ist grundsätzlich höher. Je höher die Aufnahmeleistung der Wärmepumpe, desto größer die Abweichung.
da scheinen ja Werte >0 zu existieren
-
@homoran
Missverständnis. Du hast Recht. Bei mir und anderen WPM3/ISGweb Besitzern gibt die Anlage aber nicht mal die gerundeten/InverterOnly Werte aus, bei anderen Besitzern schon. Mein letzter Satz im Vorpost bezog sich auf mein Problem -
Mag sein, dass es nur die reine Inverter-Aufnahmeleistung ist. Mich hat aber immer die gesamte Aufnahmeleistung der Wärmepumpe interessiert. Ich sehe das als Gesamtanlage und möchte dann auch wissen, wie hoch die Gesamtaufnahme ist. Zur Berechnung des Jahresarbeitszahl (JAZ) der Wärmepumpe rechne ich auch die Gesamtaufnahme und nicht nur einen Teil der Stromaufnahme mein ein. Wenn man dann nur die Inverteraufnahmeleistung berücksichtigt, ist die Stromaufnahme geringer und die JAZ (fälschlicherweise) besser.
Aber... das war hier ja gar nicht Thema. -
@android51
Klar. Kurz: EVCC hat Wärmepumpen-Integration als "Beta" nun integriert.
https://docs.evcc.io/docs/devices/heatingStiebel war als eine der ersten mit dabei. Es gibt zwei Templates für Stiebel (WPM und LWA/LWZ).
EVCC nutzt Modbus und steuert die SG-Ready Funktionalität. Wobei hier nur Betriebstufe 2 und 3 (auch 4) genutzt werden.
Settings sind noch nicht zu 100% auf WP zugeschnitten und klingen teils noch für Kfz:So sieht das ganze bei mir aus:
(Aus = EVCC Steuerung inaktiv, PV = bei Überschuss Stufe 3, Schnell = Stufe 4)
Der Slider (60°c) ist nur Optik aktuell und wird auch überarbeitet.
Unsere WP schafft auch nur bis 55°c InverterOnly (Notheizstab geht bei bei SG-Ready nicht mit an)
Man hat die Auswahl der aktuellen WW Temp. oder der Puffer Temp..
Priorisierung des Überschuss arbeitet prima mit Wallboxen und co.Bei uns steht leider nur bei Leistung immer 0kW. Dies sollte eigentlich behoben sein und EVCC nutzt Register 680 dafür. Bei uns klappt dies aber aus unbekannten Gründen nicht. Bei anderen sieht es so aus:
Screenshot zeigt ein andere Problem, aber die 12w zeigen, dass an sich Werte ausgegeben werden. Ohne Leistung kein Geladen und keine Statistiken.PS: Shellys können als Leistungsaufnahme Meter integriert werden, womit zumindest (für mich als Laie umständlich) das Problem gelöst werden kann und du auch die Gesamtleistungsaufnahme der WP angezeigt bekommst, anstelle des "falschen" Modbusregister Readouts
-
@android51 Genau deswegen sieht es bei mir im Zählerschrank jetzt so aus
Der Schrank wurde extra mit der WP erweitert/ersetzt
-
@android51
Kannst du mir denn Tipps geben zur Nutzung Shelly? Macht ein 3 EM Sinn, also hast du nützliche Werte über die 2 Phasen der Notheizung, oder reicht auch ein 1 EM für die eine Phase des Inverters?
Was für ein Stiebel System hast du denn, dass du zumindest die Inverter Stromaufnahme Daten bekommst?
Wir haben eine WPL15AS, WPM3 (390-06), ISGWeg (12/2/3/260) und in der Servicewelt keinerlei Prozessdaten angezeigt. Ich wüsste gerne, woran es liegt, dass bei Nutzern wie mir keine Werte ausgelesen werden können via Modbus Register .. am WPM, am ISG, an der WP, an einer Software? -
@funkymaddox
Ich habe mir den shelly pro 3em geholt, weil den den Stromverbrauch der Wärmepumpe ermitteln möchte. Der shelly hat 3 Klemmen, die du um jede einzelne Phase klemmen kannst. Je nachdem, was du erfassen möchtest.
Verdichter, dann machst du die Klemmen und die drei Phasen des Verdichers. Gleiches könnte man mit dem Heizstab (Zusatzheizung) machen.
Ich habe die Klemmen allerdings vor die Hutschiene (WP) gesetzt und um die 3 Phasen geklemmt, die zur Wärmepumpenverteilung gehen, damit ich den gesamten Strom erfasse. Also Verdichter und auch Heizstab, wenn der mal angehen sollte oder z. B. die Steuerung.
Der shelly ermittelt auch einen fortlaufenden Zählerstand.Ich habe als Wärmepumpemmanager "wpm-system". Im Frontend werden die Prozessdaten bei mir unter Info - Wärmepumpe angezeigt. Geführt werden sie dort in der Rubrik "Prozessdaten".
Kontaktiere mal den support, die sind recht zügig mit dem Antworten... servicewelt@...
Das mit den EVCC werde ich mir mal genauer ansehen... ich mach das bislang immer noch händisch bei Gelegenheit, dass ich über einen virtuellen Schalter die SG-Ready Schnittstelle von 2 auf 3 schalte und wieder zurück.
Wie sind denn deine Erfahrungen mit EVCC? Was macht EVCC besser als die aktuellen Überschuss abzufragen? Berücksichtigt EVCC die Wetterprognose? Ich möchte natürlich nicht, dass die WP ständig den Status ändert und immer wieder anspringt. -
@android51
Mir würde der Verbrauch des Verdichters reichen. Laut Elektriker nur 1-phasig angeschlossen, daher die blöde Frage welchen Shelly, aber ich prüfe nochmal und informiere mich mal über die richtige Installation bei uns.Ah ok, dann ist das wohl einer der Unterschiede zum WPM3. Hier sind Prozessdaten nur am Steuergerät der WP abzulesen ... leider. Haben eben auch mal im iobroker getestet. Temperaturwerte bekomme ich richtig ausgelesen, aber 0 bei Register 33680 und 680.
Ich kann EVCC nur empfehlen. Es ist gerade im Umbruch von .ymal zu GUI Konfiguration.
Vorteile für mich:
Alles in einem Tool. Genaues PV Überschussladen, Wechselrichter+Speicher, Wallboxen, automatische Kfz Erkennung und aller wichtigen Daten dieser, Ladepläne, dyn. Stromtarife und Prioritäten integriert. Nun auch Heizstäbe und Wärmepumpen. Dazu gibts mittlerweile eine App und ich habe alles in der Handy ohne PC/Mac. Es gibt wirklich viele Detailsettings für jede Situation/Bedürfnis. Es ist sehr einfach für Laien (und wird durch GUI noch einfacher) aber man hat auch als Nerd die Freiheit, sehr viel im Detail selbst umzukonfigurieren. Gutes Team mit stetiger Hilfsbereitschaft, gute Community und stetige Weiterentwicklung. Dazu kommt, dass man keine Cloud braucht, sondern alles Local läuft (Raspi) und somit auch ohne Internet. Wetterprognose ist auch mit drin, ebenso wie CO2 Prognosen oder eben dyn Tarif Prognosen.
Habe bei der WP bei mir eingestellt, dass diese ab 10Min 1,4kW Überschuss in Stufe 3 geht und ab 150w Netzbezug für 20Min auf Stufe 2. So regelt diese nicht permanent on/off.