Seite 1 von 1

Pylontech US2000 HTTP anfrage

Verfasst: Di 9. Jul 2019, 19:07
von tiego
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

Re: Pylontech US2000 HTTP anfrage

Verfasst: Mi 10. Jul 2019, 07:42
von Ulrich
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.

Re: Pylontech US2000 HTTP anfrage

Verfasst: Mi 10. Jul 2019, 11:42
von Bunker72
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

Re: Pylontech US2000 HTTP anfrage

Verfasst: Mi 10. Jul 2019, 17:19
von tiego
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

Re: Pylontech US2000 HTTP anfrage

Verfasst: Do 11. Jul 2019, 06:10
von Bunker72
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

Re: Pylontech US2000 HTTP anfrage

Verfasst: Sa 13. Jul 2019, 08:49
von tiego
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);