Ich habe mal ein kleines Script geschrieben welches die Signalstärke aller Aktoren (in diesem Beispiel mit Eaton xComfort getestet) in einer Tabelle ablegt welche über eine html Box im WF oder ein Memo Feld im Dashboard ausgegeben werden kann.
Es ist nur eine Variable für die html Box anzulegen.
Wenn die Signalstärke eines Aktors unter 40% liegt wird diese Rot hinterlegt.
<?
################# Script zur Ausgabe der Signalstärke von Aktoren ##############
$id_html_box = 22998 /*[Daten Mobile Clients\Infos\Empfangsqualität\html_box]*/ ;
$search = 'Signal Quality'; //Bezeichnung der Signalstärke des Aktors
$fiter_1 = 'xComfort'; //bei diesem Wert nichts ausgeben
################################################################################
$ids = IPS_GetObjectList();
$signal_qality_arr = array();
foreach ($ids as $id)
{
$name = IPS_GetName($id);
if(stristr($search, $name))
{
$id_parent_1 = IPS_GetParent($id);
$name_1 = IPS_GetName($id_parent_1);
$id_parent_2 = IPS_GetParent($id_parent_1);
$name_2 = IPS_GetName($id_parent_2);
$id_parent_3 = IPS_GetParent($id_parent_2);
$name_3 = IPS_GetName($id_parent_3);
if(stristr($name_1, $fiter_1) === FALSE)
{
$signal_qality_arr[] = GetValueInteger($id).'|'.$id.'|'.$name_1.'|'.$name_2.'|'.$name_3;
}
else
{
//Nichts ausgeben
}
}
}
sort($signal_qality_arr);
$html= '<style type="text/css">table.sigqal { width: 100%; border-collapse: true;} table.sigqal td';
$html.='{ border: 1px solid #444455; }</style>';
$html.='<table class="sigqal"><tr> ';
$html.='</td></tr><tr><td>';
$html.='Signalstärke<td>ID<td>Aktor<td>Pfad<td>Pfad';
$farbe1 = "<td style='background: #555000;' colspan='1'>";
$farbe2 = "<td style='background: #800000;' colspan='1'>";
foreach ($signal_qality_arr as $value)
{
$html_box = explode("|", $value);
if($html_box[0] < 40)
{
$farbe2 = "<td style='background: #800000;' colspan='1'>";
}
else
{
$farbe2 = "<td style='background: #100000;' colspan='1'>";
}
$html.="<tr>";
$html.="$farbe2 $html_box[0]%";
$html.="$farbe1 $html_box[1]";
$html.="$farbe1 $html_box[2]";
$html.="$farbe1 $html_box[3]";
$html.="$farbe1 $html_box[4]";
$html.="</tr>";
$html.="<tr>";
}
SetValueString($id_html_box, $html);
?>
Sven
4. März 2012 um 17:45
2
das Script kam genau rechtzeitig. Ich wollte gerade anfangen mir ein Script zu schreiben um die Xcomfort Batteriestände anzuzeigen. Dein Script kurz angepasst und schon lief es problemlos.
Dank
Prinzipiell kann es für alle Werte eines Aktors genutzt werden.
Hallo,
kann man das auch für die Homematic benutzen, wenn ja, was muss ich ändern ?
Danke und Grüsse
Thomas
Da ist das etwas schwerer, geht aber auch:
Was ist die $id_html_box variable, Ich kann nicht herausfinden was das ist oder wo ich das setzen.
Vielleicht kannst du mir dabei helfen.
Danke
Albert
Es ist nur eine Variable für die html Box anzulegen.
Das ist eine Stringvariable mit dem Profil html Box, welche dann im WebFront die Tabelle anzeigt, diese mußt Du einmal anlegen und die entsprechende ID in das Script eintragen.
Danke, ich habe es gefunden, durch ein variable zu machen.
Ins Deutsch es ist manchmal sehr schwierig zu verstehen was man machen soll.
Ron
21. Mai 2012 um 20:43
9
Hallo wie muss ich das machen :
Es ist nur eine Variable für die html Box anzulegen. ???
Ron
am Besten sich zunächst mit Grundlagen vertraut machen, z.B. hier: Konzepte: IP-Symcon :: Automatisierungssoftware
Wenn ich das für die Batterie einstelle ($search = ‚Battery‘ dann ist die niedrigsten Wert am Ende der Tabelle, ohne Farbe.
Was sollte hier anders eingestellt werden?
Albert
Ich schau mir das mal heute abend an.
Bin schon etwas müde, hier der wichtigste Teil. Wenn Du nicht weiterkommst einfach melden.
foreach ($ids as $id)
{
$name = IPS_GetName($id); //Name des aktuellen Objektes
if(stristr($search, $name)) //entspricht der Objektname dem des Suchfilters?
{
$id_aktor = IPS_GetParent($id);
$name_aktor = IPS_GetName($id_aktor);
$id_kategorie_1 = IPS_GetParent($id_aktor);
$name_kategorie_1 = IPS_GetName($id_kategorie_1);
$id_kategorie_2 = IPS_GetParent($id_kategorie_1);
$name_kategorie_2 = IPS_GetName($id_kategorie_2);
$id_gateway = IPS_GetInstance($id_aktor)['ConnectionID'];
$name_gateway = IPS_GetName($id_gateway);
if(stristr($name_aktor, $modul) === FALSE)
{
$wert_search = GetValueInteger($id);
if($wert_search <100) $wert_search = '0'.$wert_search;
$arr[] = $wert_search.' | '.$id.'|'.$name_aktor.'|'.$name_kategorie_1.'|'.$name_kategorie_2.'|'.$name_gateway;
}
else
{
//Nichts ausgeben
}
}
}
Farbwerte entsprechend anpassen.
Es funktioniert nicht, ich bekomme eine Fehlermeldung über die ConnectionID und $modul. Wo sollten sie angegeben werden?
Albert
Hallon Albert,
ich habe für Dich natürlich einiges im Script angepasst. Ich kenne Deine PHP Kenntnisse ja nicht.
$modul = ‚xComfort‘; (war vorher fiter_1)
Und was mit der ConnectionID?
Ich habe kein PHP kenntnise, ich teste und versuche ob es funktioniert
Albert
Ich denke am Wochenende komme ich dazu das ganze Script anzupassen, werde versuchen gleich noch FS20 mit einzubinden.
################ Script zur Ausgabe der Batteriestärke von Aktoren #############
$id_html_box = 23271 /*[WebFront/iFront\Info&Verwaltung\Infos\Empfangsqualität\Signalstärke der Aktoren]*/ ;
$search = 'Battery'; //Bezeichnung der Batteriestärke des Aktors
$search_2 = 'Batterie'; //Bezeichnung der Batteriestärke des Aktors
$modul = 'xComfort'; //Name des Moduls
$modul_2 = 'HMS'; //Name des Moduls
################################################################################
$ids = IPS_GetObjectList();
$arr = array();
foreach ($ids as $id)
{
$name = IPS_GetName($id); //Name des aktuellen Objektes
if( stristr($search, $name) ) //entspricht der Objektname dem des Suchfilters?
{
$id_aktor = IPS_GetParent($id);
$name_aktor = IPS_GetName($id_aktor);
$id_kategorie_1 = IPS_GetParent($id_aktor);
$name_kategorie_1 = IPS_GetName($id_kategorie_1);
$id_kategorie_2 = IPS_GetParent($id_kategorie_1);
$name_kategorie_2 = IPS_GetName($id_kategorie_2);
$id_gateway = IPS_GetInstanceParentID($id_aktor);
$name_gateway = IPS_GetName($id_gateway);
if(stristr($name_aktor, $modul) === FALSE )
{
$wert_search = GetValueInteger($id);
if($wert_search <100) $wert_search = '0'.$wert_search;
$arr[] = $wert_search.' | '.$id.'|'.$name_aktor.'|'.$name_kategorie_1.'|'.$name_kategorie_2.'|'.$name_gateway;
}
else
{
//Nichts ausgeben
}
}
}
foreach ($ids as $id)
{
$name = IPS_GetName($id); //Name des aktuellen Objektes
if( stristr($search_2, $name) ) //entspricht der Objektname dem des Suchfilters?
{
$id_aktor = IPS_GetParent($id);
$name_aktor = IPS_GetName($id_aktor);
$id_kategorie_1 = IPS_GetParent($id_aktor);
$name_kategorie_1 = IPS_GetName($id_kategorie_1);
$id_kategorie_2 = IPS_GetParent($id_kategorie_1);
$name_kategorie_2 = IPS_GetName($id_kategorie_2);
$id_gateway = IPS_GetInstance($id_aktor)['ConnectionID'];
$name_gateway = IPS_GetName($id_gateway);
if(stristr($name_aktor, $modul_2) === FALSE )
{
$wert_search = GetValueBoolean($id);
if($wert_search)
{
$wert_search = 0;
}
else
{
$wert_search = 100;
}
$arr[] = $wert_search.' | '.$id.'|'.$name_aktor.'|'.$name_kategorie_1.'|'.$name_kategorie_2.'|'.$name_gateway;
}
else
{
//Nichts ausgeben
}
}
}
sort($arr);
$html= '<style type="text/css">table.sigqal { width: 100%; border-collapse: true;} table.sigqal td';
$html.='{ border: 1px solid #444455; }</style>';
$html.='<table class="sigqal"><tr> ';
$html.='</td></tr><tr><td>';
$html.='Signalstärke<td>ID<td>Aktor<td>Pfad<td>Pfad<td>Gateway';
$farbe1 = "<td style='background: #333333;' colspan='1'>";
$farbe2 = "<td style='background: #800000;' colspan='1'>";
$empfang_025 = 0;
$empfang_050 = 0;
$empfang_075 = 0;
foreach ($arr as $value)
{
$html_box = explode("|", $value);
if($html_box[0] < 26)
{
$farbe2 = "<td style='background: #800000;' colspan='1'>";
}
elseif($html_box[0] < 76)
{
$farbe2 = "<td style='background: #FFB200;' colspan='1'>";
}
else
{
$farbe2 = "<td style='background: #00B233;' colspan='1'>";
}
$html.="<tr>";
$html.="$farbe2 $html_box[0]%";
$html.="$farbe1 $html_box[1]";
$html.="$farbe1 $html_box[2]";
$html.="$farbe1 $html_box[3]";
$html.="$farbe1 $html_box[4]";
$html.="$farbe1 $html_box[5]";
$html.="</tr>";
$html.="<tr>";
}
SetValueString($id_html_box, $html);
Wenn Du FS20 nicht brauchst einfach die zweite foreach Schleife löschen.