Scripte laufen nicht mehr seit upgrafe auf V4.0

Dieses Script hier läuft nicht mehr, seit dem Upgrade:

<?
// Leistung aktuell
SetValueFloat(39675 /*[Scripte\Stromzähler Haus\Leistung aktuell temp]*/    ,hexdec($IPS_VALUE)/10);


CSCK_SetOpen(10649 /*[Client Socket SML Stromzähler Haus]*/  ,false);
IPS_ApplyChanges(10649 /*[Client Socket SML Stromzähler Haus]*/  );

?>

und ich weiß nicht warum. Laut Doku gibt es hier keine Änderung.

Magst du „läuft nicht“ etwas genauer erklären? Was genau läuft nicht?

Falls du auf Linux und Co. migriert bist, dann gibt es $IPS_SENDER nicht mehr. Das heißt seit ein paar Jahren $_IPS[‚SENDER‘] :smiley:

paresy

CSCK_SetOpen ist schon lange obsolut… nicht erst zur 4.0 :smiley:

Nimm mal IPS_SetProperty — IP-Symcon :: Automatisierungssoftware

Michael

Edit: Und ändere auch gleich mal $IPS_VALUE auf $_IPS[‚VALUE‘]

Danke für die schnelle Antwort!
In IPS wird das Script nicht final aufgeführt. „Das Script wurde als ‚fehlerhaft‘ markiert. Bitte beheben Sie alle Fehler!“

Danke für den Hinweis. Augenscheinlich hat es aber immer anstandslos funktioniert.
Ich habe es nun in:


<?
IPS_SetProperty(10649 /*[Client Socket SML Stromzähler Haus]*/, "Open", false); //I/O Instanz soll aktiviert sein.
IPS_ApplyChanges(10649 /*[Client Socket SML Stromzähler Haus]*/); //Neue Konfiguration übernehmen
?>

geändert. Funktioniert aber noch immer nicht. Analog funktioniert auch das „true“ nicht.

Das Resultat ist leider, das die Scripte mir die PHP Threads „verstopfen“. Und dann läuft hier gar nichts mehr. :frowning:

Welches Skript verursacht denn das Problem?

paresy

Also

<?
// Leistung aktuell
SetValueFloat(39675 /*[Scripte\Stromzähler Haus\Leistung aktuell temp]*/    ,hexdec($IPS_VALUE)/10);

IPS_SetProperty(10649 /*[Client Socket SML Stromzähler Haus]*/, "Open", false);
IPS_ApplyChanges(10649 /*[Client Socket SML Stromzähler Haus]*/  );

?>

wirft ein

Undefined variable: IPS_VALUE in [Scripte\Stromzähler Haus\Daten_parsen_Leistung aktuell] on line 3

und

<?
// Leistung aktuell
SetValueFloat(39675 /*[Scripte\Stromzähler Haus\Leistung aktuell temp]*/    ,hexdec($_IPS['VALUE'])/10);

IPS_SetProperty(10649 /*[Client Socket SML Stromzähler Haus]*/, "Open", false);
IPS_ApplyChanges(10649 /*[Client Socket SML Stromzähler Haus]*/  );

?>

ein

Undefined index: VALUE in [Scripte\Stromzähler Haus\Daten_parsen_Leistung aktuell] on line 3

MEIN FEHLER! Ich übergebe ja von einer Instanz …

Also … ich konnte es eingrenzen. Aber lösen konnte ich das Problem nicht.
Dieses Script läuft nicht durch:

<?

$eHZdata = array("1-0:0.0.0*255"    => 19662 , //Zählernummer
                 "1-0:2.8.1*255"    => 26252 , //kWh erwirtschaftet
                 "1-0:96.5.5*255"   => 26904 , //Status HEX
                 "0-0:96.1.255*255" => 24726 , //unbekannt
                 );

$string = explode("
", trim($_IPS['VALUE']));
print_r($string);

for($i = 0; $i < count($string); $i++)
{
   $id = strstr($string[$i], "(", true);
   $value = strstr($string[$i], "(");
   $data = substr(trim($value), 1, -1);
   if(strstr($data, "-"))
   {
       SetValue($eHZdata[$id], (string)$data);
    }
    else
    {
       SetValue($eHZdata[$id], (float)$data);
    }

}

IPS_SetProperty(21343 /*[Client Socket MOD Stromzähler Solar]*/, "Open", false); //I/O Instanz soll aktiviert sein.
IPS_ApplyChanges(21343 /*[Client Socket MOD Stromzähler Solar]*/ );

?>

und ich weiß nicht warum.

Und DAS ist dann das Resultat:


… läuft konsequent alle 3 Minuten, aber eben nicht durch.

Also hier noch mal eine Zusammenfassung. Ich möchte gerne zwei eHz (ein SML, ein MOD) auslesen. Hierzu gibt es jeweils eine I/O Instanz - Client Socket. SML wird alle 1 Minute gestartet. MOD alle 3 Minuten.
Die Scripte hierfür sehen sehr ähnlich aus:
SML

<?

IPS_SetProperty(10649 /*[Client Socket SML Stromzähler Haus]*/, "Open", true); //I/O Instanz soll aktiviert sein.
IPS_ApplyChanges(10649 /*[Client Socket SML Stromzähler Haus]*/); //Neue Konfiguration übernehmen

?>

MOD

<?

IPS_SetProperty(21343 /*[Client Socket MOD Stromzähler Solar]*/, "Open", true); //I/O Instanz soll aktiviert sein.
IPS_ApplyChanges(21343 /*[Client Socket MOD Stromzähler Solar]*/ );

?>

Danach folgen jeweils ein Cutter und eine Register Variable. Letztere startet dann jeweils ein Script, welches die empfangenen Daten in Variablen schreibt.
SML

<?
// Leistung aktuell
SetValueFloat(39675 /*[Scripte\Stromzähler Haus\Leistung aktuell temp]*/    ,hexdec($_IPS['VALUE'])/10);

IPS_SetProperty(10649 /*[Client Socket SML Stromzähler Haus]*/, "Open", false);
IPS_ApplyChanges(10649 /*[Client Socket SML Stromzähler Haus]*/  );

?>

MOD

<?

$eHZdata = array("1-0:0.0.0*255"    => 19662 , //Zählernummer
                 "1-0:2.8.1*255"    => 26252 , //kWh erwirtschaftet
                 "1-0:96.5.5*255"   => 26904 , //Status HEX
                 "0-0:96.1.255*255" => 24726 , //unbekannt
                 );

$string = explode("
", trim($_IPS['VALUE']));
print_r($string);

for($i = 0; $i < count($string); $i++)
{
   $id = strstr($string[$i], "(", true);
   $value = strstr($string[$i], "(");
   $data = substr(trim($value), 1, -1);
   if(strstr($data, "-"))
   {
       SetValue($eHZdata[$id], (string)$data);
    }
    else
    {
       SetValue($eHZdata[$id], (float)$data);
    }

}

IPS_SetProperty(21343 /*[Client Socket MOD Stromzähler Solar]*/, "Open", false); //I/O Instanz soll aktiviert sein.
IPS_ApplyChanges(21343 /*[Client Socket MOD Stromzähler Solar]*/ );

?>

Aus irgendeinem Grund laufen beide Konstrukte nicht mehr. Und das erst seit dem Upgrade auf V4.0.
Weiß jemand Rat bzw. hat eine Idee?

Ich vermute es gibt ein Problem, wenn du den Socket direkt aus dem Empfangsskript IPS_ApplyChanges aufrufst. Magst du mal testen, ob das Problem nicht besteht, wenn du diese Funktion deaktivierst oder in ein anderes Skript auslagerst?

paresy

Ja, ich mag … und ich habe auch schon getestet. Was soll ich sagen? Du hattest recht.
Genau das ist das Problem. Jetzt läuft es wieder anstandslos. Ist aber schon sehr komisch, oder?

Ist definitiv ein Fehler. Werde ich mir ansehen und hoffentlich auch zeitnah gelöst bekommen!

paresy