Elwa-E von My-Pv auslesen / ansteuern

Allgemeine Informationen zum Nachbau und zum Forum.
PV-Monitorung / PV Überwachung

Moderator: Ulrich

Bogeyof
Beiträge: 530
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 6 Mal
Danksagung erhalten: 40 Mal

Re: Elwa-E von My-Pv auslesen / ansteuern

Beitrag von Bogeyof »

auf der Konsole:

Code: Alles auswählen

influx
use solaranzeige
drop measurement Wetterprognosen

Yoda68
Beiträge: 59
Registriert: Mi 3. Mär 2021, 16:53
Wohnort: Gera
Hat sich bedankt: 4 Mal

Re: Elwa-E von My-Pv auslesen / ansteuern

Beitrag von Yoda68 »

Ich stecke fest und komm nicht weiter.
Ich kann einfach keinen vernünftigen Wert in die Adresse schreiben. Vielleicht kann mir hier ein Modbus Spezialist mit php Kenntnissen weiter helfen.
Ich nutze derzeit aus der Solaranzeige die Funktion
" function modbus_register_lesen($COM1,$Register,$Laenge,$Typ,$GeraeteAdresse,$Befehl) " welche offensichtlich nicht für das schreiben geht. Als Wert wird 15728641 in die Adresse geschrieben.
Bekannt und funktionierend LESEND ist
IP Adresse: xxx.xxx.xxx
Port: 502
Geräteadresse : 01
Schreibbefehl: 06
Registeradresse in Binarform : 1008
Länge: 2 Bytes
Typ: uint16be
Wert der geschrieben werden soll: 8
Header PDU
TranaktionsID Protokoll ID Länge GeräteID Befehlscode Register Wert

Wie müsste denn in php der Befehl aussehen? oder bin ich total auf dem Holzweg?

Yoda68
Beiträge: 59
Registriert: Mi 3. Mär 2021, 16:53
Wohnort: Gera
Hat sich bedankt: 4 Mal

Re: Elwa-E von My-Pv auslesen / ansteuern

Beitrag von Yoda68 »

Anfängerfrage : an unsere php Spezialisten
ich wollte einen Werte Berechnen und diese später in die Datenbank mit speichern
//Neue Variabel
$Boostmodus = "5";
$Sicherstellungstemperatur = "40"
$RSU_Zeit = ((( $ - $aktuelle_Zeit ) - (60 * 60 * 2)) / 60 / 60 ) ;
$Lademenge = ( $BattKap - ( $SOC * ( $BattKap / 100 )));
$Lade_Zeit = (( $Lademenge / $Lademax ) + 1 );

Das klappt auch bis hierher.

Nun wollte ich die Werte zum Speichern vorbereiten

1. $aktuelleDaten["Boostmodus"] = $Boostmodus["Wert"];
2. $aktuelleDaten["Sicherstellungstemperatur"] = $Sicherstellungstemperatur["Wert"];
usw.
3. $aktuelleDaten["Lademenge"] = $Lademenge["Wert"];
4. $aktuelleDaten["Lade_Zeit"] = $Lade_Zeit["Wert"];

1. & 2. geht nur wenn der Wert kleiner 10 ist und danach inklusive
3. & 4. geht gar nicht.

dann das schreiben in die Datenbank mit geht nur 1. & 2. -- ist ja klar.

1. $query .= ",Boostmodus=".$daten["Boostmodus"];
2. $query .= ",Sicherstellungstemperatur=".$daten["Sicherstellungstemperatur"];
usw.
3. $query .= ",Lademenge=".$daten["Lademenge"];
4. $query .= ",Lade_Zeit=".$daten["Lade_Zeit"];

sorry ich weiß aber mir fehlen da eindeutig Kenntnisse von php.
Helft ihr mir auf die Sprünge.
Danke.

Bogeyof
Beiträge: 530
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 6 Mal
Danksagung erhalten: 40 Mal

Re: Elwa-E von My-Pv auslesen / ansteuern

Beitrag von Bogeyof »

Ich versuche mich mal daran:
$Boostmodus = 5; // besser ohne Hochkomma als Zahl,mit Hochkomma wäre es Text
$Sicherstellungstemperatur = 40; // besser ohne Hochkomma als Zahl,mit Hochkomma wäre es Text

1. bei $Sicherstellungstemperatur = "40" fehlt der Strickpunkt am Ende ($Sicherstellungstemperatur = 40;)
2. Die Zeile mit "$RSU_Zeit = ((( $ - $aktuelle_Zeit ) - (60 * 60 * 2)) / 60 / 60 ) ;" ergibt keinen Sinn. Was soll ( $ - $aktuelle_Zeit ) darstellen?
Vielleicht "$RSU_Zeit = (( $RSU_Zeit - $aktuelle_Zeit - 7200 ) / 3600 ) ;" //ergibt eigentlich keinen Sinn
3. Es werden einige Variablen verwendet die hier nicht definiert sind, ich denke diese werden vorher irgendwo befüllt?

Nun zur Schreibweise für das Speichern:
1. $aktuelleDaten["Boostmodus"] = $Boostmodus; //der Zusatz ["Wert"] wäre ein Element eines Array, $Boostmodus ist aber kein Array
2. $aktuelleDaten["Sicherstellungstemperatur"] = $Sicherstellungstemperatur; //analog
3. $aktuelleDaten["Lademenge"] = $Lademenge; //analog
4. $aktuelleDaten["Lade_Zeit"] = $Lade_Zeit; //analog

1. $query .= ",Boostmodus=".$daten["Boostmodus"];
2. $query .= ",Sicherstellungstemperatur=".$daten["Sicherstellungstemperatur"];
usw.
3. $query .= ",Lademenge=".$daten["Lademenge"];
4. $query .= ",Lade_Zeit=".$daten["Lade_Zeit"];

Yoda68
Beiträge: 59
Registriert: Mi 3. Mär 2021, 16:53
Wohnort: Gera
Hat sich bedankt: 4 Mal

Re: Elwa-E von My-Pv auslesen / ansteuern

Beitrag von Yoda68 »

Danke dir für die schnelle Antwort.

$aktuelleDaten["irgendwas"] = $irgendwas; //ist kein Array sondern ein ??? (z.b. einResultat einer Berechnung)
damit bereite ich doch zum speichern vor

und mit

Code: Alles auswählen

Ausgang:;

}

$funktionen->log_schreiben("-------------   Stop  Test_werte.php    --------------- ","|--",6);

return;

function eigenedaten_speichern($daten)  {

  $query = "";
  $query .= "Elwa2 ";
   $query .= ",Boostmodus=".$daten["Boostmodus"];
    $query .= ",Sicherstellungstemperatur=".$daten["Sicherstellungstemperatur"];
    $query .= ",Lademenge=".$daten["Lademenge"];
    $query .= ",Lade_Zeit=".$daten["Lade_Zeit"];
  $query .= " ".$daten["Timestamp"];
//  $query .= "\n";										 
 
speichere ich die Werte in der DB

Macht er aber nicht Fehler

Code: Alles auswählen

root@solaranzeige:/var/www/html# ./Test.php
Test_Elwa ,Boostmodus=5,Sicherstellungstemperatur=6,Lademenge=4,Lade_Zeit=5 1620302601Daten nicht zur InfluxDB gesendet! info: Array
(
    [url] => http://localhost/write?db=solaranzeige&precision=s
    [content_type] => application/json
    [http_code] => 400
    [header_size] => 416
    [request_size] => 242
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.003908
    [namelookup_time] => 0.002302
    [connect_time] => 0.002582
    [pretransfer_time] => 0.002914
    [size_upload] => 86
    [size_download] => 139
    [speed_download] => 46333
    [speed_upload] => 28666
    [download_content_length] => 139
    [upload_content_length] => 86
    [starttransfer_time] => 0.003845
    [redirect_time] => 0
    [redirect_url] => 
    [primary_ip] => ::1
    [certinfo] => Array
        (
        )

    [primary_port] => 8086
    [local_ip] => ::1
    [local_port] => 57412
    [http_version] => 2
    [protocol] => 1
    [ssl_verifyresult] => 0
    [scheme] => HTTP
    [appconnect_time_us] => 0
    [connect_time_us] => 2582
    [namelookup_time_us] => 2302
    [pretransfer_time_us] => 2914
    [redirect_time_us] => 0
    [starttransfer_time_us] => 3845
    [total_time_us] => 3908
)
Daten nicht zur InfluxDB gesendet! info: Array
(
    [url] => http://localhost/write?db=solaranzeige&precision=s
    [content_type] => application/json
    [http_code] => 400
    [header_size] => 416
    [request_size] => 242
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.001469
    [namelookup_time] => 0.000112
    [connect_time] => 0.000114
    [pretransfer_time] => 0.000343
    [size_upload] => 86
    [size_download] => 139
    [speed_download] => 139000
    [speed_upload] => 86000
    [download_content_length] => 139
    [upload_content_length] => 86
    [starttransfer_time] => 0.001382
    [redirect_time] => 0
    [redirect_url] => 
    [primary_ip] => ::1
    [certinfo] => Array
        (
        )

    [primary_port] => 8086
    [local_ip] => ::1
    [local_port] => 57412
    [http_version] => 2
    [protocol] => 1
    [ssl_verifyresult] => 0
    [scheme] => HTTP
    [appconnect_time_us] => 116
    [connect_time_us] => 114
    [namelookup_time_us] => 112
    [pretransfer_time_us] => 343
    [redirect_time_us] => 0
    [starttransfer_time_us] => 1382
    [total_time_us] => 1469

Bogeyof
Beiträge: 530
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 6 Mal
Danksagung erhalten: 40 Mal

Re: Elwa-E von My-Pv auslesen / ansteuern

Beitrag von Bogeyof »

Das erste Komma vor Boostmodus ist falsch, erst ab dem 2. Wert verwenden:

Code: Alles auswählen

$query = "";
  $query .= "Elwa2 ";
   $query .= "Boostmodus=".$daten["Boostmodus"];
    $query .= ",Sicherstellungstemperatur=".$daten["Sicherstellungstemperatur"];
    $query .= ",Lademenge=".$daten["Lademenge"];
    $query .= ",Lade_Zeit=".$daten["Lade_Zeit"];
  $query .= " ".$daten["Timestamp"];
//  $query .= "\n";		
Allerdings kommt die Fehlermeldung von einer Query Test_Elwa, geschrieben hast Du Elwa2, das passt nicht ganz zusammen. Aber der Fehler liegt im ersten Komma...

Yoda68
Beiträge: 59
Registriert: Mi 3. Mär 2021, 16:53
Wohnort: Gera
Hat sich bedankt: 4 Mal

Re: Elwa-E von My-Pv auslesen / ansteuern

Beitrag von Yoda68 »

Danke. Ja das war ein Test.2
Aber der Fehler mit dem Komma zog sich durch.
Sch... Komma.

Ich Scheibe von unterwegs und probiere es heute Nacht nach der Arbeit.

Nochmals danke.

Yoda68
Beiträge: 59
Registriert: Mi 3. Mär 2021, 16:53
Wohnort: Gera
Hat sich bedankt: 4 Mal

Re: Elwa-E von My-Pv auslesen / ansteuern

Beitrag von Yoda68 »

Nach umfangreichen Test auf der ElwaE 3.0 kW / FW 102.06 aus dem Jahr 2020 kann man sagen das Skript funktioniert.

Wer es testen möchte, muß in der Zeile 94 die richtige IP-Adresse seines Gerätes eintragen.
Mit der der elwa_auslesen.php wird das Gerät über Modus ausgelesen und über elwa_math.php erfolgt die Steuerung. (hier nur als kleines Beispiel)

Ich weise ganz klar vornweg darauf hin, dass die Steuerung (elwa_math.php) mit schreibender Routine (Wert „06“) auf das Gerät per Modus gesetzt wird. Dies kann unter Umständen, sofern man nicht weis was man tut, zu Schäden führen. Daher gilt wie immer die Verwendung der Skripte auf eigene Gefahr und ohne jegliche Garantie.

Wer nur auslesen will kann sich die gewünschten Werte durch entfernen der // auswählen.
Diese werden dann in die influx unter Elwa geschrieben. Noch in die crontab eintragen und fertig.
Hinweis: Es lassen sich auf diesem Wege auch die ATORen Register Adressen 1000 bis 1071 auslesen.

Wenn Ulrich möchte kann er das Gerät ja mit einer eigenen Gerätenummer versehen und in den Standart mit aufnehmen - vielleicht bastelt er ja auch eine funkttion „modbus_register_schreiben“ das wäre es super und eröffnet weitere Möglichkeiten.

Viel Spass und sonnige Grüße
Yoda68
Dateianhänge
elwa_auslesen.php.txt
(17.33 KiB) 5-mal heruntergeladen
elwa_math.php.txt
(6.17 KiB) 4-mal heruntergeladen

Antworten