Hallo,
ich bastele gerade ein Skript, welches Temperaturen von Float in String wandelt. Mein Problem ist, dass die Variable bei „switch“ nicht richtig ausgewertet wird. Wo ist das Problem???
$Temperatur =sprintf("%4.1f", $IPS_VALUE);
$Anzeige = $Temperatur." °C";
switch ($IPS_Variable) {
case 13461 ://V_Aussentemperatur
SetValue(21039 /*[Heizung\Temperaturen\V_Aussentemperatur\V_Aussentemperatur_String]*/,$Anzeige); break;
Case 31555 : //V_Brauchwassertemperatur
SetValue(58229 /*[Heizung\Temperaturen\V_Brauchwassertemperatur\V_Brauchwassertemperatur_String]*/ ,$Anzeige); break;
case 42437 : //V_Kesseltemperatur
SetValue(33000 /*[Heizung\Temperaturen\V_Kesseltemperatur\V_Kesseltemperatur_String]*/ ,$Anzeige); break;
case 28503 : //V_Ruecklauftemperatur
SetValue(50437 /*[Objekt #50437 exisitert nicht]*/ ,$Anzeige); break;
case 46596 : //V_Sollwert_Vorlauf
SetValue(31383 /*[Heizung\Temperaturen\V_Sollwert_Vorlauf\V_Sollwert_Vorlauf_String]*/ ,$Anzeige); break;
case 51935 : //V_T_Solar_Kollektor
SetValue(39619 /*[Heizung\Temperaturen\V_T_Solar_Kollektor\V_T_Solar_Kollektor_String]*/ ,$Anzeige); break;
case 43417 : //V_T_Solar_Speicher_oben
SetValue(14994 /*[Heizung\Temperaturen\V_T_Solar_Speicher_oben\V_T_Solar_Speicher_oben_String]*/ ,$Anzeige); break;
case 54866 : //V_T_Solar_Speicher_unten
SetValue(51666 /*[Heizung\Temperaturen\V_T_Solar_Speicher_unten\V_T_Solar_Speicher_unten_String]*/ ,$Anzeige); break;//V_T_Solar_Speicher_unten_String
case 51721 : //V_Vorlauftemperatur
SetValue(19656 /*[Heizung\Temperaturen\V_Vorlauftemperatur\V_Vorlauftemperatur_String]*/,$Anzeige); break;//V_T_Solar_Speicher_unten_String
}
Frage 1: ich wandele um, weil ich nicht für jede Temperaturanzeige ein Feld für die Temperatur + °C basteln möchte. So wandele ich die Temperaturwerte in eine Zeichnkette +°C um.
Das Problem in meinem Spript ist, dass keine Werte geschrieben werden, obwohl das Skript ständig bei Änderung der Variable aufgerufen wird.
lasse ich die switch-Abweisung weg und weise direkt mit SetValue(xxx, $Anzeige) zu klappt es.
Ich habe es zuerst mit SetValue($IPS_Variable."_String". $Anzeige) versucht aber das geht gar nicht. Meine Frage ist, wie kann ich die Ziel ID dynamisch gestalten d.h. aufrufende Variable ($IPS_Variable) + „_String“ .
Systemvariablen ($IPS_*) sind „case sensitive“, d.h. sie müssen GROSS geschrieben werden.
Also $IPS_VARIABLE verwenden, nicht $IPS_Variable.
Es ist allerdings ein Bug, dass die falsch geschriebene Variable nicht als Fehler gemeldet wird.
Es ist allerdings ein Bug, dass die falsch geschriebene Variable nicht als Fehler gemeldet wird.
Ist es nicht. Wenn du zum Errorlevel von PHP E_NOTICE hinzufügst, bekommst auch auch eine Meldung, wenn Variablen undefiniert sind. Das hat nichts mit IPS zu tun, sondern mit PHP.
aus Sicht von PHP gesehen hast Du natürlich Recht.
Aber die Systemvariablen sind eine Besonderheit von IP-Symcon und sind daher von besonderer Wichtigkeit. Deswegen hätte ich gedacht, dass Du diese einer dahin gehenden Überwachung unterziehst.
Aber vielleicht ist das ja auch technisch gar nicht möglich.