Statistik: Verfasst von Ulrich — Di 19. Mär 2024, 13:36
Statistik: Verfasst von 1thor — Di 19. Mär 2024, 12:48
Statistik: Verfasst von Ulrich — Di 19. Mär 2024, 12:14
Statistik: Verfasst von 1thor — Di 19. Mär 2024, 11:59
Code:
// Ethernet Kabelverbindung: Local Area Network (LAN)// Alle Geräte, die über das LAN angesprochen und ausgelesen werden,// oder ein Serial Device Server, wie z.B. der HF2211 oder der Elfin-EW11,// dazwischen geschaltet haben, bitte hier IP und Port eintragen und// falls erforderlich die Device ID. (Geräteadresse = WR_Adresse)// Die Geräte Adresse wird auch manchmal bei RS485 Verbindungen benutzt.// -------------------------------------------------------------------// Bitte die Daten aus dem Gerät übernehmen//$WR_IP = "0.0.0.0"; // Keine führenden Nullen! 67.xx Ja!, 067.xx Nein!$WR_Port = "12345";$WR_Adresse = "1"; // Achtung Adresse als Dezimalzahl eingeben / 1 bis 256// Maximal "256" = Hex FF/*****************************************************************************/
Statistik: Verfasst von Ulrich — Di 19. Mär 2024, 10:02
Statistik: Verfasst von HNoll — Mo 18. Mär 2024, 22:00
Statistik: Verfasst von Richard Hellmuth — Mo 18. Mär 2024, 20:32
Statistik: Verfasst von gzi — Mo 18. Mär 2024, 20:15
Statistik: Verfasst von t4freaky — Mo 18. Mär 2024, 19:46
Statistik: Verfasst von madmax071 — Mo 18. Mär 2024, 19:38
Code:
// 1.6b Victron Laderegler via Victron2MQTT//$Victron_IP = array("10.0.0.21", "10.0.0.22", "10.0.0.23", "10.0.0.24");$Victron_InfluxDB = "Insel";$Victron_Measurement = "Laderegler";function readWemosD1($WemosD1Name,$WemosD1_IP) {global $funktionen;global $User_Key;global $API_Token;global $Device;global $Messengerdienst;$query = "http://".$WemosD1_IP."/livejson"; $ch = curl_init();curl_setopt($ch, CURLOPT_URL, $query);curl_setopt($ch, CURLOPT_TIMEOUT, 5 ); //timeout in second scurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$data = curl_exec($ch);$errno = curl_errno( $ch );/*$context = stream_context_create(array('http' => array('header'=>'Connection: close\r\n')));if(false === ($data = file_get_contents($query, false, $context))){*/if ($errno) {// BMS Daten können nicht gelesen werdenfor ($Ui = 1; $Ui <= count( $User_Key ); $Ui++) {$rc = $funktionen->send_cached_message( $API_Token[$Ui], $User_Key[$Ui], $Device."-Gerät ".$WemosD1Name." ".$WemosD1_IP.":80"." nicht erreichbar.".$errno.curl_error($ch), 0, "", $Messengerdienst[$Ui], "YmdH" );}$funktionen->log_schreiben( "Fehler! Kann ".$WemosD1Name." nicht abfragen: ".curl_errno( $ch )." : " .$query, " ", 5 );curl_close($ch);return false;} else {curl_close($ch);// BMS Daten gelesen$funktionen->log_schreiben("JSON gelesen...","+ ",9);return $data;}} // readWemosD1function evaluateVictronData($data,$laderegler,&$aktuelleDaten) {global $funktionen;global $zentralerTimestamp;global $txtmapping;$ergebnis = json_decode( $data, true );//$funktionen->log_schreiben(print_r($data,true), " ", 5 );$funktionen->log_schreiben("JSON decodiert:".print_r($ergebnis,true), " ", 8 );/*{ "ESP_Data": {"IP": "10.0.0.21","sw_version": "1.1.3","ESP_VCC": 3.317,"Wifi_RSSI": -80 }, "Device_name": "Victron2MQTT1", "Device_model": "SmartSolar MPPT 75|15", "Firmware_version_16": "161", "Serial_number": "HQ2224AHEUV", "Voltage": 26.15, "Battery_current": 0.26, "Panel_voltage": 31.19, "Panel_power": 7, "Operation_state": "Bulk", "Tracker_operation_mode": "MPP Tracker active", "Off_reason": "None", "Current_error": "No error", "Load_output_state": "ON", "Load_current": 0, "total_kWh": 0.03, "today_kWh": 0.03, "Max_pow_today": 34, "Yesterday_kWh": 0, "Max_pow_yesterday": 0, "Day": 0}*/$mapping = array( "Battery_V" => "Voltage", "Charge_A" => "Battery_current", "Panel_V" => "Panel_voltage", "Panel_W" => "Panel_power", "total_kWh" => "total_kWh", "today_kWh" => "today_kWh", "today_max_kW" => "Max_pow_today", "yesterday_kWh" => "Yesterday_kWh", "yesterday_max_kW" => "Max_pow_yesterday", "Nr_Days" => "Day");$txtmapping = array( "Status" => "Operation_state", "TrackerStatus" => "Tracker_operation_mode", "Off_reason" => "Off_reason", "Current_error" => "Current_error",);foreach ($mapping as $key => $value ) {$aktuelleDaten["LR".$laderegler."_".$key] = $ergebnis[$value]; }foreach ($txtmapping as $key => $value ) {$aktuelleDaten["LR".$laderegler."_".$key] = $ergebnis[$value]; }if (array_key_exists('Wifi_RSSI', $ergebnis["ESP_Data"])) { // hängt von der Firmware-Version ab$funktionen->log_schreiben("Wifi_RSSI: ".$ergebnis["ESP_Data"]["Wifi_RSSI"]."db"," ",5);}$funktionen->log_schreiben("Watt: ".$aktuelleDaten["LR".$laderegler."_"."Panel_W"]," ",8);} // evaluateVictronData$aktuelleDaten = array();$RemoteDaten = true;$Device = "LR"; // ME = Smart Meter$Version = "";$Start = time(); // Timestamp festhaltentry{// 6.2b Victron Laderegler Daten auslesen $funktionen->log_schreiben( "Trace 6.2b - auslesen", " ", 7 );$vi=1; foreach ($Victron_IP as $Laderegler_IP) {$data = readWemosD1("Victron2MQTT".$vi, $Laderegler_IP);if ($data) { // LR auslesbar// 6.2b JSON Daten auswerten $funktionen->log_schreiben( "Trace 6.2b - auswerten ", " ", 7 );evaluateVictronData($data,$vi, $aktuelleDaten);} else {// throw new Exception("Konnte TCP-Connection zum Victron2MQTT".$vi." nicht öffnen. ");}$vi++;}// 6.3b abgeleitete Daten berechnen$funktionen->log_schreiben( "Trace 6.3b - abgeleitete Daten berechnen", " ", 7 );// 6.4b Query für das Schreiben in die influxDB zusammenstellen$funktionen->log_schreiben( "Trace 6.4b - Query zusammenstellen", " ", 7 );$zq = "";foreach($aktuelleDaten as $key => $value) {if (array_key_exists(substr($key,4),$txtmapping)) { //"LR".$laderegler."_".// Textfeld// $funktionen->log_schreiben($key." ist ein Textfeld"," ", 5);$zq .= ",".$key.'="'.$value.'"';} else {// numerisches Feld// $funktionen->log_schreiben($key." ist ein numerisches Feld"," ", 5);$zq .= ",".$key."=".$value;}}$zq = $Victron_Measurement." ".substr($zq,1)." ".$zentralerTimestamp."\n";//$funktionen->log_schreiben("zq: ".$zq,"--->",5);$aktuelleDaten["ZusatzQuery"] = $zq; $funktionen->log_schreiben("Zentraler Timestamp: ".$zentralerTimestamp," ",8);$aktuelleDaten["zentralerTimestamp"] = $zentralerTimestamp;$FehlermeldungText = "";$aktuelleDaten["Regler"] = $Regler;$aktuelleDaten["Objekt"] = $Objekt;$aktuelleDaten["Firmware"] = "Victron2MQTT";//$aktuelleDaten["zentralerTimestamp"] = ($aktuelleDaten["zentralerTimestamp"]+10);// 6.5b optionale Nachbearbeitung der Laderegler Daten$funktionen->log_schreiben( "Trace 6.5b - Nachbearbeitung", " ", 7 );if ( file_exists ("/var/www/html/Victron2MQTT_math.php")) {include 'Victron2MQTT_math.php'; // Falls etwas neu berechnet werden muss.}$funktionen->log_schreiben(var_export($aktuelleDaten,1)," ",8);// 6.6b Smart-Meter Daten optional an den hauseigenen MQTT Broker übergeben$funktionen->log_schreiben( "Trace 6.6b - MQTT", " ", 7 );if ($MQTT) {$funktionen->log_schreiben("MQTT Daten zum [ $MQTTBroker ] senden."," ",1);require($Pfad."/mqtt_senden.php");}// 6.7b Zeitpunkte definieren$funktionen->log_schreiben( "Trace 6.7b - Zeit", " ", 7 );$aktuelleDaten["Timestamp"] = time();$aktuelleDaten["Monat"] = date("n");$aktuelleDaten["Woche"] = date("W");$aktuelleDaten["Wochentag"] = strftime("%A",time());$aktuelleDaten["Datum"] = date("d.m.Y");$aktuelleDaten["Uhrzeit"] = date("H:i:s");// 6.8b Smart-Meter Daten in influxDB ablegen$funktionen->log_schreiben( "Trace 6.8b - Daten in InfluxDB", " ", 7 );$aktuelleDaten["InfluxAdresse"] = $InfluxAdresse;$aktuelleDaten["InfluxPort"] = $InfluxPort;$aktuelleDaten["InfluxUser"] = $InfluxUser;$aktuelleDaten["InfluxPassword"] = $InfluxPassword;$aktuelleDaten["InfluxDBName"] = $InfluxDBName;$aktuelleDaten["InfluxDaylight"] = $InfluxDaylight;$aktuelleDaten["InfluxDBLokal"] = $Victron_InfluxDB;$aktuelleDaten["InfluxSSL"] = $InfluxSSL;$aktuelleDaten["Demodaten"] = false;if ($InfluxDB_remote) {// Daten sollen in remote DB geschrieben werdenif ($RemoteDaten) {$rc = $funktionen->influx_remote_test();if ($rc) {$rc = $funktionen->influx_remote($aktuelleDaten);if ($rc) {$RemoteDaten = false;}} else {$RemoteDaten = false;}}if ($InfluxDB_local) {// Daten sollen zusätzlich lokal abgelegt werden$rc = $funktionen->influx_local($aktuelleDaten);}} else {// Daten sollen nur lokal abgelegt werden$rc = $funktionen->influx_local($aktuelleDaten);}$funktionen->log_schreiben( "Ende Abschnitt 6 - Insel", " ", 5 );} catch(\Throwable $ex) {$USB1 = false;$funktionen->log_schreiben( "Socket==false. Kein Kontakt zum Victron2MQTT ".$Laderegler_IP, "XX ", 3 );$funktionen->log_schreiben( "Exit.... ", "XX ", 3 );for ($Ui = 1; $Ui <= count( $User_Key ); $Ui++) {$rc = $funktionen->send_cached_message( $API_Token[$Ui], $User_Key[$Ui], $Device."-Gerät Victron2MQTT- ".$Laderegler_IP." nicht erreichbar.".$errno.$errstr, 0, "", $Messengerdienst[$Ui], "YmdH" );}}
Statistik: Verfasst von gzi — Mo 18. Mär 2024, 18:34
Statistik: Verfasst von Ulrich — Mo 18. Mär 2024, 16:52
Statistik: Verfasst von schlmich — Mo 18. Mär 2024, 14:57
Statistik: Verfasst von sagirobert — Mo 18. Mär 2024, 13:26
Statistik: Verfasst von madmax071 — Mo 18. Mär 2024, 12:42