Hi ich habe mich mal versucht ein Script zu schreiben, was die Batterie Variable versteckt, wenn die Batterie ok ist und Sie anzeigt, wenn die Batterie leer ist.
Dann kann man einstellen, ob man eine Email und / oder Push Benachrichtigung bekommen will.
Handhabung ist sehr einfach ! Ein neues Script erstellen, alles löschen in dem Script und den kommenden Inhalt einfach rein kopieren und 1 x ausführen.
<?
$push=false; // Pushversand: aktiviert = true, deaktiviert = false
$email=true; // Emailversand: aktiviert = true, deaktiviert = false
/// AB hier nichts mehr ändern !!!
// Webfront und SMTP ID herrausfinden
foreach(IPS_GetInstanceList ( ) as $m_id)// Durchsucht alle Instanzen und gibt die INstanzid an $i_id weiter
{
$typ=IPS_GetInstance($m_id)['ModuleInfo']['ModuleName']; // Fragt die Instanzen nach den Modulnamen ab....
if ($typ=="SMTP") $smtp_id=$m_id; // Wenn die INstanz den Modulnamen "SMTP" hat, dann schreibe die ID in $smtp_id
if ($typ=="WebFront Configurator") $wf_id=$m_id;// Wenn die INstanz den Modulnamen "WebFront Configurator" hat, dann schreibe die ID in $WF_ID
}
$id=@$_IPS['VARIABLE']; // Welche Variable hat das Script ausgelöst
$instanz_id = IPS_GetParent($id);// ID des übergeordneten Objekt (Instanzname) herausfinden
$raum=IPS_GetParent($instanz_id);// ID des übergeordneten Objekt (Raum) herausfinden
$instanz_name=IPS_GetObject($instanz_id)['ObjectName']; // Name der Instanz holen
$raum_name=IPS_GetObject($raum)['ObjectName']; // Name des Raumes holen
$status = @GetValue($id); // Status der Variable holen
$vtime=VarAktTime($id);
if ($vtime <= 1)
{
IF (@IPS_GetObjectIDByIdent("LOWBAT", $instanz_id)==true) // Wenn es eine LOWBAT Variable ist, dann
{
if ($status== false)$meldung2="ist wieder ok!"; // Meldung wenn die Batterie wieder OK ist
if ($status== false)IPS_SetHidden($id, true); // Setzt die Variable auf nicht sichtbar
if ($status== true) IPS_SetHidden($id, false); // Setzt die Variable auf sichtbar
if ($status== true) $meldung2="ist leer, bitte wechsel die Batterien !"; // Meldung wenn die Batterie leer ist
if (($status ==false) or ($status ==true))
{
$betreff="miHome"; // Betreff der Push Nachricht
@$meldung="Die Batterie vom Gerät ".$instanz_name." ".$meldung2.""; // Meldung der Pushnachricht
if ($push ==true) WFC_PushNotification($wf_id , $betreff, $meldung, "Speaker", 0); // Senden der Push Nachricht
if ($email==true )SMTP_SendMail($smtp_id, $betreff, $meldung); // Senden der Email Nachricht, wenn aktiviert ist !
}// Ende IF Status
}// Ende LOWBAT
IF (@IPS_GetObjectIDByIdent("BATTERY_STATE", $instanz_id)==true) // Wenn es eine STATE Variable ist, dann schreibe die ID in $id2
{
if ($status >= 2.6)IPS_SetHidden($id, true); // Setzt die Variable auf sichtbar
//if ($status >= 2.6) $meldung2="ist wieder ok!"; // Meldung wenn die Batterie wieder OK ist
if ($status <= 2.0) $meldung2="ist leer, bitte wechsel die Batterien !"; // Meldung wenn die Batterie leer ist
if ($status <= 2.0)IPS_SetHidden($id, false); // Setzt die Variable auf sichtbar
if ($status <=2.0)
{
$betreff="miHome"; // Betreff der Push Nachricht
@$meldung="Die Batterie vom Gerät ".$instanz_name." ".$meldung2.""; // Meldung der Pushnachricht
if ($push ==true) WFC_PushNotification($wf_id , $betreff, $meldung, "Speaker", 0); // Senden der Push Nachricht
if ($email==true )SMTP_SendMail($smtp_id, $betreff, $meldung); // Senden der Email Nachricht, wenn aktiviert ist !
}// Ende IF Status
}// Ende BATTERY_STATE
}// Ende IF vtime
//*********************** Ereignis generieren ******************
$scriptid=$_IPS['SELF'] ;
// AB hier nichts mehr ändern !!!
# Dieses Script durschsucht alle Instanzen nach dem Wort Fenster, und hängt das Script PUSH als 2 Ereignisse an die Variable Zustand...
foreach(IPS_GetInstanceList() as $i_id) // Alle INstanzen dursuchen
{
IF (@IPS_GetObjectIDByIdent("LOWBAT", $i_id)==true) // Wenn es eine STATE Variable ist, dann schreibe die ID in $id2
{
$id2=@IPS_GetObjectIDByIdent("LOWBAT", $i_id);
$iid=IPS_GetParent($id2);
$iname=IPS_GetName($iid);
GetOrCreateEvent("Batterie $iname", $id2,$scriptid);
}// Ende von IF
IF (@IPS_GetObjectIDByIdent("BATTERY_STATE", $i_id)==true) // Wenn es eine STATE Variable ist, dann schreibe die ID in $id2
{
$id2=@IPS_GetObjectIDByIdent("BATTERY_STATE", $i_id);
$iid=IPS_GetParent($id2);
$iname=IPS_GetName($iid);
GetOrCreateEvent("Batterie $iname", $id2,$scriptid);
}// Ende von IF
} // Ender der Schleife
function GetOrCreateEvent($name, $vid, $scriptid) // erstellt ein Event, wenn es noch nicht exestiert
// Erstellt ein Event, Wert 1 = Name , Wert 2 ist die VariableID, wo das Event angelegt werden soll, Wert 3 ist das Script was das Event auslösen soll
{
$ObjId = @IPS_GetObjectIDByName($name , $scriptid);
if ($ObjId === false)
{
$ObjId = IPS_CreateEvent(0);
IPS_SetEventTrigger($ObjId, 1, $vid); // 0 Bei Variablenaktualisierung, 1 Bei Variablenänderung,2 Bei Grenzüberschreitung. Grenzwert wird über IPS_SetEventTriggerValue festgelegt, 3 Bei Grenzunterschreitung, 4 Bei bestimmtem Wert
IPS_SetName($ObjId, $name);
IPS_SetParent($ObjId, $scriptid);//Ereignis zuordnen
IPS_SetEventActive($ObjId, true); //Ereignis aktivieren
}
return $ObjId;
} //Ende der Funktion GetOrCreateScript
function VarAktTime($varID)
{
$var = @IPS_GetVariable($varID)['VariableChanged'];
$aktule_zeit=time(); // Aktuelle Zeit in Unixzeit ausgeben
$unterschied=$aktule_zeit - $var; // Differrenz von aktueller Uhrzeit und Variabelupdate in Unixzeit
$uzeit=date("d", $unterschied); //Unixzeit in Minuten umrechnen
return ($uzeit);
}// Ende Funktion VarAktTime
?>
Das Script erstellt automatisch die Notwendigen Ereignisse (Events) und verknüpft Sie mit diesem Script…
Bis jetzt habe ich nur die HM Batterie Variablen implementiert, wer andere Systeme integriert haben möchte kann mir gerne eine PM schicken