Seite 1 von 1

"LOWBAT" Nachrichten schicken

Verfasst: 6. Mär 2016 17:12
von Cyrelian
Hallo zusammen,

nachdem ich nun einige Geräte habe die batteriebetrieben sind, wollte ich mir bei niedrigem Batteriestand eine Nachricht via Pushover, Telegram oder WhatsApp schicken.
Habt jemand von Euch das schon realisiert? Würde mich brennend interessieren wie :D .
Ich dachte da an sowas:

Code: Alles auswählen

then
	val EGLowBattery = gSysBattery?.members.filter(Battery| Battery.lowbat == 1)
Habs aber noch nicht getestet.

CYA
Cyrelian

Re: "LOWBAT" Nachrichten schicken

Verfasst: 7. Mär 2016 09:27
von seppy
Hi,

ich habe angefangen eine Rule dafür zu bauen, bin aber bis heute noch nicht fertig geworden. So sehen meine ersten Versuche dazu aus:

Code: Alles auswählen

var String msg = null

rule "Cron_BatteryCheck"
when
	Time cron  "0 0 0/5 * * ?"
then
	
	logInfo("HomeBox.SystemRules:Cron_BatteryCheck", "Starte Batterie Check")
	gSysBatteryState?.members.forEach[t | 
		if (t.state == true){
			msg = msg + t.name + " " + t.state.toString()
		}
		logInfo("HomeBox.SystemRules:Cron_BatteryCheck", t.name + " " + t.state)
	]
	if (msg != null){
		executeCommandLine("/opt/yowsup/yowsup-cli@@demos@@-c@@/opt/yowsup/homebox.config@@-s@@XXXX@@HomeBox Batteriewarnung: Die folgenden Devices melden einen schwachen Batteriestand: " + msg + "")
		msg = null
	}
end

In der Systemgruppe "gSysBatteryState" sind bei mir alle Batteriezustands-Parameter der Devices.

Grüße,
Seppy

Re: "LOWBAT" Nachrichten schicken

Verfasst: 7. Mär 2016 19:17
von Cyrelian
Hi Seppy,

danke für die schnelle Rückmeldung. Habs gerade mal nachgebaut...geht :D . Bei mir steht jetzt auch bei den neuen Kontakten "false"

CU
Cyrelian

Re: "LOWBAT" Nachrichten schicken

Verfasst: 2. Jan 2017 16:54
von Cyrelian
Hi Seppy,

bei mir schein innerhalb der Rule der erste IF Teil if (battery.state == true) nicht zu klappen. Fehler gibt´s keine in Log :?
Auch die Änderung der Abfrage ergab nichts.

Code: Alles auswählen

rule "Batterie Check (cron)"
when
	//Time cron  "0 0 0/24 * * ?"
	//Time cron "0 0 15 * * ?"
	Time cron  "0/30 * * * * ?"
then
   logInfo("SystemRules:Batterie Check (cron)","Starte Batterie Check")
   gSysBattery?.members.forEach[battery | 
      if (battery.state == true){
         BatteryStateMsg = BatteryStateMsg + battery.name + " " + battery.state.toString()
      }
      //logInfo("SystemRules:Batterie Check (cron)", battery.name + " " + battery.state)
      logInfo("SystemRules:Batterie Check (cron)", BatteryStateMsg)
   ]
   if (BatteryStateMsg != null){
      pushover	("Die folgenden Devices melden einen schwachen Batteriestand: " + BatteryStateMsg + "")
      BatteryStateMsg = null
   }
end


Bei mir ist die "BatteryStateMsg" immer "null". Wobei wenn ich über die Rest API schaue, siehts so aus:

Code: Alles auswählen

<type>StringItem</type>
<name>GarageTorsensorBattery</name>
<state>true</state>
<link>
http://192.x.x.x:8080/rest/items/GarageTorsensorBattery
</link>
CYA
Cyrelian

Re: "LOWBAT" Nachrichten schicken

Verfasst: 2. Jan 2017 18:21
von seppy
Hi,

so sieht meine Regel inzwischen aus. So funktioniert das bei mir (msg ist eine Variable vom Typ String):

Code: Alles auswählen

gSysBatteryState?.members.forEach[t | 
		if (t.state.toString() == "true"){
			if (msg == null){
				msg = transform("MAP","devices.map",t.name)  + "\n"
			} else {
				msg = msg + transform("MAP","devices.map",t.name) + "\n"	
			}
		}
		logInfo("HomeBox.SystemRules:Cron_BatteryCheck", t.name + " " + t.state)
	]
	if (msg != null){
		pushover("Batteriewarnung für die Devices:\n" + msg,1)
		msg = null
	}

Re: "LOWBAT" Nachrichten schicken

Verfasst: 2. Jan 2017 20:48
von Cyrelian
Hi Seppy,

sehr NICE.

Code: Alles auswählen

state.toString()
.....war der Zaubercode :D

THX
Cyrelian