Modbus TCP auslesen mit Funktionen-Skript

Überwachung der Solaranlage per eMail oder Pushover und Steuerung von Geräten mit Smart Home Zentralen. PV-Überschuss Steuerung verbunden mit Geräten und Tasmota Firmware. Wallbox Steuerungen und API Schnittstelle, über die Daten in die Solaranzeigen Datenbanken geschrieben und gelesen werden können. Alles, was man für Steuerungsaufgaben benötigt.

Moderator: Ulrich

Antworten
MeisterKnut
Beiträge: 4
Registriert: So 16. Jul 2023, 17:00
Hat sich bedankt: 1 Mal

Modbus TCP auslesen mit Funktionen-Skript

Beitrag von MeisterKnut »

Hallo!
Auch ich bin neu hier und nicht wirklich programmierbewandert...
Nachdem ich dank der guten Anleitungen und Forenbeiträge ein schönes Dashboard für meinen E3DC S10X erstellt habe, versuche ich nun Daten aus der Heizung (Solarfocus Octoplus) via Modbus TCP in die influxdb zu bekommen und nutze dafür die "function modbus_register_lesen" aus der "funktionen.inc.php" im Ordner "phpinc".
Ich habe für meine "user_device.php" die "kostal_meter.php" als Basis hergenommen, weil hier auch Modbus TCP - Register ausgelesen werden. Den aktuellen Arbeitsstand habe ich mal angehängt. Es ist noch ziemlich viel auskommentiert, weil ich erstmal nur mit einem Wert "Außentemperatur" erfolgreich sein möchte und erst aufräume, wenn es so funktioniert, wie ich es mir vorstelle.
Die für mich interessanten Größen habe ich nach Schnittstellenbeschreibung und Ausprobieren mit CASModbusScanner in die "user_device.php" eingetragen. Nach schrittweiser Annäherung ans Ziel mittels viel Lesen und Probieren scheitere ich aber leider daran einen anderen Wert als 0 herauszubekommen.

Nun zu meinen Fragen:
1. Folgende Meldung steht dauerhaft in der "php.log":
Trying to access array offset on value of type bool in /var/www/html/user_device.php on line 214
Kann mir jemand erklären, wie das Programm darauf kommt, dass es sich bei dem Wert um ein Boolean handelt?

2. Ein vollständiger Programmablauf sieht bei mir in der "solaranzeige.log" so aus:
148195 25.09. 20:32:01 -Multi Regler Auslesen [Start].
148196 25.09. 20:32:01 -Verarbeitung von: '1.user.config.php' Regler: 18
148197 25.09. 20:32:01 |---------------- Start E3DC Wechselrichter ---------------.
148198 25.09. 20:32:01 -E3DC: 192.168.178.25 Port: 502 GeräteID: 1
148199 25.09. 20:32:01 * -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet..
148200 25.09. 20:32:01 -Multi-Regler-Ausgang. 7
148201 25.09. 20:32:08 -OK. Datenübertragung erfolgreich.
148202 25.09. 20:32:08 -Solarleistung: 0 Watt - WattstundenGesamtHeute: 63971.72
148203 25.09. 20:32:08 |---------------- Stop E3DC Wechselricter ---------------.
148204 25.09. 20:32:09 -Verarbeitung von: '2.user.config.php' Regler: 1001
148205 25.09. 20:32:09 -Datei 'user_device.php' gefunden.
148206 25.09. 20:32:09 |---------------- Start user_device.php ---------------.
148207 25.09. 20:32:09 -Zentraler Timestamp: 1695666721
148208 25.09. 20:32:09 -Octoplus: 192.168.178.26 Port: 502 GeräteID: 1
148209 25.09. 20:32:09 o -Hardware Version:.
148210 25.09. 20:32:09 + -Die Daten werden ausgelesen...
148211 25.09. 20:32:09 o -Antwort = 0001000000033e1401
148212 25.09. 20:32:09 -array (
148213 'zentralerTimestamp' => 1695666731,
148214 'Außentemperatur' => 0,
148215 'Regler' => '1001',
148216 'Objekt' => 'Heizung',
148217 )
148218 25.09. 20:32:09 -Aktuelle Daten:.
148219 Array
148220 (
148221 [zentralerTimestamp] => 1695666731
148222 [Außentemperatur] => 0
148223 [Regler] => 1001
148224 [Objekt] => Heizung
148225 [Timestamp] => 1695666729
148226 [Monat] => 9
148227 [Woche] => 39
148228 [Wochentag] => Montag
148229 [Datum] => 25.09.2023
148230 [Uhrzeit] => 20:32:09
148231 [InfluxAdresse] =>.
148232 [InfluxPort] => 8086
148233 [InfluxUser] =>.
148234 [InfluxPassword] =>.
148235 [InfluxDBName] => solarfocus
148236 [InfluxDaylight] =>.
148237 [InfluxDBLokal] => solarfocus
148238 [InfluxSSL] =>.
148239 [Demodaten] =>.
148240 )
148241
148242 25.09. 20:32:09 -Query:.
148243
148244 25.09. 20:32:09 * -Daten zur lokalen InfluxDB [ solarfocus ] gesendet..
148245 25.09. 20:32:09 -Multi-Regler-Ausgang. 8
148246 25.09. 20:32:17 !! -Keine gültigen Daten empfangen.
148247 25.09. 20:32:17 |---------------- Stop user_device.php ---------------.
148248 25.09. 20:32:19 -Multi Regler Auslesen [Stop].
Grundsätzlich scheint das Programm schonmal zu funktionieren (Kontakt zum Gerät und Schreiben in db)...
Ich bekomme aber keine Werte ins Array. Mit dem CASModbusScanner sehe ich, dass unter der angegebenen Adresse der richtige Wert ausgegeben wird.
Die Funktion "modbus_register_lesen" nutzt die Funktion "kostal_com_lesen". Die letztgenannte scheint aber zu funktionieren, seit dem ich die Fehlermeldung "Keine Häppchen empfangen" wegbekommen habe. Meine Vermutung ist, dass die Variable $Daten["Wert"] in der Funktion "modbus_register_lesen" nicht mit dem Antwortwert überschrieben wird.
Kann mir bitte jemand helfen?
Dateianhänge
user_device.php
auf Basis "kostal_meter.php"
(15.82 KiB) 91-mal heruntergeladen

gzi
Beiträge: 153
Registriert: Mo 16. Jan 2023, 20:43
Hat sich bedankt: 20 Mal
Danksagung erhalten: 29 Mal

Re: Modbus TCP auslesen mit Funktionen-Skript

Beitrag von gzi »

Mir fehlt die Zeit Deinen Code zu studieren. Aber vielleicht hilft Dir meiner ;-)
viewtopic.php?t=3512&hilit=user_device
Raspi 3B, Hybrid Must PV18-3024 VHM, Hoymiles HM-800 , Nachteinspeisung, Flex-BKW, AhoyDTU, Smart Meter DTSU666-H, DIY Akku 6,7 KWh, DalyBMS2MQTT, Victron2MQTT,Architektur, HomeMatic CCU. Autor: Solaranlage Do-It-Yourself

MeisterKnut
Beiträge: 4
Registriert: So 16. Jul 2023, 17:00
Hat sich bedankt: 1 Mal

Re: Modbus TCP auslesen mit Funktionen-Skript

Beitrag von MeisterKnut »

Hi! Vielen Dank! Das hat mich in die richtige Richtung gelenkt.
Ich bin auf die Methode "modbus_tcp_lesen" umgestiegen und mit etwas Hilfe meiner programmierenden Verwandtschaft haben wir die richtige Einstellung gefunden, um den erwarteten Wert aus der Heizung zu erhalten.

Antworten

Zurück zu „Überschuss Steuerung, Anlagenüberwachung, Anbindung an die Heizung, API Schnittstelle und vieles Andere mehr.“