Batteriestatus

Hallo,

ich habe nun zunehmend Homematic Komponenten im Einsatz. Vor allem die Tüf/Fensterkontakte und die Drehgriffsensoren.

Auf Kanal 0 der Instanzen bekomme ich mehrere Variablen, unter anderem eine LOWBAT vom Typ Boolean. Diese steht auf „False“.

Ich denke dies soll heissen, die Batterie ist ok. Wenn ich also Benachrichtigungen für niedrige Batteriestände generieren möchte muss ich diese Variable überwachen.

Habe ich das so richtig verstanden?
Wie macht Ihr das mit den Batteriemeldungen?

Gruß
Christian

Dazu gibt es ein fertiges Scriptim Forum.

Ich habe eine etwas andere Lösung gewählt und habe im Webfront für alle Batteriestati einen Link hinterlegt, der scriptgesteuert die Links unsichtbar macht, wenn die Batterie ok ist. So zeigt er mir nur die leeren Batterien oder einen Dummylink mit „Alle Batterien ok“ an…

Grüße

Frank

Noch eine Lösung zur Überwachung von LOWBAT, ERROR und UNREACH:

Voraussetzung: Eine Instanz für Kanal 0 für die Homematic Geräte ist angelegt

  1. Neues Skript anlegen und Code kopieren
  2. Ganz unten im Skript ergänzen, was passieren soll (ich lass mir z.B. 'ne Mail schicken)
  3. Skript einmal ausführen (dabei wird für jede Variable ein Ereignis angelegt, welche das Skript triggert)

=> Wenn ihr neue Homematic Komponenten habt, einfach Skript einmal manuell aufrufen, die neuen Variablen werden erkannt und ein Ereignis dafür ergänzt. (kann man auch automatisch jede Nacht via timer event machen lassen)


<?
/*
Das nachfolgende Skript dienst zum erkennen von Hardwarestörungen bei Homematic & FS20
(schwache Batterie, nicht erreichbarkeit von Funkkomponenten, Error-Meldung).

Im ersten Teil wird für jeder zu überwachende Variable ein Ereignis angelegt. Dabei
reagiert das Ereignis bei Boolean Variablen auf TRUE (Batterie schwach) und bei Integer
Variablen auf Werte > 0. Beim ersten Ausführen des Skriptes wird in der Skriptkategorie
je Variable ein Ereignis angelegt.

Der Zweite Teil wird durchlaufen, wenn eines der Ereignise ausgelöst wird. Eine Meldung
wird erzeugt, welche gemailt oder per SMS geschickt werden kann. Oder ins LogFile. 

*/

/* Teil 1 */

//HIER ANPASSEN
$variables[1] = 'ERROR';         //Homematic - Fehler
$variables[2] = 'LOWBAT';        //Homemetic - Batterie schwach
$variables[3] = 'UNREACH';       //Homematic - Gerät nicht mehr erreichbar
$variables[4] = 'LowBatteryVar'; //FS20 Geräte - Batterie schwach


//Nachts wird geprüft, ob es neue relevante Variablen gibt. Falls ja wird ein Ereignis angelegt.
if (($IPS_SENDER=='TimerEvent') or ($IPS_SENDER=='Execute'))
{
	foreach(IPS_GetInstanceListByModuleType(3) as $id)
	//foreach(IPS_GetInstanceListByModuleID("{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}") as $id)
	{
		//echo IPS_GetName($id)."
";
	   //print_r (IPS_GetStatusVariableIdents($id));
	   
		foreach ($variables as $CurrentVarName)
		{
		   if(IPS_StatusVariableExists($id, $CurrentVarName))
			{
			   $var = IPS_GetStatusVariable($id, $CurrentVarName);
			   //echo ("  - ".$CurrentVarName."
");
			   //print_r ($var);
			   //Boolean Variablen
			   if($var['VariableType'] == 0)
			   {
			      //Ereignis zum Skriptaufrufen anlegen
			   	if(@IPS_GetEventIDByName('Event '.$var['VariableID'], $IPS_SELF) === false)
					{
                  $ereignis = IPS_CreateEvent(0);
                  IPS_SetEventTrigger($ereignis, 4, $var['VariableID']);
                  IPS_SetEventTriggerValue($ereignis, true);
                  IPS_SetEventTriggerSubsequentExecution($ereignis, false);
                  IPS_SetParent($ereignis, $IPS_SELF);
                  IPS_SetName($ereignis, 'Event '.$var['VariableID']);
						IPS_SetEventActive($ereignis, true);
					}
			   }
			   //Integer Variablen
			   if($var['VariableType'] == 1)
			   {
			      //Ereignis zum Skriptaufrufen anlegen
			   	if(@IPS_GetEventIDByName('Event '.$var['VariableID'], $IPS_SELF) === false)
					{
                  $ereignis = IPS_CreateEvent(0);
                  IPS_SetEventTrigger($ereignis, 2, $var['VariableID']);
                  IPS_SetEventTriggerValue($ereignis, 0);
                  IPS_SetEventTriggerSubsequentExecution($ereignis, false);
                  IPS_SetParent($ereignis, $IPS_SELF);
                  IPS_SetName($ereignis, 'Event '.$var['VariableID']);
						IPS_SetEventActive($ereignis, true);
					}
			   }
			}
		}
	}
}


/* Teil 2 */

//Wenn eine Variable ein Ereignis auslöst, wird die Message erzeugt und verschickt
if ($IPS_SENDER=='Variable') 
{
	$MSG = 'ISP Info: Variable '.IPS_GetLocation($IPS_VARIABLE).' hat den Wert <'.GetValue($IPS_VARIABLE).' ('.GetValueFormatted($IPS_VARIABLE).')>.';
	
	//##########################################
	// HIER NUN EINFÜGEN, WAS MIT DER NACHRICHT PASSIEREN SOLL, z.B. Mail
	SMTP_SendMail(<MailInstanzID>, 'IPS INFO', $MSG>;

	//##########################################
}
?>

Hallo,

vielen Dank für die Rückmeldung.
Vor allem derAnsatz von Smokey klingt interessant. Vielen Dank für das Script. Ich werde das spätestens amWE mal testen und Rückmeldung geben.

Gruß
Christian

Hi Smokey,

besten Dank, das Script funktioniert bei mir perfekt!

ich habs noch ein wenig ergänzt (es wird nun die Nummer der Variable mitversandt) weil ich mir sonst nen Wolf suche :-):


//Wenn eine Variable ein Ereignis auslöst, wird die Message erzeugt und verschickt
if ($IPS_SENDER=='Variable')
{
    $MSG = 'ISP Info: Variable '.$IPS_VARIABLE.' '.IPS_GetLocation($IPS_VARIABLE).' hat den Wert <'.GetValue($IPS_VARIABLE).' ('.GetValueFormatted($IPS_VARIABLE).')>.';

Sollte das nicht IPS INFO heissen in der Message ??? :confused:

Er hat vergessen es dazu zu schreiben : „Wer einen Schreibfehler findet, darf ihn behalten“.

Man darf halt nicht alles blind kopieren. :smiley:

Gruß
Bruno

War ja nur nen Hinweis…

jetzt ich such mir nen Wolf: ich schau nun zum 3. Mal hier rein und weis nicht was ihr meint???

:confused:

Hallo,

Sie meinten das:

$MSG*=*'ISP*Info:*Variable

Ich hab ISP statt IPS geschrieben! (Ist mir selbst noch gar nicht aufgefallen obwohl schon ein paar Maisl geschickt wurden, werd es mal korrigieren).

Hallo zusammen,
ich habe gestern bei einem Wandthermostat das erste Mal eine Batterie getauscht. Leider wechselt auch nach 24Std. in IPS die Variable lowbat nicht auf false zurück. Muss man das etwa manuell machen? Sagen die Geräte nicht Bescheid, wenn sie eine neue Batterie bekommen haben bzw. senden die keine regelmäßigen Batterie-Statusmeldungen?

LG, MrMusical

Hi zusammen,
bin mit Homematic noch ganz neu unterwegs und hab nur ein 3Fach Wechselschalterinterface (mit Batterie) sowie einen TFK in Betrieb.
Was meint ihr alle mit Kanal 0? Und bei meinen angelegten Homematicinstanzen find ich leider nix mit LowBat. Muss ich hier für jeden Aktor/Schalter, etc eine 2. Instanz (Kanal 0?) anlegen, und wenn ja, was muss ich genau machen?
Gruß
Kai

Ja, genau so. Du legst eine 2. Instanz an und vergibst manuell eine Adresse, ABC123456:0 - die automatische hat die Adresse ABC123456:1 - und Schwupps! alles da…

Viele Grüße
mcbelly

Jup, habs schon. Danke zusammen! :slight_smile:

Ich habe die Instanzen so auch angelegt und wenn ich in einer solchen Instanz auf übernehmen klicke werden die Variablen auch angelegt. Nach einem Neustart von IPS sind die Instanzen aber wieder leer. Weiss jemand warum?

Ich wundere mich gerade ein wenig. Der Kanal 0 wird doch schon ne ganze Weile vom Homematic Configurator automatisch gefunden und das kostet gerade mal einen Klick.

Müssen die Geräte evtl. erst wieder nach und nach zyklisch nach Hause (zu IPS) telefonieren damit der Status drin ist?

nee sollten nach dem Erstellen angelegt werden und bei bleiben die dann auch da…