Pylontech US2000 HTTP anfrage

Mit und ohne lokalem Monitor. Die Daten können wahlweise auch zusätzlich auf einen zentralen Server im Internet gesendet werden, (VServer) oder auch auf einen zentralen Server im lokalen Netzwerk. (Falls man mehrere Wechselrichter und Laderegler hat.)
tiego
Beiträge: 7
Registriert: Mo 8. Jul 2019, 21:06

Pylontech US2000 HTTP anfrage

Beitrag von tiego » Di 9. Jul 2019, 19:07

Hallo,

ich bin neu hier und möchte fragen ob es möglich ist die ausgelesenen daten über einen einfachen HTTP aufruf zyklisch auf einen Webserver zu übertragen.

z.b. http://Webserver.com?ID="Adresse1","Mes ... "Messwert2",.... "Messwert20";
alle x sekunden aufrufen und die "Variablen Messwerte" eintragen.

danke
Grüsse
Markus

Benutzeravatar
Ulrich
Administrator
Beiträge: 716
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Kontaktdaten:

Re: Pylontech US2000 HTTP anfrage

Beitrag von Ulrich » Mi 10. Jul 2019, 07:42

Hallo Markus,

da es sich um ein Open Source Projekt handelt, kann jeder die Software für sich so abändern wie er möchte. D.h. mit ein paar PHP Kenntnissen ist das leicht möglich. (Falls Du niemanden hast, der das machen könnte, melde dich bitte per eMail: support@solaranzeige.de)

Eingebaut ist das jedoch nicht. Die Strategie der Solaranzeige ist die Übertragung der Daten in das Internet entweder mit dem MQTT Protokoll auf einen Broker oder in eine 2. Influx Datenbank zu machen. Diese Funktionen sind in der Software schon enthalten.
--------------------------------------
Ulrich [Admin]

Bunker72
Beiträge: 19
Registriert: Mi 21. Nov 2018, 06:51

Re: Pylontech US2000 HTTP anfrage

Beitrag von Bunker72 » Mi 10. Jul 2019, 11:42

Hallo Markus,

ich habe so einen URL-Aufruf zum versenden der Messwerte erstellt.
Aus den gemessenen Daten habe ich ein Array angelegt, welche dann in einem URL-Aufruf verpackt werden mit einem Komma als Trenner versehen sind. Das Komma ist jedoch änderbar.
Diesen php-Script-Teil habe ich in die Gerätedatei geschrieben.
Dieses Geräte-Script wird je nach Einstellung in der config 1 - 6* je Minute aufgerufen.

Ein Beispiel kann ich hier einstellen wenn gewünscht.

Beachte aber bitte, dass ein evtl. Solaranzeige-Update das Regler-Script mit Deinen Änderungen überschreibt. Du müsstest es deshalb nach einem Update unter Umständen wieder einfügen.

Grüße
Thomas

tiego
Beiträge: 7
Registriert: Mo 8. Jul 2019, 21:06

Re: Pylontech US2000 HTTP anfrage

Beitrag von tiego » Mi 10. Jul 2019, 17:19

Hallo Thomas,

danke für deine Rückmeldung.
Wenn du mir das Script und eine kleine Beschreibung bereitstellen könntest wäre super.
Ich habe aktuell massive Probleme mit den Speicher und müsste eben dringend mit der aufzeichnung starten.

danke
Grüsse
Markus

Bunker72
Beiträge: 19
Registriert: Mi 21. Nov 2018, 06:51

Re: Pylontech US2000 HTTP anfrage

Beitrag von Bunker72 » Do 11. Jul 2019, 06:10

Hallo Markus,

ich habe kurz vor dem Part mit der Übertragung der Daten an die Homematic Zentrale folgendes eingefügt - hier am Beispiel des Fronius Symo WR:

Code: Alles auswählen

 /********************************************************************
  // Daten auf ein KO in EDOMI schreiben
  *********************************************************************/

$arrayEDOMI = array(
	$aktuelleDaten["Datum"],
	$aktuelleDaten["Uhrzeit"],
	$aktuelleDaten["WattstundenGesamtHeute"]/1000,
	$aktuelleDaten["WattstundenGesamtJahr"]/1000,
	$aktuelleDaten["WattstundenGesamt"]/1000,
	$aktuelleDaten["Geraetestatus"],
	$aktuelleDaten["ErrorCodes"],
	$aktuelleDaten["Solarstrom"],
	$aktuelleDaten["Solarstrom_String_1"],
	$aktuelleDaten["Solarstrom_String_2"],
	$aktuelleDaten["Solarspannung"],
	$aktuelleDaten["Solarspannung_String_1"],
	$aktuelleDaten["Solarspannung_String_2"],
	$aktuelleDaten["AC_Wirkleistung"],
	$aktuelleDaten["AC_Ausgangsstrom"],
	$aktuelleDaten["AC_Ausgangsstrom_R"],
	$aktuelleDaten["AC_Ausgangsstrom_S"],
	$aktuelleDaten["AC_Ausgangsstrom_T"],
	$aktuelleDaten["AC_Ausgangsspannung"],
	$aktuelleDaten["AC_Ausgangsspannung_R"],
	$aktuelleDaten["AC_Ausgangsspannung_S"],
	$aktuelleDaten["AC_Ausgangsspannung_T"],
	$aktuelleDaten["AC_Ausgangsfrequenz"],
	$aktuelleDaten["Temperatur"]);
$EDOMIWR1 = implode (",",$arrayEDOMI);
$urlKO2122 = "http://192.168.0.21/remote/?login=geheim&pass=nochgeheimer&koid=2122&kovalue=$EDOMIWR1";
  $ch = curl_init();
  curl_setopt($ch,CURLOPT_URL, $urlKO2122);
  $result = curl_exec($ch);


Dies habe ich vor folgende Befehlszeilen eingefügt:
if (isset($aktuelleDaten["Zelle1Status"]) and isset($aktuelleDaten["Regler"])) {


/*********************************************************************
// Jede Minute werden bei Bedarf einige Werte zur Homematic Zentrale
// übertragen.
*********************************************************************
/

Und nun zur kurzen Erklärung:
Du bildest ein Array aus den akteullenDaten wie sie bei Deinem Regler vorkommen. Hierzu müsstest Du halt das Script durchsehen welche Daten abgefragt werden und wie diese benannt sind.
Hilfsweise könntest du auch die Protokollierung auch mal auf 10 setzen und im Log die Einträge bei den aktuellen Werten ansehen ($Tracelevel = 7; // 1 bis 10 10 = Debug).

In der Befehlszeile $EDOMIWR1 = implode (",",$arrayEDOMI);; wird der Trenner zwischen den einzelnen Daten vergeben. Bei mir ein Komma ",". Evtl. kannst/musst Du hier was anderes angeben.

Die Befehlszeile $urlKO2122 = "http://192.168.0.21/remote/?login=gehei ... =$EDOMIWR1" ist die URL mit der gebildeten Veriable $EDOMIWR1. Die IP-Adresse, evtl. login-Daten usw. musst Du natürlich anpassen.
Der Rest des Codes ist dann der "curl" Befehl.

Ich habe aber leider nur geringste php-Kenntnisse. Alles was ich erreicht habe musste ich mir scheibchenweise aus dem Internet zusammensuchen. Aber es funktioniert.
Wenn Dir die aktuellen Daten im Format nicht passen, könnte man auch noch kleine Rechenoperationen (z.B. /1000) vor der Übergabe berechnen lassen - sh. Oben im Arry bei Wattstunden.

Bei Fragen bitte melden.
Grüße
Thomas

tiego
Beiträge: 7
Registriert: Mo 8. Jul 2019, 21:06

Re: Pylontech US2000 HTTP anfrage

Beitrag von tiego » Sa 13. Jul 2019, 08:49

Guten morgen,

danke für deine unterstützung, ich importiere die Daten erfolgreich.

Ich habe das Script erweitert und die HTTP Basic Autentication hinzugefügt.

Ich stell es hier ein damit man es kopieren kann

Code: Alles auswählen

if (isset($aktuelleDaten["Packs"]) and isset($aktuelleDaten["Regler"])) {

/********************************************************************
  // Daten mit HTTP uebertragen
*********************************************************************/

$arrayhttp = array(
	$aktuelleDaten["Pack1_Zelle1"],
	$aktuelleDaten["Pack1_Zelle2"],
	$aktuelleDaten["Pack1_Zelle3"],
	$aktuelleDaten["Pack1_Zelle4"],
	$aktuelleDaten["Pack1_Zelle5"],
	$aktuelleDaten["Pack1_Zelle6"],
	$aktuelleDaten["Pack1_Zelle7"],
	$aktuelleDaten["Pack1_Zelle8"],
	$aktuelleDaten["Pack1_Zelle9"],
	$aktuelleDaten["Pack1_Zelle10"],
	$aktuelleDaten["Pack1_Zelle11"],
	$aktuelleDaten["Pack1_Zelle12"],
	$aktuelleDaten["Pack1_Zelle13"],
	$aktuelleDaten["Pack1_Zelle14"],
	$aktuelleDaten["Pack1_Zelle15"],
	$aktuelleDaten["Pack1_Temp1"],
	$aktuelleDaten["Pack1_Temp2"],
	$aktuelleDaten["Pack1_Temp3"],
	$aktuelleDaten["Pack1_Temp4"],
	$aktuelleDaten["Pack1_Temp5"],
	$aktuelleDaten["Pack1_Strom"],
	$aktuelleDaten["Pack1_Spannung"],
	$aktuelleDaten["Pack1_Ah_left"],
	$aktuelleDaten["Pack1_Ah_total"],
	$aktuelleDaten["Pack1_cycle"],
	$aktuelleDaten["Pack1_Status"],
	$aktuelleDaten["Pack2_Zelle1"],
	$aktuelleDaten["Pack2_Zelle2"],
	$aktuelleDaten["Pack2_Zelle3"],
	$aktuelleDaten["Pack2_Zelle4"],
	$aktuelleDaten["Pack2_Zelle5"],
	$aktuelleDaten["Pack2_Zelle6"],
	$aktuelleDaten["Pack2_Zelle7"],
	$aktuelleDaten["Pack2_Zelle8"],
	$aktuelleDaten["Pack2_Zelle9"],
	$aktuelleDaten["Pack2_Zelle10"],
	$aktuelleDaten["Pack2_Zelle11"],
	$aktuelleDaten["Pack2_Zelle12"],
	$aktuelleDaten["Pack2_Zelle13"],
	$aktuelleDaten["Pack2_Zelle14"],
	$aktuelleDaten["Pack2_Zelle15"],
	$aktuelleDaten["Pack2_Temp1"],
	$aktuelleDaten["Pack2_Temp2"],
	$aktuelleDaten["Pack2_Temp3"],
	$aktuelleDaten["Pack2_Temp4"],
	$aktuelleDaten["Pack2_Temp5"],
	$aktuelleDaten["Pack2_Strom"],
	$aktuelleDaten["Pack2_Spannung"],
	$aktuelleDaten["Pack2_Ah_left"],
	$aktuelleDaten["Pack2_Ah_total"],
	$aktuelleDaten["Pack2_cycle"],
	$aktuelleDaten["Pack2_Status"]
	);
$arrayhttp1 = implode (";",$arrayhttp );
$url = "http://'URL'/?ID=PvAnlage_AKKU;$arrayhttp1";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "'USER:PASSWORD'");
$result = curl_exec($ch);
curl_close($ch);

$funktionen->log_schreiben("Daten per HTTP uebertragen....","   ",8);


Antworten