Statusabfrage der Splitter und I/O Module

Hallo,

für mein Dashboard möchte ich eine Statusabfrage für meine Splitter, bzw. I/O Module machen. Ich möchte anzeigen, wenn eines der Module keine Verbindung mehr zu IPS hat.

Im Objektbaum wird ja bei einem Problem mit diesen Modulen ein rotes Ausrufezeichen dargestellt. Gibt es eine Möglichkeit das irgendwie in eine Boolesche variable zu schreiben oder gibt es einen anderen Weg?

Gruss,

wupperi

Wenn man im SDK nachsieht eigentlich ganz einfach ;):

<?php
$codes = array(100 => "basic status",
               101 => "module is being created",
               102 => "module created and running",
               103 => "module is being deleted",
               104 => "module is not beeing used",
               200 => "default errorcode",
               201 => "instance could not be created");
                    
$instanceIDs = IPS_GetInstanceList();
foreach ($instanceIDs as $instanceID)
{
    $inst = IPS_GetInstance($instanceID);
    echo $instanceID." (".IPS_GetLocation($instanceID)."): ".$codes[$inst['InstanceStatus']]."
";
}
?>

Getestet mit der 2.1, sollte für die 2.0 aber nicht anders sein.

Danke, bin auf der 2.1 aber was das Thema SDK und wirkliche Programmierung angeht eher weniger bewandert. Insofern würde auch ein nachsehen im SDK wenig bringen :rolleyes:

Aber ich versuchs mal. Lerne ja gerne mit Hilfestellung dazu.

Hmm…komme natürlich nicht klar.
Ich verstehe was das skript macht, aber ich kapiere die Syntax nicht, wie der einzelne Status zu der jeweiligen Instanz ausgewertet wird.

Ich verstehe: Die foreach schleife durchläuft alle Module aus IPS_GetInstanceList. Das muss ich bei mir ersetzen durch statische Variablen IDs:


$FHZ_Ethernet = 25815 /*[FHZ Ethernet Gartenhaus #25815]*/;
$FHZ_USB_Keller = 48907 /*[FHZ USB Keller #48907]*/;
$ZW_Gateway = 30997 /*[Z-Wave Gateway]*/;
$TMEX = 38194 /*[TMEX]*/;

Aber durch welchen Befehl bekomme ich jetzt den status von z.B. $FHZ_Ethernet?

Und dann brauche ich ja noch eine Bedingung, d.h. wenn $code = 200 dann boolsche variable auf false, wenn nicht auf true.

Sorry, kann halt kein PHP…

Kann mir niemand ein bisschen auf die Sprünge helfen???


$codes = array(100 => "basic status",
               101 => "module is being created",
               102 => "module created and running",
               103 => "module is being deleted",
               104 => "module is not beeing used",
               200 => "default errorcode",
               201 => "instance could not be created");

$instanceID = 12345; //Client Socket von FHZ1300 LAN

$inst = IPS_GetInstance($instanceID);

if ($inst['InstanceStatus'] == 102)
{
		//alles ok
		return;
}

//was anderes...

So denke ich.:wink:

Das mit dem SDK war ja für normale User auch nicht ernst gemeint. Daher der Smiley. Fakt ist immer: Alles, was die Konsole machen kann, kann man auch per PHP machen.
Mal zur Wegfindung: Mit Funktionen wie IPS_GetObject, IPS_GetInstance oder IPS_GetVariable bekommt man immer eine ganze Menge an Informationen, die man sich mit print_r() ausgeben lassen kann. Da nur Instanzen fehlerhaft sein können habe ich mit IPS_GetInstance mal nachgesehen und unter InstanceStatus einen Zahlenwert ohne Beschreibung gefunden. Wenn man sowas sieht deutet es für einen erfahrenen Programmierer auf Konstanten hin. Die findet man bei IPS im SDK. Da habe ich dann die Zahlen und Beschreibungen aus dem codes-Array her genommen.

<?php
// Paare immer Instanz-ID => Variablen-ID
$IDPairs = array(12345 => 12323, 45345 => 24323, 23423 => 34323);
foreach ($IDPairs as $instanceID => $variableID)
{
    $instanceData = IPS_GetInstance($instanceID);
    $instanceStatus = $instanceData['InstanceStatus'];
    SetValue($variableID, ($instanceStatus != 200));
}
?>

Sollte sein, was Du suchst.

Prima, geht. Dank Euch.
Ich habs jetzt so gelöst:


$FHZ_Ethernet = 28862 /*[I/O FHZ Ethernet Gartenhaus #28862]*/;
$FHZ_USB_Keller = 22779 /*[I/O FHZ USB Keller #22779]*/;
$ZW_Gateway = 56647 /*[Serial Port]*/;
$TMEX = 38194 /*[TMEX]*/;


$codes = array(100 => "basic status",
               101 => "module is being created",
               102 => "module created and running",
               103 => "module is being deleted",
               104 => "module is not beeing used",
               200 => "default errorcode",
               201 => "instance could not be created");



$inst = IPS_GetInstance($FHZ_Ethernet);

if ($inst['InstanceStatus'] == 200){
setvalueboolean (30338 /*[I/O FHZ Ethernet Gartenhaus #28862\FHZ_Ethernet_fault]*/, true);
return;
}

$inst = IPS_GetInstance($FHZ_USB_Keller);

if ($inst['InstanceStatus'] == 200){
setvalueboolean (14592 /*[I/O FHZ USB Keller #22779\FHZ_USB_Fault]*/, true);
return;
}

$inst = IPS_GetInstance($ZW_Gateway);

if ($inst['InstanceStatus'] == 200){
setvalueboolean (57973 /*[Serial Port\Z-Wave_serial_Fault]*/, true);
return;
}

$inst = IPS_GetInstance($TMEX);

if ($inst['InstanceStatus'] == 200){
setvalueboolean (29254 /*[TMEX\TMEX_Fault]*/, true);
return;
}

?>

Update. Ich muss die Stati auch wieder zurücksetzen, falls das Gerät wieder da ist:


<?php

$FHZ_Ethernet = 28862 /*[I/O FHZ Ethernet Gartenhaus #28862]*/;
$FHZ_USB_Keller = 22779 /*[I/O FHZ USB Keller #22779]*/;
$ZW_Gateway = 56647 /*[Serial Port]*/;
$TMEX = 38194 /*[TMEX]*/;


$codes = array(100 => "basic status",
               101 => "module is being created",
               102 => "module created and running",
               103 => "module is being deleted",
               104 => "module is not beeing used",
               200 => "default errorcode",
               201 => "instance could not be created");



$inst = IPS_GetInstance($FHZ_Ethernet);

if ($inst['InstanceStatus'] == 200){
setvalueboolean (30338 /*[I/O FHZ Ethernet Gartenhaus #28862\FHZ_Ethernet_fault]*/, true);
return;
}
setvalueboolean (30338 /*[I/O FHZ Ethernet Gartenhaus #28862\FHZ_Ethernet_fault]*/, false);


$inst = IPS_GetInstance($FHZ_USB_Keller);

if ($inst['InstanceStatus'] == 200){
setvalueboolean (14592 /*[I/O FHZ USB Keller #22779\FHZ_USB_Fault]*/, true);
return;
}
setvalueboolean (14592 /*[I/O FHZ USB Keller #22779\FHZ_USB_Fault]*/, false);
$inst = IPS_GetInstance($ZW_Gateway);

if ($inst['InstanceStatus'] == 200){
setvalueboolean (57973 /*[Serial Port\Z-Wave_serial_Fault]*/, true);
return;
}
setvalueboolean (57973 /*[Serial Port\Z-Wave_serial_Fault]*/, false);
$inst = IPS_GetInstance($TMEX);

if ($inst['InstanceStatus'] == 200){
setvalueboolean (29254 /*[TMEX\TMEX_Fault]*/, true);
return;
}
setvalueboolean (29254 /*[TMEX\TMEX_Fault]*/, false);
?>


Hallo Horst,

gibt es auch noch andere Codes?
Meine Codatex FTDI Instanz ist manchmal geschlossen und ich würde dies gerne über dieses tolle Skript erkennen.

Danke,
Stephan

IPS_GetInstance: IP-Symcon :: Automatisierungssoftware