Z-Wave und Rules -
-
- Beiträge: 5
- Registriert: 26. Jan 2019 07:11
Z-Wave und Rules -
Hallo zusammen,
da ich schon relativ verzweifelt bin, hoffe ich, ihr könnt mir helfen.
ich habe meine gesamte Wohnung mit Z-Wave Devices von Fibaro ausgerüstet. Hatte jetzt länger die Fibaro Zentrale laufen, war damit aber hauptsächlich wegen der Stabilität nicht zufrieden.
In den letzten Tagen habe ich dann alle Devices auf OpenHAB migriert, das lief eigentlich ganz gut, nur bei den Rules komme ich nicht weiter.
Hier das Problem:
Ich habe eine Rule geschrieben, die, wenn sich eine Temperatur unter einen bestimmten Wert ändert, etwas einschalten soll. Soweit so gut.
Das Problem ist nur, die Rule bekommt diese Änderung nicht mit! Zuerst dachte ich, das liegt daran, dass ich etwas falsch gemacht habe, deshalb habe ich testweise einen Temperaturwert aus meiner Netatmo Zentrale genommen. Da funktionierte es auf Anhieb.
Habt ihr einen Tip was ich falsch mach?
Hier der Code:
rule "Sauna_Frostschutz"
when
Item Sauna_Temperatur changed
then
logInfo( "FILE", "Temperaturänderung" )
if ((Sauna_Temperatur.state as QuantityType<Number>) < 7.0) //Es ist kalt
{
logInfo( "FILE", "FBH einschalten" )
}
else if ((Sauna_Temperatur.state as QuantityType<Number>) > 7.1) //Es ist warm
{
logInfo( "FILE", "FBH ausschalten" )
}
end
da ich schon relativ verzweifelt bin, hoffe ich, ihr könnt mir helfen.
ich habe meine gesamte Wohnung mit Z-Wave Devices von Fibaro ausgerüstet. Hatte jetzt länger die Fibaro Zentrale laufen, war damit aber hauptsächlich wegen der Stabilität nicht zufrieden.
In den letzten Tagen habe ich dann alle Devices auf OpenHAB migriert, das lief eigentlich ganz gut, nur bei den Rules komme ich nicht weiter.
Hier das Problem:
Ich habe eine Rule geschrieben, die, wenn sich eine Temperatur unter einen bestimmten Wert ändert, etwas einschalten soll. Soweit so gut.
Das Problem ist nur, die Rule bekommt diese Änderung nicht mit! Zuerst dachte ich, das liegt daran, dass ich etwas falsch gemacht habe, deshalb habe ich testweise einen Temperaturwert aus meiner Netatmo Zentrale genommen. Da funktionierte es auf Anhieb.
Habt ihr einen Tip was ich falsch mach?
Hier der Code:
rule "Sauna_Frostschutz"
when
Item Sauna_Temperatur changed
then
logInfo( "FILE", "Temperaturänderung" )
if ((Sauna_Temperatur.state as QuantityType<Number>) < 7.0) //Es ist kalt
{
logInfo( "FILE", "FBH einschalten" )
}
else if ((Sauna_Temperatur.state as QuantityType<Number>) > 7.1) //Es ist warm
{
logInfo( "FILE", "FBH ausschalten" )
}
end
- udo1toni
- Beiträge: 15246
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Z-Wave und Rules -
Wie ist das Item definiert?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 5
- Registriert: 26. Jan 2019 07:11
Re: Z-Wave und Rules -
Hi,
das Item habe ich über die UI definiert.
Zuerst Inbox -> Search for Things -> Item gespeichert
Dann Configuration/Things das Thing ausgewählt -> Channel Temperatur ausgewählt und Item angelegt.
Wo kann ich eigentlich die Definitionen finden, die über die UI gemacht wurden?
lg
Mario
das Item habe ich über die UI definiert.
Zuerst Inbox -> Search for Things -> Item gespeichert
Dann Configuration/Things das Thing ausgewählt -> Channel Temperatur ausgewählt und Item angelegt.
Wo kann ich eigentlich die Definitionen finden, die über die UI gemacht wurden?
lg
Mario
-
- Beiträge: 137
- Registriert: 12. Jan 2019 19:56
Re: Z-Wave und Rules -
Die Definition landet letztendlich im Verzeichnis /userdata/jsondb. Hier liegen die Konfigurationen als JSON-formatierte Files.
openHAB 2.5 (M1) in Docker auf NAS: Synology DS418play
mit Homematic, Hue, TP-Link, AVM Fritz!, FritzboxTR064, Nuki, Amazon Echo, Sonos, Harmony, zigbee2mqtt, Denon/Marantz, ...
mit Homematic, Hue, TP-Link, AVM Fritz!, FritzboxTR064, Nuki, Amazon Echo, Sonos, Harmony, zigbee2mqtt, Denon/Marantz, ...
- peter-pan
- Beiträge: 2758
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Z-Wave und Rules -
Hallo Mario,
du kannst auch unter $OPENHAB_USERDATA/jsondb/ schauen. Es könnte nämlich, je nach Installation, auch der Ordner /var/lib/openhab2/jsondb sein.
Du kannst auch in die Paper UI gehen und unter Configuration/Items schauen: Da ist an der Seite auch so ein Copy/Paste-Schalter. Mit dem kannst du den Item-Namen auch gleich in deine Rule kopieren.
Gruss - Peter
du kannst auch unter $OPENHAB_USERDATA/jsondb/ schauen. Es könnte nämlich, je nach Installation, auch der Ordner /var/lib/openhab2/jsondb sein.
Du kannst auch in die Paper UI gehen und unter Configuration/Items schauen: Da ist an der Seite auch so ein Copy/Paste-Schalter. Mit dem kannst du den Item-Namen auch gleich in deine Rule kopieren.
Gruss - Peter
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
-
- Beiträge: 5
- Registriert: 26. Jan 2019 07:11
Re: Z-Wave und Rules -
Hi,
die Item Definition scheint OK zu sein, ich bekomme die Werte ja angezeigt und kann auch manuell schalten.
Nur in den Rules eben nicht bzw. win ich etwas verwirrt, weil die Rule nicht so funktioniert wie ich das erwarte.
Hier die Rule:
rule "Sauna_Frostschutz"
when
Item Temperatur_Sauna_2 changed
then
logInfo( "FILE", "Temperaturänderung" )
logInfo( "FILE", Temperatur_Sauna_2.toString)
logInfo( "FILE", Sauna_Solltemperatur.toString)
if((Temperatur_Sauna_2.state instanceof Number) && (Sauna_Solltemperatur.state instanceof Number)) {
logInfo( "FILE", "alles Number")
if ((Temperatur_Sauna_2.state.toString) < (Sauna_Solltemperatur.state.toString) ) //Es ist kalt
{
logInfo( "FILE", "FBH einschalten" )
Sauna_FBH.sendCommand(ON)
}
else if ((Temperatur_Sauna_2.state.toString) > (Sauna_Solltemperatur.state.toString)) //Es ist warm
{
logInfo( "FILE", "FBH ausschalten" )
Sauna_FBH.sendCommand(OFF)
}
}
end
Im Log kommt dann folgendes raus: Das heisst, die Logik ist genau verkehrtrum....
die Item Definition scheint OK zu sein, ich bekomme die Werte ja angezeigt und kann auch manuell schalten.
Nur in den Rules eben nicht bzw. win ich etwas verwirrt, weil die Rule nicht so funktioniert wie ich das erwarte.
Hier die Rule:
rule "Sauna_Frostschutz"
when
Item Temperatur_Sauna_2 changed
then
logInfo( "FILE", "Temperaturänderung" )
logInfo( "FILE", Temperatur_Sauna_2.toString)
logInfo( "FILE", Sauna_Solltemperatur.toString)
if((Temperatur_Sauna_2.state instanceof Number) && (Sauna_Solltemperatur.state instanceof Number)) {
logInfo( "FILE", "alles Number")
if ((Temperatur_Sauna_2.state.toString) < (Sauna_Solltemperatur.state.toString) ) //Es ist kalt
{
logInfo( "FILE", "FBH einschalten" )
Sauna_FBH.sendCommand(ON)
}
else if ((Temperatur_Sauna_2.state.toString) > (Sauna_Solltemperatur.state.toString)) //Es ist warm
{
logInfo( "FILE", "FBH ausschalten" )
Sauna_FBH.sendCommand(OFF)
}
}
end
Im Log kommt dann folgendes raus: Das heisst, die Logik ist genau verkehrtrum....
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Re: Z-Wave und Rules -
Du vergleichst für das Ein- oder Ausschalten nicht die Zahlenwerte sondern Strings. Ich vermute das geschieht zeichenweise von vorne, womit die 1 kleiner ist als 7. Zum Vergleich also nicht ...state.toString sondern das mit einem Cast nach Number, dann wird es klappen
- udo1toni
- Beiträge: 15246
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Z-Wave und Rules -
Du verwendest hier in der ersten Rule explizit QuantityType in der zweiten Rule dann gar nicht.
Es ging mir im Übrigen nicht um den Weg, mit dem Du das Item erstellt hast, sondern um die exakte Definition. Das ist die große Hürde, wenn die Definition mit Paper UI geschieht. Kannst Du bitte einen Screenshot Deiner Itemdefinition schicken?
Man kann Strings außerdem nur auf Gleichheit und Ungleichheit vergleichen, nicht auf größer oder kleiner.
Wenn Du Items dieser Form hast:
sieht der korrekte Code so aus:
Für Items der Form
sieht der korrekte Code so aus:
Es ging mir im Übrigen nicht um den Weg, mit dem Du das Item erstellt hast, sondern um die exakte Definition. Das ist die große Hürde, wenn die Definition mit Paper UI geschieht. Kannst Du bitte einen Screenshot Deiner Itemdefinition schicken?
Man kann Strings außerdem nur auf Gleichheit und Ungleichheit vergleichen, nicht auf größer oder kleiner.
Wenn Du Items dieser Form hast:
Code: Alles auswählen
Number myTemp ...
Code: Alles auswählen
rule "vergleich"
when
Item myTemp1 changed or
Item myTemp2 changed
then
if(myTemp1.state instanceof Number && myTemp2.state instanceof Number) {
if((myTemp1.state as Number ) < (myTemp2.state as Number )) {
logInfo("vergleich", "Temp1 ist kleiner als Temp2!")
}
else if((myTemp1.state as Number ) > (myTemp2.state as Number )) {
logInfo("vergleich", "Temp1 ist größer als Temp2!")
}
else {
logInfo("vergleich", "Temp1 ist ist gleich Temp2!")
}
}
end
Code: Alles auswählen
Number:Temperature myTemp ...
Code: Alles auswählen
rule "vergleich"
when
Item myTemp1 changed or
Item myTemp2 changed
then
if(myTemp1.state instanceof QuantityType && myTemp2.state instanceof QuantityType ) {
if((myTemp1.state as QuantityType<Number> ) < (myTemp2.state as QuantityType<Number> )) {
logInfo("vergleich", "Temp1 ist kleiner als Temp2!")
}
else if((myTemp1.state as QuantityType<Number> ) > (myTemp2.state as QuantityType<Number> )) {
logInfo("vergleich", "Temp1 ist größer als Temp2!")
}
else {
logInfo("vergleich", "Temp1 ist ist gleich Temp2!")
}
}
end
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 5
- Registriert: 26. Jan 2019 07:11
Re: Z-Wave und Rules -
Hi,
hier mal die von Hand definierten Items:
Die Items, die ich über die UI definiert habe als Anhang
Hier der Code meiner Rule:
Das Ergebnis im Logfile sieht aber dann so aus:
Was natürlich nicht stimmt. Ich vergleiche doch jetzt Number mit Number, wie kann es sein, dass hier >< nicht funktioniert?
bin für jede Hilfe dankbar
Mario
hier mal die von Hand definierten Items:
Code: Alles auswählen
Number Sauna_Solltemperatur "Soll [%.1f °C]" <temperature>
Number Temperatur_Sauna_2 "Temperatur Sauna [%.1f °C]" <temperature> {channel="zwave:device:743ffefe:node37:sensor_temperature"}
Hier der Code meiner Rule:
Code: Alles auswählen
rule "vergleich"
when
Item Temperatur_Schlafzimmer changed
then
logInfo( "vergleich", Temperatur_Schlafzimmer.toString)
logInfo( "vergleich", Sauna_Solltemperatur.toString)
if(Temperatur_Schlafzimmer.state instanceof Number && Sauna_Solltemperatur.state instanceof Number ) {
if((Temperatur_Schlafzimmer.state as Number ) < (Sauna_Solltemperatur.state as Number )) {
logInfo("vergleich", "Temp ist kleiner als Soll!")
}
else if((Temperatur_Schlafzimmer.state as Number ) > (Sauna_Solltemperatur.state as Number )) {
logInfo("vergleich", "Temp ist größer als Soll!")
}
else {
logInfo("vergleich", "Temp ist ist gleich Soll!")
}
}
end
Code: Alles auswählen
2019-01-29 09:54:54.158 [INFO ] [pse.smarthome.model.script.vergleich] - Temperatur_Schlafzimmer (Type=NumberItem, State=10.3999996185302734375 °C, Label=Temperatur Schlafzimmer, Category=Temperature)
2019-01-29 09:54:54.164 [INFO ] [pse.smarthome.model.script.vergleich] - Sauna_Solltemperatur (Type=NumberItem, State=12, Label=Soll, Category=temperature)
2019-01-29 09:54:54.183 [INFO ] [pse.smarthome.model.script.vergleich] - Temp ist größer als Soll!
bin für jede Hilfe dankbar
Mario
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- udo1toni
- Beiträge: 15246
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Z-Wave und Rules -
Wie gesagt, es kommt darauf an, ob es sich um QuantityType handelt (das wären die Items Temperatur_Schlafzimmer und Sauna_Temperatur) oder um reine Number Items (die restlichen Items).
Da Du hier fröhlich gemischt hast, muss das beim Auswerten der Items entsprechend berücksichtigt werden:
Da Du hier fröhlich gemischt hast, muss das beim Auswerten der Items entsprechend berücksichtigt werden:
Code: Alles auswählen
rule "vergleich"
when
Item Temperatur_Schlafzimmer changed
then
logInfo("vergleich", "Temperatur Schlafzimmer ist: {}, soll: {} °C",Temperatur_Schlafzimmer.state,Sauna_Solltemperatur.state)
if((Temperatur_Schlafzimmer.state instanceof QuantityTpe ) && Sauna_Solltemperatur.state instanceof Number ) {
if((Temperatur_Schlafzimmer.state as QuantityType<Number> ) < (Sauna_Solltemperatur.state as Number )) {
logInfo("vergleich", "Temp ist kleiner als Soll!")
}
else if((Temperatur_Schlafzimmer.state as QuantityType<Number> ) > (Sauna_Solltemperatur.state as Number )) {
logInfo("vergleich", "Temp ist größer als Soll!")
}
else {
logInfo("vergleich", "Temp ist ist gleich Soll!")
}
}
end
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet