MQTT MCZ Pelletofen.

Hallo zusammen,

habe es endlich geschafft meinen MCZ Pelletofen auszulesen.
Das ganze funktioniert über einen Raspberry Pi und MQTT.
Allerdings habe ich keine Ahnung wie ich diesen JSON String der dort kommt in einzelne Values bekomme.

Über die MQTT Schnitstelle kommt z.B. folgendes rein:
{„RPM_Fam_Fume“: 2045, „Active_Live“: 246, „RPM_WormWheel_Live“: 153, „Total_Operating_Hours“: „145:58:00“}

Hat jemand eine Ahnung wie ich das hinbekomme?
Immer wenn sich Werte ändern werden diese Änderungen geschickt alle 15s.

Link vom github Projekt:
GitHub - Chibald/maestrogateway: Manage MCZ pellet stoves that are equipped with Maestro technology

Der Pelletofen liefert Tonnenweise Werte, allerdings werden immer nur die Werte geschickt die sich geändert haben.

Danke für eure Unterstüzung.

Willst du ein Modul dafür schreiben?
Dann kannst du dir mein Shelly Modul anschauen.

Grüße,
Kai

ein eigenes Modul möchte ich jetzt nicht schreiben, eher ein Script das mir die JSON Daten in values schreibt.
Allerdings habe ich da meine Probleme.
Ich versuche mich am Beispiel hier:
IP-Symcon - Wie kann ich… 2.0

Darüber versuche ich die Daten zu ordnen, allerdings klappt das nicht ganz :slight_smile:

<?
$Stove_State = 12717; //Pelletofen Status 
$Fan_Sate =
$DuctedFan1 =
$DuctedFan2 =
$Fume_Temperature =
$Ambient_Temperature =
$Puffer_Temperature =
$Boiler_Temperature =
$NTC3_Temperature =
$Candle_Condition =
$ACTIVE_Set =
$RPM_Fam_Fume =
$RPM_WormWheel_Set =
$RPM_WormWheel_Live =
$ECO_Mode =
$Silent_Mode =
$Chrono_Mode =
$Temperature_Setpoint =
$Temperature_Motherboard =
$Power_Level =
$Total_Operating_Hours =


$content = GetValueString (58438); //ID des MQTT Device

$json=json_decode($content);
//print_r ($json);  
//Akku
SetValueInteger($Stove_State, "".$json->system->soc."");
?>

ich hänge am Teil SetValueInteger($Stove_State, „“.$json->system->soc."");
Aus einem Beispiel stand das $json->system->soc. drinnen was ich natürlich anpassen muss.

Allerdings kenne ich den syntax nicht wie so ein json aufgebaut ist.

Hast du Mal im MQTT Konfigurator geschaut, ob dir die einzelnen Variablen angezeigt werden?
Dann kannst du damit entsprechende MQTT Device Instanzen in IPS erstellen.
Michael

Ja ich habe es tatsächlich hinbekommen.

Es sind so etwa 40 Variablen die mir der Pelletofen zurückgibt.
Jetzt gehe ich nach Shema X vor und schreibe die Werte alle in Variablen.

Allerdings stoße ich jetzt auf ein problem.
Der Pelletofen gibt mir nur geänderte Werte zurück, sprich Lüfterdrehzahlen kommen eigentlich alle 15s rein da sich diese ständig ändern.

Allerdings gibt es Werte wie z.B. die Zündkerze die natürlich nur im Startvorgang aktiv ist.
Diese Werte versucht mein Script aus dem JSOn String herauszulesen und schmeißt mir im LOG ein Warning.
Jetzt habe ich die maximale Anzahl der warnings erreicht sodass er mir einen error schmeißt.

Wie löse ich das am besten?

Mein bisheriges Script:

<?
$Stove_State = 12717; //Pelletofen Status 
$Fan_Sate = 18554; // Lüfter Status
$DuctedFan1 = 19196; //Lüfter 1
$DuctedFan2 = 55664; //Lüfter 2
$Fume_Temperature = 54190; //Abgastemperatur
$Ambient_Temperature = 13350; //Ambiente Temperatur
$Candle_Condition = 35569; //Status Glühkerze
$ACTIVE_Set = 49962; //Betriebsmodus
$RPM_Fam_Fume = 58393; //RPM Abgasgebläse
$RPM_WormWheel_Set = 38172; //Förderschnecke SOLL
$RPM_WormWheel_Live = 56221; //Forderschnecke IST
$ECO_Mode =
$Silent_Mode =
$Chrono_Mode =
$Temperature_Setpoint =
$Temperature_Motherboard =
$Power_Level =
$Total_Operating_Hours = 55521;


$content = GetValueString (58438); //ID des MQTT Device

$json=json_decode($content);
//print_r ($json);  

//Pelletofen Status
SetValueInteger($Stove_State, "".$json->Stove_State."");

//Lüfter Status
SetValueInteger($Fan_State, "".$json->Fan_State."");

//Betriebsstunden komplett
SetValueFloat($Total_Operating_Hours, "".$json->Total_Operating_Hours."");

//Lüfter 1
SetValueFloat($DuctedFan1, "".$json->DuctedFan1."");

//Lüfter 2
SetValueFloat($DuctedFan2, "".$json->DuctedFan2."");

//Abgastemperatur
SetValueInteger($Fume_Temperature, "".$json->Fume_Temperature."");

//Ambiente Temperatur
SetValueFloat($Ambient_Temperature, "".$json->Ambient_Temperature."");

//Glühkerze Status
SetValueInteger($Candle_Condition, "".$json->Candle_Condition."");

//Betriebsmodus
SetValueInteger($ACTIVE_Set, "".$json->ACTIVE_Set."");

//RPM Abgasgebläse
SetValueInteger($RPM_Fam_Fume, "".$json->RPM_Fam_Fume."");

//Förderschnecke SOLL
SetValueInteger($RPM_WormWheel_Set, "".$json->RPM_WormWheel_Set."");

//Förderschnecke IST
SetValueInteger($RPM_WormWheel_Live, "".$json->RPM_WormWheel_Live."");

?>

Und die Fehlermeldungen beim ausführen:


Notice:  Undefined property: stdClass::$Stove_State in C:\IP-Symcon\scripts\58219.ips.php on line 28

Warning:  Cannot auto-convert value for parameter VariableValue in C:\IP-Symcon\scripts\58219.ips.php on line 28

Notice:  Undefined variable: Fan_State in C:\IP-Symcon\scripts\58219.ips.php on line 31

Notice:  Undefined property: stdClass::$Fan_State in C:\IP-Symcon\scripts\58219.ips.php on line 31

Warning:  Cannot auto-convert value for parameter VariableValue in C:\IP-Symcon\scripts\58219.ips.php on line 31

Notice:  Undefined property: stdClass::$DuctedFan1 in C:\IP-Symcon\scripts\58219.ips.php on line 37

Warning:  Cannot auto-convert value for parameter VariableValue in C:\IP-Symcon\scripts\58219.ips.php on line 37

Notice:  Undefined property: stdClass::$DuctedFan2 in C:\IP-Symcon\scripts\58219.ips.php on line 40

Warning:  Cannot auto-convert value for parameter VariableValue in C:\IP-Symcon\scripts\58219.ips.php on line 40

Notice:  Undefined property: stdClass::$Fume_Temperature in C:\IP-Symcon\scripts\58219.ips.php on line 43
Abort Processing during exceed of maximal ErrorCount: Cannot auto-convert value for parameter VariableValue
   Error in Script C:\IP-Symcon\scripts\58219.ips.php on Line 43

property_exists könnte dir helfen. :slight_smile:

Grüße,
Kai

merci kai, hilfreicher Hinweis:

Ich bin mir nicht sicher aber so würde ich das machen:

if (property_exists($json->Stove_State.""))
{
SetValueInteger($Stove_State, "".$json->Stove_State."");
}

Komischerweise bekomme ich aber trotz der Abfrage eine komische „Notiz“:

Notice:  Undefined property: stdClass::$Stove_State in C:\IP-Symcon\scripts\58219.ips.php on line 28

ja ok ich sollte nicht gleich fragen sondern ein bisschen mehr lesen :slight_smile:

if (property_exists($json, "Stove_State"))
{
SetValueInteger($Stove_State, "".$json->Stove_State."");
}

Jetzt funktioniert es und alle Zeilen werden übersprungen die derzeit keine Daten liefern :slight_smile: