Zustand eines Gruppenmembers ausgeben

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Lycos
Beiträge: 27
Registriert: 30. Aug 2018 12:08
Answers: 0

Zustand eines Gruppenmembers ausgeben

Beitrag von Lycos »

Hallo zusammen,

ich möchte gerne eine Batterie Warnung ausgebn wenn ein Gerät dies meldet. Derzeit habe ich es gelöst indem ich für jedes Item eine eigene Rule geschrieben habe, was natürlich nicht so vernünftig ist, aber funktioniert.

Code: Alles auswählen

rule "Batteriewarnung 01"
when
	Item Bewegunsmelder_Flur_Batterie changed to ON
then
	sendBroadcastNotification("Batterie Bewegungsmelder Flur im 1 Stock leer!")
end
Nun gibt es ja eine saubere Lösung auch dafür die ich dann so gemacht habe:

Rule:

Code: Alles auswählen

rule "Test"
when 
	Item Licht_1_Stock changed
then
	val triggerList = Licht_1_Stock.members.sortBy[lastUpdate]
	val triggerItem = triggerList.last as SwitchItem
 	 	sendBroadcastNotification("Test " + triggerItem.label)
end
RRD4J:

Code: Alles auswählen

Strategies {
everyMinute : "0 * * * * ?"
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"
default = everyChange
}

Items {
Licht_1_Stock* : strategy = everyChange, restoreOnStartup
}
Items:

Code: Alles auswählen

Dimmer 	Licht_Wohnzimmer_1		"Licht Wohnzimmer 1"	<Light>	(Licht_1_Stock){cannel="innogysmarthome:ISD2:SMARTHOME06:xxxxx:dimmer"}
Dimmer 	Licht_Wohnzimmer_2		"Licht Wohnzimmer 2"	<Light>	(Licht_1_Stock)				{cannel="innogysmarthome:ISD2:SMARTHOME06:xxxxx:dimmer"}
Dimmer 	Licht_Wohnzimmer_3		"Licht Wohnzimmer 3"	<Light>	(Licht_1_Stock)				{cannel="innogysmarthome:ISD2:SMARTHOME06:xxxxx:dimmer"}

Das Problem ist nur das egal welches Item ich schalte ich immer die Nachricht für das Selbe bekomme. Also ich schalte 1 und bekomme die Nachricht das 3 geschaltet wurde.

LG


Benutzeravatar
udo1toni
Beiträge: 15243
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Zustand eines Gruppenmembers ausgeben

Beitrag von udo1toni »

Mit einer einigermaßen aktuellen Version von openHAB2 kommt man ohne Persistence aus, dafür gibt es den Trigger member of:

Code: Alles auswählen

rule meinerule
when
    Member of Licht_1_Stock_Batterie changed to ON
then
    logInfo("test","Meldung kam von {}",triggeringItem.name)
end
triggeringItem enthält immer das Item, welches die Rule getriggert hat (auch bei allen anderen Item-getriggerten Rules).
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Lycos
Beiträge: 27
Registriert: 30. Aug 2018 12:08
Answers: 0

Re: Zustand eines Gruppenmembers ausgeben

Beitrag von Lycos »

Vielen Dank für eure Hilfe!

@hr3

Ich habe schon so viel gelesen, aber mein Englisch und meine Programmierkenntnise sind für dieses Problem scheinbar zu schlecht.

@udo1toni

Ich benutze Version 2.3.0
Ich habe deine Rule getestet, aber wenn ich von "logInfo" auf das gewünschte "sendBroadcastNotification" umstelle bekomme ich nur "test" als Benachrichtigung am Handy.

LG

hr3
Beiträge: 210
Registriert: 23. Mai 2017 21:41
Answers: 0

Re: Zustand eines Gruppenmembers ausgeben

Beitrag von hr3 »

Code: Alles auswählen

rule "Test"
when 
	Member of Licht_1_Stock changed
then
	sendBroadcastNotification("Test " + triggerItem.name)
end
unterstellt, dass du in der Items-Datei einen Eintrag hast

Code: Alles auswählen

Group Licht_1_Stock
... bekomme ich nur "test" als Benachrichtigung am Handy.
Das kann wie auch immer nach deinem Beispiel nicht sein.

Lycos
Beiträge: 27
Registriert: 30. Aug 2018 12:08
Answers: 0

Re: Zustand eines Gruppenmembers ausgeben

Beitrag von Lycos »

@hr3

Ich habe folgendes in der .items stehen

Code: Alles auswählen

Group:Switch:OR(ON, OFF) Licht_1_Stock		"Eingeschaltet [(%d)]"		<Light>
Habe ich die Gruppe falsch erstellt für diese Aufgabe? Ich nutze das so als Anzeige wie viele Lichter gerade eingeschaltet sind und um sie gleich von dieser Anzeige aus dann auszuschalten.

Benutzeravatar
udo1toni
Beiträge: 15243
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Zustand eines Gruppenmembers ausgeben

Beitrag von udo1toni »

Ich bin mir nicht sicher, ob Member of und triggeringItem schon in OH2.3 zur Verfügung stehen, kann also sein, dass Du zumindest auf die aktuelle testing Version wechseln musst. Seit gestern oder vorgestern gibt es neben stable und unstable auch testing.

stable: angestrebter Release-Zyklus ca. 2 mal im Jahr. Es sind zum Releasezeitpunkt keine gravierenden Probleme bekannt.
testing: angestrebter Release-Zyklus monatlich. Bugfixes und neue Funktionen stehen nach kurzer Zeit zur Verfügung, grobe Fehler sollten nicht auftreten
unstable: Update, sobald es einen Code merge gibt, also meist täglich. Vereinzelt kann es passieren, dass ein Build nicht stabil läuft, dann muss man zum letzten funktionierenden Build zurückkehren.

testing ist also ein guter Kompromiss zwischen "in der breiten Masse getestet" und "neueste Funktionen"

Die einzige Änderung, die man vornehmen muss, ist, den flavor in der sources.list zu ändern.

https://www.openhab.org/v2.3/docs/insta ... stallation


Allerdings schreibst Du ja
wenn ich von "logInfo" auf das gewünschte "sendBroadcastNotification" umstelle bekomme ich nur "test" als Benachrichtigung am Handy.
Funktioniert logInfo, wie es soll, muss zwingend auch sendBroadcastNotification funktionieren. Allerdings weiß ich nicht, ob das Ersetzen der {} durch die Variable dort genauso funktioniert, ich nutze sendBroadcastNotification nicht, und ich weiß nicht, auf welcher Ebene die Ersetzung passiert.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

hr3
Beiträge: 210
Registriert: 23. Mai 2017 21:41
Answers: 0

Re: Zustand eines Gruppenmembers ausgeben

Beitrag von hr3 »

Ich bin mir nicht sicher, ob Member of und triggeringItem schon in OH2.3 zur Verfügung stehen
funktioniert auch mit 2.3.0.

Poste bitte noch mal deinen aktuellen Code aus Items und Rules.

Lycos
Beiträge: 27
Registriert: 30. Aug 2018 12:08
Answers: 0

Re: Zustand eines Gruppenmembers ausgeben

Beitrag von Lycos »

Ich benutze das mit den Lichtern übrigens nur zum testen, ob die Rule überhaupt funktioniert. Angewendet wird es dann auf den Batterie Status und den Feueralarm. Nur damit keine Verwirrung aufkommt was ich oben geschrieben habe.

Items:

Code: Alles auswählen

Group:Switch:OR(ON, OFF) Licht_1_Stock		"Eingeschaltet [(%d)]"			<Light>

Dimmer		Licht_Wohnzimmer_1			"Licht Wohnzimmer 1"		<Light>		(Licht_1_Stock)	{cannel="innogysmarthome:ISD2:SMARTHOME06:xxx:dimmer"}
Dimmer		Licht_Wohnzimmer_2			"Licht Wohnzimmer 2"		<Light>		(Licht_1_Stock)				{cannel="innogysmarthome:ISD2:SMARTHOME06:xxx:dimmer"}
Dimmer		Licht_Wohnzimmer_3			"Licht Wohnzimmer 3"		<Light>		(Licht_1_Stock)				{cannel="innogysmarthome:ISD2:SMARTHOME06:xxx:dimmer"}
Switch		Deko_Wohnzimmer			"Deko Wohnzimmer"			<Light>		(Licht_1_Stock)				{cannel="innogysmarthome:PSS:SMARTHOME06:xxx:switch"}
Meine alte Rule (immer nur das selbe Item):

Code: Alles auswählen

rule "Test"
when 
	Item Licht_1_Stock changed
then
	val triggerList = Licht_1_Stock.members.sortBy[lastUpdate]
	val triggerItem = triggerList.last as SwitchItem
 	 	sendBroadcastNotification("Test " + triggerItem.label)
end
Eure Vorschläge (funktioniert gar nicht):

Code: Alles auswählen

rule "Test"
when 
	Member of Licht_1_Stock changed
then
	sendBroadcastNotification("Test " + triggerItem.label)
end
Eure Vorschläge (Kommt nur Test):

Code: Alles auswählen

rule "Test"
when
    Member of Licht_1_Stock changed to ON
then
    sendBroadcastNotification("test","Meldung kam von {}",triggeringItem.label)
end
Ist es nun eigentlich nötig dafür ein Peristence zu nutzen? Ich nutze "rrd4j"

Code: Alles auswählen

Strategies {
everyMinute : "0 * * * * ?"
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"
default = everyChange
}

Items {
Licht_1_Stock* : strategy = everyChange, restoreOnStartup
}
Vielen Dank nochmal für eure Mühen!

hr3
Beiträge: 210
Registriert: 23. Mai 2017 21:41
Answers: 0

Re: Zustand eines Gruppenmembers ausgeben

Beitrag von hr3 »

Persistence ist ohne Bedeutung für diese Funktion.

Code: Alles auswählen

rule "Test"
when 
	Member of Licht_1_Stock changed
then
	logInfo("___",triggeringItem.label)
	sendBroadcastNotification("Test " + triggeringItem.label)
end

Antworten