Hallo Cupra85,
leider ist hier noch nicht viel Doku zu gewachsen aus der wir abschreiben können
Alles wichtige steht im ersten Beitrag und dann ggf. in den nächsten 3 Beiträgen:
Syntax:
Lesen : modbus_interface.tcl IP-Adresse Port DeviceNummer Funktion Register Länge
Schreiben : modbus_interface.tcl IP-Adresse Port DeviceNummer Funktion Register Wert
Port : normalerweise 502
DeviceNummer : Beispiel Wallbe 255 , Solaredge 1
Funktion :
01 read coils
02 read discrete inputs
03 read holding registers
04 read input registers
05 write single coils
06 write single register
15 write multible coils
16 write multible registers
Register, Länge und Wert : siehe Dokumentation des ModBus-Geräts
Ich habe mich für die Variante system.exec() entschieden. Siehe Beitrag 4 von
haengematte.
Ich starte gerade aktuell damit meine Paradigma Heizungs- und Solaranlage auszulesen. Paradigma hat hierzu ebenfalls eine Anleitung herausgegeben (siehe auf der Seite unten):
https://www.paradigma.de/produkte/regel ... comfortll/
Mein Vorgehen:
- die beiden .tcl aus Beitrag 1 so wie beschrieben auf der Raspberrymatic abgelegt
- neue Systemvariable angelegt: Paradigma_WW-Wärmemenge vom Typ Zahl
- neues Programm angelegt: Bedingung Zeitsteuerung alle 5 Min.
- mit Script:
Code: Alles auswählen
string wwwmGetOut;
string wwwmGetErr;
integer wwwaermemenge;
system.Exec("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.178.82 502 1 03 24 1",&wwwmGetOut, &wwwmlGetErr);
var wwwaermemenge = (0.00 + wwwmGetOut) /10;
dom.GetObject('Paradigma_WW-Wärmemenge').State(wwwaermemenge);
Das erste Auslesen hat geklappt, jetzt geht es bei mir nach und nach weiter mit anderen Werten. Und mal schauen ob das mit dem Ableseintervall so auch sinnvoll ist. Hier gerne auch Tipps und Ideen im Forum.
DeviceNummer = Modbus Unit No o.ä..
Dürfte bei dir evtl. auch 1 sein, sofern in deiner Gerätedoku nichts anderes angegeben ist. Bei mir "1", steht auch so in der Doku.
Funktion: Ausgelesen habe ich
03, die Holding Registers und dort die Adresse 24. Siehe auch meine Anleitung S. 17 + 18.
Hinweis: statt immer gleich den Wert in die Systemvariable zu schreiben und dann die Sytemvariable abzufragen um zu sehen ob alles geklappt hat, statt dom.GetObject() lieber erstmal mit WriteLine() arbeiten und in der Homematic den Script testen Knopf nutzen. Und erst wenn die Ausgabe mit WriteLine() funktioniert den Wert in die Systemvariable schreiben lassen. Spart Klickarbeit und reduziert mögliche Fehler. Btw. WriteLine() kann man auch immer mal zwischendrinn platzieren, um Zwischenschritte auf ihre richtige Funktionsweise zu prüfen.
@Indi55: Top Job. Danke. Funktioniert bei mir.