Panasonic Aquarea Wärmepumpe auslesen und steuern

Ü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: 983
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 18 Mal
Danksagung erhalten: 127 Mal

Re: Panasonic Aquarea Wärmepumpe auslesen und steuern

Beitrag von Bogeyof »

Gib mir mal den ganzen Code, also Deine _math.php, hier als Anhang. Und sage mir, welche Werte Du haben willst, nur Watt oder alle und das mit Watt war nur ein Test?
Ich vermute es müsste so heißen:
$aktuelleDaten["ZusatzQuery"] .= "Leistung_WP=".$EnergyA["s0"][$j]["Value"];

Hattest Du denn ein Datenfeld Leistung_WP unter dem Measurement WP in dem der Wert "Watt" stand? Wenn ja, dann ist dieses Feld jetzt als Textfeld angelegt und es wird nicht funktionieren, da jetzt Zahlen reinzuschreiben. Daher vor dem Test das Measurement "WP" löschen (in der Konsole):

influx
use solaranzeige
drop measurement WP
exit

MacB19
Beiträge: 13
Registriert: Fr 7. Mai 2021, 15:02
Hat sich bedankt: 1 Mal

Re: Panasonic Aquarea Wärmepumpe auslesen und steuern

Beitrag von MacB19 »

<?php

// ab hier HeishaMon auslesen

$aktuelleDaten["ZusatzQuery"] = "";

$ch = curl_init("http://192.168.178.92/json"); // 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)) {
goto Ausgang;
}
$EnergyA = json_decode($EnergyStr, true);

$aktuelleDaten["ZusatzQuery"] = "WP ";
$i = 0;
if (empty($EnergyA["heatpump"][$i]["Value"])) {
$EnergyA["heatpump"][$i]["Value"] = 0;
}
$aktuelleDaten["ZusatzQuery"] .= $EnergyA["heatpump"][$i]["Name"]."=".$EnergyA["heatpump"][$i]["Value"];
$i = 1;
do {
if ($i == 34 or $i == 35 or $i == 37 or $i == 43 or $i == 46 or $i == 47 or $i == 48 or $i == 57 or ($i > 81 and $i < 90) or ($i > 100 and $i < 106)){
// Wert wird uebersprungen, kein Eintrag in Datenbank
} else {
if ($i == 44 or $i == 92){
if (empty($EnergyA["heatpump"][$i]["Value"])) {
$EnergyA["heatpump"][$i]["Value"] = "none";
}
$aktuelleDaten["ZusatzQuery"] .= ",".$EnergyA["heatpump"][$i]["Name"]."=\"".$EnergyA["heatpump"][$i]["Value"]."\"";
} else {
if (empty($EnergyA["heatpump"][$i]["Value"])) {
$EnergyA["heatpump"][$i]["Value"] = 0;
}
$aktuelleDaten["ZusatzQuery"] .= ",".$EnergyA["heatpump"][$i]["Name"]."=".$EnergyA["heatpump"][$i]["Value"];
if ($i == 20) {
$aktuelleDaten["ThreeWay_Valve_State"] = $EnergyA["heatpump"][$i]["Value"];
}
}
}
$i++;
} while ($i < 107); // Firmware 3.0, bei Firmware 2.x muss $i < 106 sein !!!

$aktuelleDaten["ZusatzQuery"] .= " ".$aktuelleDaten["zentralerTimestamp"];
$aktuelleDaten["ZusatzQuery"] .= "\n";

Ausgang:;

return;

?>

MacB19
Beiträge: 13
Registriert: Fr 7. Mai 2021, 15:02
Hat sich bedankt: 1 Mal

Re: Panasonic Aquarea Wärmepumpe auslesen und steuern

Beitrag von MacB19 »

Inhalt der fronius_symo_serie_math.php (ohn Änderungen, so funktionieren alle Werte der Jeisha)

Interessant sind folgende Werte des s0_1:
"Watt"
"Watthour"
"WatthourTotal"

Ich habe relativ viele Schleifen gedreht heute morgen, konnte aber nie einen neuen Kanal im Dashboard finden.

MacB19
Beiträge: 13
Registriert: Fr 7. Mai 2021, 15:02
Hat sich bedankt: 1 Mal

Re: Panasonic Aquarea Wärmepumpe auslesen und steuern

Beitrag von MacB19 »

<?php

// ab hier HeishaMon auslesen

$aktuelleDaten["ZusatzQuery"] = "";

$ch = curl_init("http://192.168.178.92/json"); // 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)) {
goto Ausgang;
}
$EnergyA = json_decode($EnergyStr, true);

$aktuelleDaten["ZusatzQuery"] = "WP ";

//zusätzlich S0 auslesen
$j = 1;
$aktuelleDaten["ZusatzQuery"] .= "Leistung_WP=".$EnergyA["s0"][$j]["Value"];

//default
$i = 0;
if (empty($EnergyA["heatpump"][$i]["Value"])) {
$EnergyA["heatpump"][$i]["Value"] = 0;
}
$aktuelleDaten["ZusatzQuery"] .= $EnergyA["heatpump"][$i]["Name"]."=".$EnergyA["heatpump"][$i]["Value"];
$i = 1;
do {
if ($i == 34 or $i == 35 or $i == 37 or $i == 43 or $i == 46 or $i == 47 or $i == 48 or $i == 57 or ($i > 81 and $i < 90) or ($i > 100 and $i < 106)){
// Wert wird uebersprungen, kein Eintrag in Datenbank
} else {
if ($i == 44 or $i == 92){
if (empty($EnergyA["heatpump"][$i]["Value"])) {
$EnergyA["heatpump"][$i]["Value"] = "none";
}
$aktuelleDaten["ZusatzQuery"] .= ",".$EnergyA["heatpump"][$i]["Name"]."=\"".$EnergyA["heatpump"][$i]["Value"]."\"";
} else {
if (empty($EnergyA["heatpump"][$i]["Value"])) {
$EnergyA["heatpump"][$i]["Value"] = 0;
}
$aktuelleDaten["ZusatzQuery"] .= ",".$EnergyA["heatpump"][$i]["Name"]."=".$EnergyA["heatpump"][$i]["Value"];
if ($i == 20) {
$aktuelleDaten["ThreeWay_Valve_State"] = $EnergyA["heatpump"][$i]["Value"];
}
}
}
$i++;
} while ($i < 107); // Firmware 3.0, bei Firmware 2.x muss $i < 106 sein !!!

$aktuelleDaten["ZusatzQuery"] .= " ".$aktuelleDaten["zentralerTimestamp"];
$aktuelleDaten["ZusatzQuery"] .= "\n";

Ausgang:;

return;

?>

MacB19
Beiträge: 13
Registriert: Fr 7. Mai 2021, 15:02
Hat sich bedankt: 1 Mal

Re: Panasonic Aquarea Wärmepumpe auslesen und steuern

Beitrag von MacB19 »

dieser Inhalt enthält deine vorgeschlagene Änderung.
Habe die Messung wie von dir beschrieben beendet und neu gebootet.

Keine Messung der WP Größen mehr...

php.log gibt jetzt folgendes aus: (der letzte Eintrag kommt immer)
[15-Nov-2022 15:21:03 Europe/Berlin] PHP Notice: Undefined index: Value in /var/www/html/fronius_symo_serie_math.php on line 25
[15-Nov-2022 15:21:13 Europe/Berlin] PHP Warning: sleep(): Number of seconds must be greater than or equal to 0 in /var/www/html/fronius_symo_serie.php on line 653

MacB19
Beiträge: 13
Registriert: Fr 7. Mai 2021, 15:02
Hat sich bedankt: 1 Mal

Re: Panasonic Aquarea Wärmepumpe auslesen und steuern

Beitrag von MacB19 »

im Gegensatz zu den "heatpump" Blöcken enthält der S0 Teil ja kein "Value" sondern nur "Watt" und den Wert:

"s0":[{"S0 port":"1","Watt":"9",....

"s0" entspricht "heatpump"
"s0 port" --> "Topic"
"1" --> "TOP1"
Kein "Name"
Kein Name
"Watt" --> "Value"
"9" --> Wert
...

Bogeyof
Beiträge: 983
Registriert: Mi 13. Mai 2020, 10:04
Hat sich bedankt: 18 Mal
Danksagung erhalten: 127 Mal

Re: Panasonic Aquarea Wärmepumpe auslesen und steuern

Beitrag von Bogeyof »

OK, ich hatte mir das nur auf dem Sprung schnell angesehen, da ich die s0-Geschichte nicht verwende hatte ich die JSON-Ausgabe nicht im Kopf.
Dein Abfrage für den S0-Port-1 wäre dann richtig mit:
$aktuelleDaten["ZusatzQuery"] .= ",Leistung_WP=".$EnergyA["s0"][0]["Watt"];
$aktuelleDaten["ZusatzQuery"] .= ",Leistung_WP_Wh=".$EnergyA["s0"][0]["Watthour"];
$aktuelleDaten["ZusatzQuery"] .= ",Leistung_WP_Wh_Total=".$EnergyA["s0"][0]["WatthourTotal"];
(analog mit 1 für S0-Port-2):
$aktuelleDaten["ZusatzQuery"] .= ",Leistung_WP=".$EnergyA["s0"][1]["Watt"];
$aktuelleDaten["ZusatzQuery"] .= ",Leistung_WP_Wh=".$EnergyA["s0"][1]["Watthour"];
$aktuelleDaten["ZusatzQuery"] .= ",Leistung_WP_Wh_Total=".$EnergyA["s0"][1]["WatthourTotal"];


Als nächstes ist die Position der Abfrage / ZusatzQuery ein Problem. Neue Felder müssen immer mit einem Komma von den vorherigen getrennt werden. In der bestehenden Logik (die später kommt), schreibt er den ersten Wert ohne Komma und damit ist die Syntax falsch, wenn vorher von Dir schon ein Datenfeld an die ZusatzQuery angehängt wurde.
Am besten die obigen Zeilen erst nach der Schleife einfügen, dann sollte es passen:
...
...
$i++;
} while ($i < 107); // Firmware 3.0, bei Firmware 2.x muss $i < 106 sein !!!

//zusätzlich S0 auslesen
$aktuelleDaten["ZusatzQuery"] .= ",Leistung_WP=".$EnergyA["s0"][0]["Watt"];
$aktuelleDaten["ZusatzQuery"] .= ",Leistung_WP_Wh=".$EnergyA["s0"][0]["Watthour"];
$aktuelleDaten["ZusatzQuery"] .= ",Leistung_WP_Wh_Total=".$EnergyA["s0"][0]["WatthourTotal"];

$aktuelleDaten["ZusatzQuery"] .= " ".$aktuelleDaten["zentralerTimestamp"];
$aktuelleDaten["ZusatzQuery"] .= "\n";
...
...

Neu starten brauchst Du übrigens nicht, die Änderungen werden sofort wirksam...

MacB19
Beiträge: 13
Registriert: Fr 7. Mai 2021, 15:02
Hat sich bedankt: 1 Mal

Re: Panasonic Aquarea Wärmepumpe auslesen und steuern

Beitrag von MacB19 »

Saustark. Läuft. Jetzt nur noch Dashboard basteln !
Vielen, vielen Dank für die Hilfe !

MacB19
Beiträge: 13
Registriert: Fr 7. Mai 2021, 15:02
Hat sich bedankt: 1 Mal

Re: Panasonic Aquarea Wärmepumpe auslesen und steuern

Beitrag von MacB19 »

Kleine Ergänzung der Index $i hat sich in meinem Fall mit dem Skript
"fronius_symo_serie.php" gebissen.

Daher habe ich das umgebaut auf $j.
Danach gibt es auch keine Fehlermeldungen mehr im /var/www/log/php.log

Anbei für alle der Inhalt meiner "fronius_symo_serie_math.php"
Alle Credits bei @Bogeyof

Damit kann man den HeishaMon zusammen mit einem Fronius Symo Gen24 auslesen und anzeigen

Code: Alles auswählen

<?php

// ab hier HeishaMon auslesen

$aktuelleDaten["ZusatzQuery"] = "";

$ch = curl_init("http://192.168.178.92/json"); // 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)) {
    goto Ausgang;
}
$EnergyA = json_decode($EnergyStr, true);

$aktuelleDaten["ZusatzQuery"] = "WP ";

$j = 0;
if (empty($EnergyA["heatpump"][$j]["Value"])) {
    $EnergyA["heatpump"][$j]["Value"] = 0;
}
$aktuelleDaten["ZusatzQuery"] .= $EnergyA["heatpump"][$j]["Name"]."=".$EnergyA["heatpump"][$j]["Value"];
$j = 1;
do {
    if ($j == 34 or $j == 35 or $j == 37 or $j == 43 or $j == 46 or $j == 47 or $j == 48 or $j == 57 or ($j > 81 and $j < 90) or ($j > 100 and $j < 106)){
    // Wert wird uebersprungen, kein Eintrag in Datenbank
    } else {
        if ($j == 44 or $j == 92){
            if (empty($EnergyA["heatpump"][$j]["Value"])) {
             $EnergyA["heatpump"][$j]["Value"] = "none";
            }
            $aktuelleDaten["ZusatzQuery"] .= ",".$EnergyA["heatpump"][$j]["Name"]."=\"".$EnergyA["heatpump"][$j]["Value"]."\"";
        } else {
             if (empty($EnergyA["heatpump"][$j]["Value"])) {
                 $EnergyA["heatpump"][$j]["Value"] = 0;
             }
             $aktuelleDaten["ZusatzQuery"] .= ",".$EnergyA["heatpump"][$j]["Name"]."=".$EnergyA["heatpump"][$j]["Value"];
             if ($j == 20) {
                 $aktuelleDaten["ThreeWay_Valve_State"] = $EnergyA["heatpump"][$j]["Value"];
             }
        }
    }
    $j++;
} while ($j < 107); // Firmware 3.0, bei Firmware 2.x muss $j < 106 sein !!!

//zusätzlich S0_1 auslesen
$aktuelleDaten["ZusatzQuery"] .= ",Leistung_WP=".$EnergyA["s0"][0]["Watt"];
$aktuelleDaten["ZusatzQuery"] .= ",Energie_WP=".$EnergyA["s0"][0]["Watthour"];
$aktuelleDaten["ZusatzQuery"] .= ",Energie_WP_Total=".$EnergyA["s0"][0]["WatthourTotal"];
//Ende S0_1 auslesen

$aktuelleDaten["ZusatzQuery"] .= "  ".$aktuelleDaten["zentralerTimestamp"];
$aktuelleDaten["ZusatzQuery"] .= "\n";

Ausgang:;

return;

?>

klausimausi
Beiträge: 2
Registriert: Sa 19. Nov 2022, 13:49

Re: Panasonic Aquarea Wärmepumpe auslesen und steuern

Beitrag von klausimausi »

Bogeyof hat geschrieben:
Mo 1. Aug 2022, 11:45
Ich bin nicht ganz sicher, welche Werte Du meinst:
- Die Werte der Wärmepumpe kommen durch das Zusatzmodul Heishamon.
- Die Energiewerte lese ich vom Shelly 3EM durch die WebAPI-Schnittstelle aus. Dessen Stromzangen messen zwischen WP und Sicherung.
- An das Heishamon-Modul lässt sich wohl auch noch ein Zähler mit S0-Schnittstelle anschließen und dann mit Heishamon (WebAPI oder MQTT) auslesen. Damit habe ich aber keine Erfahrung.
Moin,
Bin auf der suche nach den richtigen Zähler mit S0-Schnittstelle hat das schon jemand umgesetzt.
Mache jetzt schon mal ein paar Trocken Übungen Heishamon mit Raspberry Pi 4 ohne die Jeisha 7KW wir erst im 3/23 geliefert werden?
MfG Klaus

Antworten