kann $IPS_Variable nicht richtig auswerten

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
  }

mfg. Rayk

Ich sehe adhoc keines. Kannst du das „Problem“ genauer beschreiben?

paresy

ich bastele gerade ein Skript, welches Temperaturen von Float in String wandelt.

Frage !

Warum wandelst Du um. Hat dieses einen bestimmten Grund ?

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“ .

rayk

Vielleicht hilft Dir dieses ja.

float nach string php - Google Search

So ohne weiteres ist dieses nicht möglich. Man möge mich bitte korigiren.

Habs immer noch net verstanden.

Du wandelst einen einkommenden Float in einen String um ?

Wenn ja, warum hängst Du nicht einfach die Anzeige an ! :confused:

switch ($IPS_Variable) {
   case 13461 ://V_Aussentemperatur
        SetValue(21039 /*[Heizung\Temperaturen\V_Aussentemperatur\V_Aussentemperatur_String]*/.$Anzeige);  break;

Guck einfach ein wenig in der Befehlsreferenz :slight_smile:

Hier ein paar Tipps:
IPS_GetName - IP-Symcon :: Automatisierungssoftware
IPS_GetVariableIDByName - IP-Symcon :: Automatisierungssoftware

paresy

Hallo enra,

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.

Gruß
HJH

Die Nutzung von dynamischen Variablennamen wurde gerade hier besprochen.

Tommi

Hallo,
Zitat:

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.

das wars…
DANKE

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.

paresy

Hallo Hans-Jörg,

zum Thema, was bewirkt dann:

IPS_Sleep()
zu
IPS_SLEEP()

oder sleep()

irgendwas kann man sich hier doch schenken.

Ist doch alles das selbe ?

Hallo paresy,

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.

Gruß
HJH

Hallo Rainer,

laut PHP Manual sind Funktionsnamen case-insensitive. Variablennamen sind dagegen case-sensitive.

Gruß
HJH

Aber vielleicht ist das ja auch technisch gar nicht möglich.

So ist es leider. Werde aber den case-sensitive Hinweis mit in die Doku nehmen.

paresy