So ganz straight forward scheint mir das in HA nicht dokumentiert zu sein.
Ich habe eine modbus.yaml angelegt, die in der Configuration.yaml auch verlinkt und da die Sensoren nach dem nachfolgenden Schema angelegt:
Die Slave-Adress ist die des Gerätes das du abfragst (mein Wechselrichter hat eben die 247, meistens haben die Teile eine 1 als Standard. Aber das musst im Handbuch nachsehen).
Die adress ist die Registeradresse, die unit of measurement ergibt sich ebenfalls aus der Doku zu deinen Modbusregistern. Ich nutze zwar Modbus TCP, aber das sollte keinen Unterschied machen.
Leider habe ich auch keine Option gefunden, wie man die grundsätzliche Kommunikation zwischen dem Modbus Slave und HA checken kann. Bei mir war das ewiges Trial and Error…vlt weiss da jemand anderes mehr
interessanter Weise müssen die Adressen für Modbus TCP komplett geschrieben werden (z. B. 30003) für ein Input-Register Adresse 2, bei Modbus RTU jedoch eben ohne Offset 30001.
Meine modbus-yaml sieht so aus: (für den Modbus RTU-Teil mit Stromzähler SDM72DM-V2 MID)
Die Begriffe und Funktionsweise zu kennen ist nicht ganz unwichtig, auch bei der Suche nach Infos.
Master: löst die Kommunikation aus, gibt’s für gewöhnlich nur 1 mal im Netzwerk. (Multimaster ignorieren wir mal) Slave: Sind die Teilnehmer im Bus und Antworten auf die Kommunikation, Dürfen maximal 32 am Netzwerk sein. Adress: Damit ist die Adresse des Slaves gemeint der angesprochen wird. In der Regel lassen sich diese durch Drehschalter, Dip-Schalter o.ä. Einstellen. Gültig sind Adressen bis 0 bis 247 verwendet werden oft, limitiert durch die Art der Adressschalter, Adressen bis 99. Gibt also mehr mögliche Adresse n als Teilnehmer. Registeradress: ist die Adresse des Registers in dem jeweiligen Slave. Diese enthalten je 2 Byte an Daten Registertyp: Die 2 Byte bzw. 16 Bit bzw. 1 Word müssen umgerechnet werden unterschiedliche Integration haben bereits Methoden dazu an Board. Doku lesen. Befehl: Kennzeichnet die Art des Registers das angesprochen wird bzw. den Befehl mit dem der Slave angesprochen wird. Read Write MultiRead usw.
Oft gibt es Registertabellen in denen alles mehr oder weniger gut dokumentiert ist.
Oft sind die Register in diesen Tabellen um 1 verschoben also lfd. Nummer ist ungleich der Registeradresse.
Die Kommunikationseinstellungen (Parität, Stopbits, Datenbits, Baudrate) an Master und Slave müssen im Netzwerk übereinstimmen und am dem Master (im Programm) sowie allen Slaves (über Schalter) gesetzt werden.
An den Slaves ist ein Standard eingestellt, der auch oft dokumentiert ist.
Dieser lässt sich aber auch über Dipschalter usw. verändern.
Die Kommuinikationseinstellungen und Slaveadressen lassen sich in der Regel auch über funktionierendes Modbus auslesen und teils ändern, so kann man sich schön den Ast absägen.
Schlussendlich muss die Polung der Datenleitung stimmen und noch auf die beidseitige Terminierung geachtet werden. Schirmung nicht außer acht lassen. Leitungslängenbeschränkungen gibt es auch.
im Handbuch zum Zähler (SDM230-Modbus) ab Seite 14.
Ich weiß jetzt nicht, ob ich das verlinken darf. Auf der Herstellerseite muss man sich anmelden, gefunden habe ich das PDF bei einem Online-Händler.
Adresse 30073 Import active energy kwh
also abzgl. Offset 30001 = Adresse 72 (gleich bei meinem Zähler) siehe meine ID “modbus1.stromzaehler_wp.energie_bezug_gesamt”
bzw.
Adresse 30343 Total active energy kwh
also abzgl. Offset 30001 = Adresse 342
@AlphizZzle , das ist mein großes Problem, das ich nicht weiß wie sowas aufgebaut wird…
Gibt es irgendwo die Möglichkeiten sowas nachzulesen?
Ich werde morgen mich damit weiter beschäftigen.
Aber schon mal vielen Dank.
@vkannengiesser , vielen Dank das Du das für mich raus gesucht hast.
Meine WP ist einphasig, hat nur 7KW
Modbus ist nicht gleich Modbus. Jeder Gerätehersteller kann schlussendlich machen was er will.
Hab schon die wildesten Sachen gesehen.
Zum nachlesen gibt es eher anwenderspezifische Handbücher.
Also am Besten ein Hersteller erklärt, wie eine bestimmte Integration funktioniert.
Ansonsten bist du schon richtig hier.
Andere sicher, einfacher…naja. Wie meine Vorposter geschrieben haben, es mangelt Modbus an gewissen Standards, daher ist das immer ein gewisses basteln und raten bis alles geht, unabhängig vom Tool.
Danach über Entwicklerwerkzeuge - Konfiguration Prüfen und bei grünem Haken neu Starten.
Die Slave ID sowie die address habe ich aus dem Post von Volker, im Zweifel steht das aber auf jeden Fall im Handbuch
Nachtrag: Im Handbuch finde ich keine Default Slave Adresse… blöd. Kann man aber scheinbar am Gerät über das Display einstellen. Also da mal schauen was da steht und entweder da die 10 eintragen, oder hier in HA die entsprechende ID einstellen
Nachtrag 2: 19200/8/E/1 ist SEHR unüblich, zumal das Gerät maximal 9600 unterstützt. Daher habe ich die Parameter oben nochmal angepasst wie ich sie vermuten würde.
Sicher, dass der Port stimmt? Wenn nicht sicher, Gerät ausstecken aus HA, Konsole aufmachen und
dmesg | grep tty
eingeben. Dann Gerät einstecken und nochmals den selben Befehl eingeben. Der neue Port sollte nun sichtbar sein. Ich habe oben mal deinen Port aus dem Ursprungspost eingesetzt.
@zaphood , hab das jetzt mal stumpf kopiert, bei Konfiguration prüfen gab es keine Probleme.
Neustart hat geklappt.
Wo kann ich denn nun den Zähler/Wert finden?
Im Dashboard nicht, unter Geräte und Dienste kann ich Modus nicht einrichten (geht nur über yaml.)
Adress lt- Zähler ist die 1, ist das die Adresse wo jetzt 72 steht.
Am Zähler kann ich das Schloss öffnen, nach einer gewissen Zeit ist das Symbol wieder zu sehen.
In den Enwicklungstools sollte dein neuer Sensor zu sehen sein mit dem Namen den du vergeben hast. Die Entität kannst du dann deinem Dashboard hinzufügen
Die adress ist das Modbus-Register und sollte auf 72 bleiben.
Nach dem Neustart geh zu Einstellungen - Geräte & Dienste und da zu Entitäten. Dort in der Kopfzeile (Suchfeld) suchst nach modbus, dann sollte die Entität auftauchen
@zaphood
Machst bitte mal Screenshots von allen Kommunikationsparametern ?
9.6 ist die Baudrate
1 vermutlich die Slave-Adresse
Parität (E/O/N) fehlt noch
Stopbits (1/0) fehlen noch.
dann hätten wir die Kommunikation als solches mal geprüft
Danach Parity = N
Stop bits lt Beschreibungen 1 oder 2
Adress 1 to 247
Stop bits gerade mal auf 2 geändert, hat auch nichts gebracht…
Lt. Der Beschreibung soll dort ein Telefonhörer im Display zu sehen sein, wenn RS485 aktiv ist.
Ich muss morgen nochmal schauen, wie ich da hin komme, um es zu aktivieren…
Nachtrag: Vergiss was ich getippt habe. Laut Doku muss man da nichts einschalten. Der Hörer signalisiert nur aktive Datenübertragung, so wie ich die Doku verstehe.
Wenn Baudrate, Parity, Stopbit und Slave-ID mit dem am Zähler angezeigten Werten übereinstimmen und dann noch immer nix geht, dann bleibt eigentlich nur der USB-Adapter als Fehlerquelle übrig…
Nachtrag 2: Du denkst daran, nach jeder Änderung den HA neu starten… dem scheint das Neuladen der YAML Files in dem Fall nicht genug zu sein…
Wo hast du das im Handbuch gefunden, dass bei RTU der Offset abgezogen werden muss ? Ich kenne das von anderen Geräten, aber bei dem hier habe ich das nicht gesehen?
@zaphood,
GnD ist am USB Adapter nicht dran, wo soll der angeklemmt werden?
Hab den Adapter bei Reichelt gekauft, dort stand, dass er kompatibel mit dem Pi ist.
Mit der Klemmung überprüfe ich morgen nochmal.
Ich hab bei der Firma mal angefragt, wie es sich mit dem Hörer verhält.
USB Adapter hab ich mir neu gekauft, er wird ja als Hardware im Pi angezeigt.
Ich hatte vorher ein RS485 Modul, was direkt auf dem PI gesteckt wird, wurde mir nur nicht angezeigt. Ich hätte den Port auf dem Pi freigeschaltet müssen, komme aber nicht in die Konfig vom Pi
Nach jeder Änderung starte ich HA neu.