Wenn item = ein dann nach 1h Stunde ausschalten

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
seppy
Beiträge: 738
Registriert: 24. Sep 2015 20:25
Answers: 4
Wohnort: Bonn

Re: Wenn item = ein dann nach 1h Stunde ausschalten

Beitrag von seppy »

Hi,

ich konnte jetzt nicht rauslesen, ob Deine rule funktioniert. Aber für die Lüftergeschichte ist das expire binding perfekt geeignet:

Code: Alles auswählen

Switch badluefter "Badlüfter" (gBad) [ "Lighting" ] {knx="<0/0/40", expire="1h00m,command=OFF" }
Damit wärst Du ohne Regel und ohne Timer fertig. Nur das Expire binding muss aktiviert sein!

Grüße,
Seppy
Homematic und HomematicIP über Raspberrymatic (RaspPi 4 4GB) mit 2x HMLAN. Steuerung und Visualisierung durch OpenHAB2 auf RaspPi in Hutschienengehäuse im Sicherungskasten. Rund 100 Aktoren/Sensoren

- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung

Kito
Beiträge: 19
Registriert: 7. Jul 2019 15:30

Re: Wenn item = ein dann nach 1h Stunde ausschalten

Beitrag von Kito »

Danke, funktioniert damit auch wunderbar. 8-)

Habe noch eine Frage zu meiner anderen rule. Sie funktioniert, so dass bei Sonnenuntergang die Gruppe Rollos runter gefahren werden. Wie kann man das umsetzen, dass ich sage es soll nur 50% gefahren werden? Geht das über die rule?

Code: Alles auswählen

when
Channel 'astro:sun:xxx:set#event' triggered START
then
createTimer(now.plusMinutes(2)) [|   gSUG.allMembers.forEach(gSUG | { gSUG.sendCommand(DOWN) } ) ]
end
Edit.. hat sich erledigt... sendCommand(50)

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

Re: Wenn item = ein dann nach 1h Stunde ausschalten

Beitrag von peter-pan »

Ich kenne mich mit Rollos zwar nicht aus (habe leider keine), aber es sollte funktionieren, wenn du die Items als Typ Rollershutter definiert hast. Hier ein paar Links zu diesem Thema:
https://community.openhab.org/t/virtuel ... er/64604/4
https://www.openhab.org/docs/configurat ... .html#type
viewtopic.php?t=401

Du findest hier im Forum sicher noch mehr Posts zu diesem Thema. Schau doch mal unter Openhab2 nach. Was mich zu der Frage bringt, warum hast du das unter Openhab 1 gepostet ?

Zum Problem mit dem Astro-Binding. Es gibt natürlich die Möglichkeit des Offsets.

Zum besseren Verständnis, ier meine astro.things-Datei

Code: Alles auswählen

//    Astro - Binding Geo-Position  geolocation="xx.xxxxxx,y.yyyyy,zzz"

Thing astro:sun:local     "Sonnen Daten"    [geolocation="xx.xxxxxx,9.8709123,zzz", interval=300]
Thing astro:moon:local    "Mond Daten"      [geolocation="xx.xxxxxx,9.8709123,zzz", interval=300]
                                        

Thing astro:sun:minus90   "Offset -90"     [geolocation="xx.xxxxxx,9.8709123,zzz", interval=300]{
  Channels:
    Type rangeEvent : set#event [
      offset=-90
    ]
    Type start : set#start [
      offset=-90
    ]
    Type end : set#end [
      offset=-90
    ]
  }

Thing astro:sun:stowing   "Offset -180"     [geolocation="xx.xxxxxx,9.8709123,zzz", interval=300]{
  Channels:
    Type rangeEvent : set#event [
      offset=-180,
      earliest="19:40"
    ]
  }
Thing astro:sun:stowing1   "Offset 20"     [geolocation="xx.xxxxxx,9.8709123,zzz", interval=300]{
  Channels:
    Type rangeEvent : noon#event [
      offset=20,
      earliest="13:00"
    ]
    Type rangeEvent : set#event [
      offset=20,
      earliest="20:10"
    ]
    Type start : rise#start [
      offset=20,
     earliest="09:00"
    ]
    Type end : rise#end [
      offset=20
    ]
    Type start : set#start [
      offset=20,
      earliest="21:10"
    ]
    Type end : set#end [
      offset=20,
      latest="21:50"
    ]
  }
  Thing astro:sun:stowing2   "Offset -90"     [geolocation="xx.xxxxxx,9.8709123,zzz", interval=300]{
  Channels:
    Type rangeEvent : set#event [
      offset=-90
    ]
    Type start : set#start [
      offset=-90
    ]
    Type end : set#end [
      offset=-90
    ]
  }

und ein paar korrespondierende Regeln

Code: Alles auswählen

var Number count=1
var Number mooncount=0

/*===============================================================================
|                           Begin Astro Rules                                   |
=================================================================================*/
//===============================================================================
*/
//===============================================================================
rule "Stowing1_Noon200_Event Test"
    when
            Channel 'astro:sun:stowing1:noon#event' triggered START
    then
        logInfo("astro-rules" + '_Test', " Noon_200 Event. START")
        //EG_EG_Kind2_Licht.sendCommand(ON)
end
//===============================================================================
rule "Stowing1_Set200_Start Test"
    when
            Channel 'astro:sun:stowing1:set#event' triggered START
    then
        logInfo("astro-rules" + '_Test', " Set_200 Event. START")
        //EG_EG_Kind2_Licht.sendCommand(ON)
end
rule "Moonset Ende"
    when
        Channel 'astro:moon:local:set#event' triggered END
    then
        logInfo("astro-rules" + '_02'," Der Mond geht unter. END")
        //Sonoff_Basic_03.sendCommand(ON)
end
//===============================================================================
rule "Sunset_180 Start"
    when
            Channel 'astro:sun:stowing:set#event' triggered START
    then
        logInfo("astro-rules" + '_03', " Sunset_180 Start. START")
        //EG_EG_Kind2_Licht.sendCommand(ON)
end
//===============================================================================
rule "Sunset_180 Ende"
    when
            Channel 'astro:sun:stowing:set#event' triggered END
    then
        logInfo("astro-rules" + '_04', " Sunset_180 Ende. END")
        //EG_EG_Kind2_Licht.sendCommand(ON)
end

//===============================================================================
rule "Sunrise Start"
    when
            Channel 'astro:sun:local:rise#event' triggered START
    then
        logInfo("astro-rules" + '_05', " Sunrise START ")
        //EG_EG_Kind2_Licht.sendCommand(ON)
end

//===============================================================================
rule "Mittag Start"
    when
        Channel 'astro:sun:local:noon#event' triggered START
    then
        logInfo("astro-rules" + '_06', " Mittag - noon. START")
        //Sonoff_Basic_03.sendCommand(ON)
end
//===============================================================================
Vieleicht kannst du ja damit was anfangen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: Wenn item = ein dann nach 1h Stunde ausschalten

Beitrag von sihui »

peter-pan hat geschrieben: 10. Jul 2019 18:12 Es gibt natürlich die Möglichkeit des Offsets.
Hat er nicht oder will er nicht :(
sihui hat geschrieben: 8. Jul 2019 22:28 Für deine Beispiele bietet sich aber eher ein Offset im Range Event des Astro Bindings an.
Kito hat geschrieben: 8. Jul 2019 22:34 Offset gibt es nicht im Astro Binding.
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

Kito
Beiträge: 19
Registriert: 7. Jul 2019 15:30

Re: Wenn item = ein dann nach 1h Stunde ausschalten

Beitrag von Kito »

Ich habe nur im Astro Binding geschaut und da steht nichts von offset.

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Wenn item = ein dann nach 1h Stunde ausschalten

Beitrag von PeterA »

....doch....
Im Binding im jeweiligen Channel:
Screenshot_20190710-200751.png
- OpenHab 2.4
#PWRUP

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

Re: Wenn item = ein dann nach 1h Stunde ausschalten

Beitrag von peter-pan »

Ich denke da gibt es ein kleines Missverständnis. Wie Peter (mein Namensvetter) das beschrieben hat, kann man das auch in der PaperUI setzen. Ich bevorzuge die Textvariante.
Man kann es aber auch nachlesen. z. B. hier.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

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

Re: Wenn item = ein dann nach 1h Stunde ausschalten

Beitrag von udo1toni »

Kito hat geschrieben: 10. Jul 2019 17:33 Danke, funktioniert damit auch wunderbar. 8-)

Habe noch eine Frage zu meiner anderen rule. Sie funktioniert, so dass bei Sonnenuntergang die Gruppe Rollos runter gefahren werden. Wie kann man das umsetzen, dass ich sage es soll nur 50% gefahren werden? Geht das über die rule?

Code: Alles auswählen

when
Channel 'astro:sun:xxx:set#event' triggered START
then
createTimer(now.plusMinutes(2)) [|   gSUG.allMembers.forEach(gSUG | { gSUG.sendCommand(DOWN) } ) ]
end
Edit.. hat sich erledigt... sendCommand(50)
Wenn Deine Rollos absolutes Positionieren unterstützen, kannst Du auch einen Zahlwert senden:

Code: Alles auswählen

gSUG.allMembers.forEach[i | i.sendCommand(50)]
Bitte nicht identische Bezeichner über unterschiedliche Dinge in unterschiedlichen Kontexten verwenden, das geht irgendwann grandios schief.

Im vorliegenden Fall gibt es eine Gruppe gSUG, deren Member nacheinander einen Befehl bekommen. Dabei sollte das einzelne Item nicht mit dem Gruppennamen gSUG dargestellt werden, sondern mit einem übergeordnet einmaligen Zeichen (hier i für Item). Da i nur in diesem Kontext gültig ist, kann man i auch in anderen Kontxten verwenden, aber natürlich nicht in übergeordneten oder untergeordneten Kontexten, denn hier schlägt die Vererbung zu.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Kito
Beiträge: 19
Registriert: 7. Jul 2019 15:30

Re: Wenn item = ein dann nach 1h Stunde ausschalten

Beitrag von Kito »

Hey Udo, danke für deine Rückmeldung. Habe es nun so hinterlegt.

Code: Alles auswählen

when
Channel 'astro:sun:xxxx:set#event' triggered START
then
createTimer(now.plusMinutes(2)) [|   gSUG.allMembers.forEach(i | { i.sendCommand(DOWN) } ) ]
end
Das könnte ich jetzt mit jeder Gruppe so machen mit dem "i"?

Und dann habe ich noch eine Bitte. Wie muss denn eine Regel aussehen, dass diese z.b. nur von Datum x bis Datum y aktiv sein soll. Nehmen wir mal diese Regel:

Code: Alles auswählen

rule "Aussenbeleuchtung EIN"
 
when
Channel 'astro:sun:xxx:set#event' triggered START
then
createTimer(now.plusMinutes(1)) 
        [|
            sendCommand(gAussenbel, ON)
        ]
end
Kann man das nach Tagen regeln? Also Regel nur ein zwischen dem 01.08.2019 und 20.08.2019 z.B. Danke

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

Re: Wenn item = ein dann nach 1h Stunde ausschalten

Beitrag von udo1toni »

Solche Einschränkungen kann man auf unterschiedliche Weise erreichen. Enweder Du fragst die entsprechenden Werte in der Rule ab:

Code: Alles auswählen

if(now.getDayOfMonth < 21 && now.getMonthOfYear == 8 && now.getYear == 2019)
oder Du setzt z.B. ein Item in Abhängigkeit vom Datum über entsprechende Rules und wertest dieses Item aus. Letzteres kann von Vorteil sein, wenn die Bedingungen ansonsten zu kompliziert werden. Man kann ja Rules über Time cron Trigger auslösen lassen...

Deine Schreibweise des Lambdas ist fehlerhaft. Mag sein, dass Du mit den geschweiften Klammern zum Ziel kommst, es ist aber verkehrt. Korrekt sieht die Rule so aus:

Code: Alles auswählen

var Timer tSunset = null
rule "zwei Minuten nach sunset"
when
    Channel 'astro:sun:xxxx:set#event' triggered START
then
    tSunset?.cancel
    tSunset = createTimer(now.plusMinutes(2), [|
        gSUG.allMembers.forEach[i | i.sendCommand(DOWN)]
    ])
end
Alternativ kannst Du das Lambda auch nach dem createTimer() definieren, aber so wie ich es geschrieben habe, wird deutlich, dass es sich beim Lambda um ein Argument der Funktion createTimer() handelt.
Alles innerhalb eines Lambdas befindet sich in einem eigenen Kontext, es ist also nicht nötig, noch geschweifte Klammern zu setzen.

Man sollte einen Timer möglichst nicht ohne Handler anlegen, sonst verliert man die Kontrolle darüber. So, wie ich es geschrieben habe, ist sichergestellt, dass der Timer exakt einmal läuft, gleichgültig, wie oft die Rule triggert. dabei gewinnt der letzte Trigger, da vor Anlegen des Timers ein eventuell laufender Timer abgebrochen wird.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten