Z-Wave und Rules -

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

mario
Beiträge: 5
Registriert: 26. Jan 2019 07:11
Answers: 0

Z-Wave und Rules -

Beitrag von mario »

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

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

Re: Z-Wave und Rules -

Beitrag von udo1toni »

Wie ist das Item definiert?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mario
Beiträge: 5
Registriert: 26. Jan 2019 07:11
Answers: 0

Re: Z-Wave und Rules -

Beitrag von mario »

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

mamoel
Beiträge: 137
Registriert: 12. Jan 2019 19:56
Answers: 0

Re: Z-Wave und Rules -

Beitrag von mamoel »

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, ...

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Z-Wave und Rules -

Beitrag von peter-pan »

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:
paper_name.jpg
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

mario
Beiträge: 5
Registriert: 26. Jan 2019 07:11
Answers: 0

Re: Z-Wave und Rules -

Beitrag von mario »

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:
Bildschirmfoto 2019-01-28 um 16.25.42.png
Das heisst, die Logik ist genau verkehrtrum....
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

matze_bln

Re: Z-Wave und Rules -

Beitrag von matze_bln »

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

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

Re: Z-Wave und Rules -

Beitrag von udo1toni »

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:

Code: Alles auswählen

Number myTemp ...
sieht der korrekte Code so aus:

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
Für Items der Form

Code: Alles auswählen

Number:Temperature myTemp ...
sieht der korrekte Code so aus:

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

mario
Beiträge: 5
Registriert: 26. Jan 2019 07:11
Answers: 0

Re: Z-Wave und Rules -

Beitrag von mario »

Hi,
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"}
Die Items, die ich über die UI definiert habe als Anhang

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
Das Ergebnis im Logfile sieht aber dann so aus:

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!
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
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: Z-Wave und Rules -

Beitrag von udo1toni »

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:

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

Antworten