Sonoff POW R2 mit Tasmota Firmware als Messstelle

Ü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

Bogeyof
Beiträge: 1109
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 24 Mal
Danksagung erhalten: 161 Mal

Re: Sonoff POW R2 mit Tasmota Firmware als Messstelle

Beitrag von Bogeyof »

Wie erwartet ist ein Datenfeld nicht versorgt: "TasmotaWZTotal=,"

Wenn ein Datenfeld gar keinen Wert hat, dann schlägt das Schreiben fehl. Du musst sehen, warum der Wert nicht ausgelesen wird, evtl. kann man ihn auch vorinitialisieren mit 0.
Welches Tasmota-Gerät willst Du denn auslesen und welche Werte liefert dieses? Es scheint so als hättest Du die Beispiel_PHP 1 zu 1 kopiert, das muss schon auf Deine Bedürfnisse angepasst werden...

UNCLE03
Beiträge: 16
Registriert: Di 9. Mär 2021, 18:04
Hat sich bedankt: 9 Mal

Re: Sonoff POW R2 mit Tasmota Firmware als Messstelle

Beitrag von UNCLE03 »

Hi,

ja hab nur die IP angepasst - dachte das reicht erst einmal.
Tasmota Gerät ist ein NOUS A1 = Gosund kompatibel.
MQTT entsprechend konfiguriert.

In Home Assistant ist das Gerät normal verfübar.

Bogeyof
Beiträge: 1109
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 24 Mal
Danksagung erhalten: 161 Mal

Re: Sonoff POW R2 mit Tasmota Firmware als Messstelle

Beitrag von Bogeyof »

Gib mal bitte im Webbrowser folgendes mit der passenden IP des Nous ein:

Code: Alles auswählen

http://192.168.xxx.xxx/cm?cmnd=Status%208
Als Antwort erhältst Du ein JSON im Browser in etwa wie:

Code: Alles auswählen

{"StatusSNS":{"Time":"2024-02-26T11:27:34","ENERGY":{"TotalStartTime":"2022-01-24T07:20:18","Total":2.422,"Yesterday":0.011,"Today":0.000,"Power": 0,"ApparentPower": 0,"ReactivePower": 0,"Factor":0.00,"Voltage":228,"Current":0.000}}}
Hänge doch bitte diese Ausgabe mal hier an...

UNCLE03
Beiträge: 16
Registriert: Di 9. Mär 2021, 18:04
Hat sich bedankt: 9 Mal

Re: Sonoff POW R2 mit Tasmota Firmware als Messstelle

Beitrag von UNCLE03 »

sieht so aus:

{"StatusSNS":{"Time":"2024-02-26T11:55:49","ENERGY":{"TotalStartTime":"2023-01-16T16:18:43","Total":52.883,"Yesterday":1.136,"Today":0.229,"Power": 2,"ApparentPower":22,"ReactivePower":22,"Factor":0.09,"Voltage":297,"Current":0.074}}}

Bogeyof
Beiträge: 1109
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 24 Mal
Danksagung erhalten: 161 Mal

Re: Sonoff POW R2 mit Tasmota Firmware als Messstelle

Beitrag von Bogeyof »

Dann bitte noch die verwendete _math.php. Es müsste dann eigentlich ein Fehler darin sein, denn laut Deinem LOG sind alle ausgelesenen Werte 0 oder eben nicht vorhanden. Es verwendet aber diese Statusabfrage und würde diese JSON auswerten...

UNCLE03
Beiträge: 16
Registriert: Di 9. Mär 2021, 18:04
Hat sich bedankt: 9 Mal

Re: Sonoff POW R2 mit Tasmota Firmware als Messstelle

Beitrag von UNCLE03 »

Hi,

hier:

<?php
/******************************************************************************
// Hie können eigene Berechnungen gemacht werden, wenn das nötig ist.
******************************************************************************/

$ch = curl_init("http://192.168.1.191/cm?"); // cURL initialisieren
curl_setopt($ch, CURLOPT_HEADER, 0); // Header soll nicht in Ausgabe enthalten sein
curl_setopt($ch, CURLOPT_POST, 1); // POST-Request wird abgesetzt
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'cmnd=Status%208'); // POST-Felder festlegen, die gesendet werden sollen
$EnergyStr = curl_exec($ch); // Ausfuehren
curl_close($ch); // Objekt schliessen und Ressourcen freigeben
if (empty($EnergyStr)) {
$aktuelleDaten["Query"] = "db=" . $INFLUXDB_STORAGE . "&q=" . urlencode("select last(TasmotaWZTotal) from Energy");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$aktuelleDaten["TasmotaWZTotal"] = $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["TasmotaWZToday"] = 0;
//$aktuelleDaten["TasmotaWZTotal"] = 0;
$aktuelleDaten["TasmotaWZCur"] = 0;
} else {
$EnergyA = json_decode($EnergyStr, true);
$aktuelleDaten["TasmotaWZToday"] = $EnergyA["StatusSNS"]["ENERGY"]["Today"] * 1000;
$aktuelleDaten["TasmotaWZTotal"] = $EnergyA["StatusSNS"]["ENERGY"]["Total"] * 1000;
$aktuelleDaten["TasmotaWZCur"] = $EnergyA["StatusSNS"]["ENERGY"]["Power"];
}


// Erstellen der Zusatzquery, damit die Werte in die Datenbank geschrieben werden
$aktuelleDaten["ZusatzQuery"] = "Energy ";
$aktuelleDaten["ZusatzQuery"] .= "TasmotaWZToday=" . $aktuelleDaten["TasmotaWZToday"];
$aktuelleDaten["ZusatzQuery"] .= ",TasmotaWZTotal=" . $aktuelleDaten["TasmotaWZTotal"];
$aktuelleDaten["ZusatzQuery"] .= ",TasmotaWZCur=" . $aktuelleDaten["TasmotaWZCur"];
$aktuelleDaten["ZusatzQuery"] .= " ".$aktuelleDaten["zentralerTimestamp"];


return;
?>



Liegt es an dem /cm? hinter der IP ?

Bogeyof
Beiträge: 1109
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 24 Mal
Danksagung erhalten: 161 Mal

Re: Sonoff POW R2 mit Tasmota Firmware als Messstelle

Beitrag von Bogeyof »

Als erstes, wo kommt die Variable $INFLUXDB_STORAGE her? Diesen Zugriff nutzt das Skript zum Lesen des Total, wenn es keine verwertbare Antwort erhält. Da diese Variable nicht definiert ist (oder steht die in der x.user.config.php?), kann er das alte Total nicht einlesen und hat dann keinen Wert. Das erklärt, warum das Schreiben fehlschlägt, weil "TasmotaWZTotal=," ist.
Warum er allerdings keine Werte bekommt (deshalb sind alle Wert 0 und eben TasmotaWZTotal leer, ist dadurch natürlich nicht klar. Eigentlich sollte er nicht in diesen if(empty...) hineinlaufen, wenn er eine verwertbare Antwort bekommt.
Ist wirklich sicher, dass die IP stimmt? Ist evtl. der Zeichensatz falsch und nach dem Kopieren ist auf LINUX Seite ein Sonderzeichen drin oder ähnliches?

UNCLE03
Beiträge: 16
Registriert: Di 9. Mär 2021, 18:04
Hat sich bedankt: 9 Mal

Re: Sonoff POW R2 mit Tasmota Firmware als Messstelle

Beitrag von UNCLE03 »

Hi,

erst einmal vielen Dank für Deine Mühe und Zeit.

$INFLUXDB_STORAGE war noch ein Überbleibes von den Versuchen das anzupassen. Dacht der Docker nutzt eventuell andere Pfade und das war aus der Docker Beschreibung.

Hab das mal wieder zurück geändert, aber nach Neustart immer noch keine Änderung.

Jetzt mal eine Grundsätzliche Frage und um sicher zu gehen:

Hab ich das wirklich richtig Verstanden, ich brauche in der unser.config.php keine Änderung (Regler) vornehme, da ja das Script die Json seite des Tasmota Gerätes direkt pollt und auswertet und immer in die Database schreibt ?

Nicht das wir an der falschen Stelle suchen.

Bogeyof
Beiträge: 1109
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 24 Mal
Danksagung erhalten: 161 Mal

Re: Sonoff POW R2 mit Tasmota Firmware als Messstelle

Beitrag von Bogeyof »

Korrekt. In der x.user.config.php ist keine Änderung nötig, da die xxx_math.php ja beim Aufruf des bereits vorhandenen Gerätes durchlaufen wird.
Diese sollte dann per HTTP-Request (curl-Befehl) die Statusantwort des Nous auswerten und die gefundenen Daten werden in einer Variablen $ZusatzQuery gespeichert. Diese Variable wird von der Solaranzeige automatisch mit weggeschrieben, falls Inhalt vorhanden.
Wir suchen also an der richtigen Stelle.
Es funktioniert ja auch wie Dein Log zeigt, denn Du hast den zusätzlichen String "Energy TasmotaWZToday=0,TasmotaWZTotal=,TasmotaWZCur=0 1708939691" im Log, dieser wird von der xxx_math.php generiert und von Solaranzeige versucht zu speichern. Leider ist dort der Wert für TasmotaWZTotal nicht befüllt und deswegen schlägt das Schreiben fehl.
Warum dieser Wert nicht befüllt ist liegt auch an der falschen Variable $INFLUXDB_STORAGE, aber auch nur weil anscheinend der HTTP-Request keine Antwort liefert und daher der Zweig mit dem Lesen des alten Wertes durchlaufen wird (Kann man erkennen, weil alle Werte 0 und der eine leer ist, das passiert bei Dir in diesem Zweig). Im Normalfall sollte er aber hier gar nicht durchlaufen, sondern danach die Werte aus der JSON-Antwort auslesen.
Diese Antwort bekommt er aber nicht.

Zum Test kannst Du noch einen Log-Eintrag erzeugen mit der JSON-Antwort, vielleicht wird dann klarer, was eigentlich passiert:

Code: Alles auswählen

...
$EnergyStr = curl_exec($ch); // Ausfuehren
curl_close($ch); // Objekt schliessen und Ressourcen freigeben

$funktionen->log_schreiben("Antwort Nous: " . $EnergyStr, " ", 6 );
Füge einfach nach dem curl_close die obige Zeile mit log_schreiben ein. Danach bitte wieder ins LOG schauen und die Antwort hier posten...

UNCLE03
Beiträge: 16
Registriert: Di 9. Mär 2021, 18:04
Hat sich bedankt: 9 Mal

Re: Sonoff POW R2 mit Tasmota Firmware als Messstelle

Beitrag von UNCLE03 »

Hi,

nach Ändern und Neustart kommt das im Log:

26.02. 12:57:01 -Antwort Nous: {"WARNING":"Benötige user=<Benutzername>&password=<Passwort>"}

Hatte ich aber im MQTT rausgelöscht ??
Oder ist damit das Password für die Web-Oberfläche gemeint ?

Das würde ich gerne lassen,damit die Kinder da nicht rumfummeln können :-)


$ch = curl_init("http://192.168.1.191/cm?user=admin&password=password"); // cURL initialisieren

würde das dann so funktionieren ?


Edit: Mist so funktionert es, oh Mann

Antworten

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