Gedankenstütze bei SetValueString nach Update auf 2.5

Hallo zusammen,

ich habe ein Script aus dem Forum hier in Verwendung, welches mir Daten meiner WS2300 Wetterstation aus einer XML in IPS Variablen schreibt.

Leider benutzt es die Funktion SetValueString mit „varname“ als Zuordnung und nicht der „ID“. Ich hoffe jemand kann mir helfen das Script umzubauen das es auch unter 2.5 läuft.

Anbei ein Auszug aus der XML:

<?xml version=„1.0“ encoding=„utf-8“?>
<ws2300 version=„1.0“>
<Date>2012-02-23</Date>
<Time>20:13:10</Time>
<Temperature>
<Indoor>
<Value>23.2</Value>
<Min>19.1</Min>
<Max>24.0</Max>
<MinTime>00:47</MinTime>
<MinDate>2012-01-25</MinDate>
<MaxTime>20:28</MaxTime>
<MaxDate>2012-01-22</MaxDate>
</Indoor>
<Outdoor>
<Value>4.9</Value>
<Min>-30.0</Min>
<Max>9.5</Max>
<MinTime>21:49</MinTime>
<MinDate>2012-02-12</MinDate>
<MaxTime>12:55</MaxTime>
<MaxDate>2012-02-18</MaxDate>
</Outdoor>
</Temperature>

Und hier der Teil des Scripts, welcher die Daten aus der XML ausliest und die Variablen in IPS befüllt.

function cdata($parser, $element_inhalt) {
global $varname;
global $position;

$var = "";

$element_inhalt = trim($element_inhalt);
if ($element_inhalt != "") {
   for ( $i = 0; $i < ($position - 1); $i++ ) {
      $var .= "$varname[$i]_";
   }
   $var .= $varname[$i];

   switch (substr($var, -4, 4)) {
      case "DATE":
         SetValueString($var, $element_inhalt);
         break;
      case "TIME":
         SetValueString($var, $element_inhalt);
         break;
      case "ENCY":
         SetValueString($var, $element_inhalt);
         break;
      case "CAST":
         SetValueString($var, $element_inhalt);
         break;
      case "TEXT":
         SetValueString($var, $element_inhalt);
         break;
      default:
         SetValueFloat($var, doubleval($element_inhalt));
   }
}

Leider bin ich ein php noob und habe keinen richtigen Ansatz was ich wo ändern müsste. Vielleicht können die Scriptprofis hier im Forum mir ein wenig auf die Sprünge helfen? :smiley:

Danke maDDe …

Hallo
IPS_GetVariableIDByName(„NAME“,ParentID) liefert dir die VariablenID
mit der du dann die Variablen setzen kannst.

Hi,

danke 1007 für den Tipp. Ich habe mein Script wie folgt angepasst und es funtkioniert.

switch (substr($var, -4, 4)) {
      case "DATE":
         $id = IPS_GetVariableIDByName($var,59014 /*[Wetter\Wetterstation\WS2300]*/);
         SetValueString($id, $element_inhalt);
         break;
      case "TIME":
	      $id = IPS_GetVariableIDByName($var,59014 /*[Wetter\Wetterstation\WS2300]*/);
         SetValueString($id, $element_inhalt);
         break;
      case "ENCY":
         $id = IPS_GetVariableIDByName($var,59014 /*[Wetter\Wetterstation\WS2300]*/);
         SetValueString($id, $element_inhalt);
         break;
      case "CAST":
	      $id = IPS_GetVariableIDByName($var,59014 /*[Wetter\Wetterstation\WS2300]*/);
         SetValueString($id, $element_inhalt);
         break;
      case "TEXT":
         $id = IPS_GetVariableIDByName($var,59014 /*[Wetter\Wetterstation\WS2300]*/);
         SetValueString($id, $element_inhalt);
         break;
      default:
         $id = IPS_GetVariableIDByName($var,59014 /*[Wetter\Wetterstation\WS2300]*/);
         SetValueFloat($id, doubleval($element_inhalt));