NEWS
[gelöst] Benötige Hilfe MODBUS TCP: Hoymiles HM-1500/DTU-PRO
-
Hallo,
ich habe mich seit gestern auch einmal mit den Modbus Datenpunkten der DTU befasst und an mir selbst gezweifelt. (DTU-Pro-S mit HMS-800-2T)
Schuld ist die Adressierung, die die DTU verwendet. diese ist Byte-orientiert. Das führt dazu, dass die Adressen zwischen DTU und ioBroker (und anderen Modbus Clients) abweichen: die DTU zählt die Bytes ab der Startadresse hoch. ioBroker und andere zählen die Worte ab der Startadresse hoch. Und da die Register immer als Block (function code 0x03) gelesen werden...Wichtig ist in den Allgemeinen Einstellungen noch die Blockgröße von 40 (oder einem Mehrfachen davon) Registern:
Hier einmal beispielhaft meine Datenpunkte für die Holding-Register:
_address name description unit type len factor offset formula role room poll wp cw isScale 4096 Inverter.1.SN.0 uint8be 1 1 0 x.toString(16) value true false false false 4097 Inverter.1.SN.1 uint8le 1 1 0 x.toString(16) value true false false false 4097 Inverter.1.SN.2 uint8be 1 1 0 x.toString(16) value true false false false 4098 Inverter.1.SN.4 uint8be 1 1 0 x.toString(16) value true false false false 4098 Inverter.1.SN.3 uint8le 1 1 0 x.toString(16) value true false false false 4099 Inverter.1.SN.5 uint8le 1 1 0 x.toString(16) value true false false false 4099 Inverter.1.Port uint8be 1 1 0 value true false false false 4100 Inverter.1.PV.Spannung V uint16be 1 0.1 0 value true false false false 4101 Inverter.1.PV.Strom A uint16be 1 0.01 0 value true false false false 4102 Inverter.1.Netz.Spannung V uint16be 1 0.1 0 value true false false false 4103 Inverter.1.Netz.Frequenz Hz uint16be 1 0.01 0 value true false false false 4104 Inverter.1.PV.Leistung W uint16be 1 0.1 0 value true false false false 4105 Inverter.1.Energie.heute Wh uint16be 1 1 0 value true false false false 4106 Inverter.1.Energie.gesamt Wh uint32be 2 1 0 value true false false false 4108 Inverter.1.Temperatur °C int16be 1 0.1 0 value.temperature true false false false 4109 Inverter.1.Status int16be 1 1 0 state true false false false 4110 Inverter.1.Alarm.Code int16be 1 1 0 state true false false false 4111 Inverter.1.Alarm.Count int16be 1 1 0 value true false false false
Ergebis:
-
@s8472 sagte in [gelöst] Benötige Hilfe MODBUS TCP: Hoymiles HM-1500/DTU-PRO:
Hallo,
ich habe mich seit gestern auch einmal mit den Modbus Datenpunkten der DTU befasst und an mir selbst gezweifelt...Hallo,
ich hänge mich da mal dran, oder soll ich einen neuen Thread aufmachen?
Im Prinzip geht es um das selbe Thema, HM-1500 an der DTU-Pro. Da habe ich gestern hochmotiviert damit begonnen an der DTU-Pro den Modbus umzustellen, Adresse vergeben und in ioBroker eingebunden.Soweit so gut, die passenden Adressen habe ich aus den Beiträgen weiter oben genommen (4116, 4120, ...) aber ich laufe ständig in einen Error, bekomme gar keine Werte raus:
Poll error count: 1 code: {"errorCode":132,"exceptionCode":1,"message":"ILLEGAL FUNCTION"}Da hänge ich jetzt schon ganz verzweifelt rum, was mache ich falsch, dass das bei euch läuft und bei mir eine "ILLEGAL FUNCTION" schmeißt? Welche Function? Ich verwende ja keine anderen Einstellungen wie weiter oben angegeben. Zur Zeit habe ich nur mehr die Adresse 4116, "Power_1" zum Testen als Eingabe konfiguriert, oder muss ich die auch/oder als Holding eintragen?
In manchen Beträgen zur DTU-Pro lese ich auch was von der Seriennummer, muss ich die auch wo eintragen? Bis dato habe ich nur die IP, Port und Adresse in den modbus Einstellungen eingetragen. Fehlt noch was, wo setze ich an um nicht schon an einer einzigen Adresse (4116) zu scheitern?
Gruß
Sigi -
@sigika
Hallo,
"ILLEGAL FUNCTION" bezieht sich, soweit ich das beobachtet habe, auf den Modbus Function Code. Also um welchen registertyp es sich handelt, und ob im Block oder einzeln gelesen / geschrieben wird. Ich habe die Meldung immer bekommen, wenn (durch die unglückliche Adressberechnung der DTU) eine Adresse außerhalb des gültigen Adressbereichs heraus kam, oder nicht als Holding abgefragt habe (sie Register Liste von Hoymiles: function code 0x03.wichtig war bei mir, dass die 1. Adresse im Block mit der offiziellen Adressliste übereinstimmt und dann die Register ab da zusammenhängend im Block gelesen werden.
Gruß
-
Hallo,
Danke, jetzt komme ich schon weiter. Da bin ich wohl auch an den komischen Offset der Adressen aus der DTU gescheitert. So wie es aussieht hat die DTU-Pro die selben Adressen/Register wie die DTU-Pro-S.Mit der Anleitung aus deiner Konfiguration und Eintrag in die Holdingregister, sehe ich jetzt auch Werte (nicht alle, weil schon finster und die Micros off sind ...) Aber den Error habe ich jetzt endlich weg.
Eine DTU spezifische Frage hätte ich noch, vielleicht bist du auch schon darüber gestolpert:
Nachdem die RS484 Schnittstelle auf "Remote Control" geändert wurde, funktioniert dann das "Export Management" noch? Ich verwende in meiner DTU eine Nulleinspeisung. Ist die dann noch aktiv, oder muss ich die jetzt ständig selber über den ioBroker abgleichen?
Und wie schaut es mit der Verbindung zur Cloud aus, die ist mit der Umstellung des modbus auch nicht mehr aktiv, oder? -
Moin,
zum Export Management kann ich nichts sagen. Habe ich nicht weiter getestet, weil ich es nicht nutze.
Die Cloud-Anbindung funktionierte bei mir weiter (habe ich zur Plausibilitätsprüfung der Messwerte verwendet). -
@s8472 mit welcher Adresse würde es denn mit Inverter 2 weitergehen?
Das ist ja echt irgendwie tricki das Ganze
Danke dir.
Gruß
-
@s8472 Hi.
Also ich hab das jetzt mal so eingetragen.
Sieht soweit auch recht gut aus.
Nur bei der PV Leistung wird mir nur die Leistung von einem Solarmodul angezeigt. (Habe 2 Stück installiert)
Weißt du eventuell warum das so sein könnte?
Danke dir.
-
Moin @shakesbier ,
ein Wechselrichtereingang belegt 1 Datenblock.
Ein Dualwechselrichter de entsprechen 2.
Das kann man auch an der Seriennummer erkennen. -
@s8472 Hi.
Danke schon mal.
Wie muss ich das denn in den Registern eintragen?
Bin da sehr unerfahren
Gruß Shakesbier
-
Es sind immer 40er Datenblöcke.
deswegen ist es auch wichtig in den Allgemeinen Einstellungen die Blockgröße auf 40 Byte zu stellen.4096 Inverter.1.SN.0 4097 Inverter.1.SN.1 4097 Inverter.1.SN.2 4098 Inverter.1.SN.3 4098 Inverter.1.SN.4 4099 Inverter.1.SN.5 4099 Inverter.1.Port 4100 Inverter.1.PV.Spannung 4101 Inverter.1.PV.Strom 4102 Inverter.1.Netz.Spannung 4103 Inverter.1.Netz.Frequenz 4104 Inverter.1.PV.Leistung 4105 Inverter.1.Energie.heute 4106 Inverter.1.Energie.gesamt 4108 Inverter.1.Temperatur 4109 Inverter.1.Status 4110 Inverter.1.Alarm.Code 4111 Inverter.1.Alarm.Count 4112 Inverter.1.Link 4136 Inverter.2.SN.0 4137 Inverter.2.SN.1 4137 Inverter.2.SN.2 4138 Inverter.2.SN.3 4138 Inverter.2.SN.4 4139 Inverter.2.SN.5 4139 Inverter.2.Port 4140 Inverter.2.PV.Spannung 4141 Inverter.2.PV.Strom 4142 Inverter.2.Netz.Spannung 4143 Inverter.2.Netz.Frequenz 4144 Inverter.2.PV.Leistung 4145 Inverter.2.Energie.heute 4146 Inverter.2.Energie.gesamt 4148 Inverter.2.Temperatur 4149 Inverter.2.Status 4150 Inverter.2.Alarm.Code 4151 Inverter.2.Alarm.Count 4152 Inverter.2.Link 4176 Inverter.3.SN.0 4177 Inverter.3.SN.1 4177 Inverter.3.SN.2 4178 Inverter.3.SN.3 4178 Inverter.3.SN.4 4179 Inverter.3.SN.5 4179 Inverter.3.Port 4180 Inverter.3.PV.Spannung 4181 Inverter.3.PV.Strom 4182 Inverter.3.Netz.Spannung 4183 Inverter.3.Netz.Frequenz 4184 Inverter.3.PV.Leistung 4185 Inverter.3.Energie.heute 4186 Inverter.3.Energie.gesamt 4188 Inverter.3.Temperatur 4189 Inverter.3.Status 4190 Inverter.3.Alarm.Code 4191 Inverter.3.Alarm.Count 4192 Inverter.3.Link
und immer so weiter je Eingang
-
@s8472 ahhhh jetzt verstehe ich.
Inverter 1 ist der 1. Eingang und Inverter 2 der 2. Eingang.
Jeder Eingang hat 40 Blöcke.
Wenn ich einen 2. Wechselrichter habe.
Beginnt der dann beim Block Inverter 3?
Gruß
-
@shakesbier genau
-
-
@shakesbier
So du bist der Beste.Klappt einwandfrei.
Kann man den Chint Zähler auch per Modbus (Iobroker) auslesen?
-
@shakesbier
Ist der Zähler für Einspeisemanagement an die DTU angeschlossen? Dafür stehen keine Register in der Liste.
Eventuell direkt in ioBroker einbinden? -
Bei firmware V00.02.23 von DTU, geht es nicht mehr mit diese daten.
Poll error count: 1 code: {"errorCode":132,"exceptionCode":1,"message":"ILLEGAL FUNCTION"}
Auf altere firmware, lief alles perfect