Zeitfenster (Urlaub)

GUI Relevanten, PaperUI, BasicUI, HabPanel ...

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
clajo
Beiträge: 32
Registriert: 25. Dez 2019 09:23
Answers: 1

Zeitfenster (Urlaub)

Beitrag von clajo »

Hallo allerseits,

ich "wurschtel" ´mich grad in OH2 ein :)

Wie kann ich in der BasicUI ein Zeitfenster programmieren?
Ich möchte, das in einem bestimmten Zeitraum, zB Mo 8:30 bis Do 17:00, unsere Heizung in den Urlaubsmodus versetzt wird. Das sollte auch über einen längeren Zeitraum (> 1 Woche) möglich sein.

Für einen Wochendtrip habe ich diese rule:

Code: Alles auswählen

val String Logname = "Heizroutinen.rules"
val Number tempWochendentrip = 15.0
val Number tempNorm = 21.5
rule "Heizmodus umschaltern und Ventile einstellen"
when 
    Item Sende_Update_an_Heizkoerper received command ON or
    Item Heizmodus received update
then 
    logInfo(Logname, "Heizmodus: "+Heizmodus.state)
    switch Heizmodus.state {
        case "NORMAL" : {
            Werkstatt_SET.sendCommand(tempNorm)
            Wohnzimmer_SET.sendCommand(tempNorm)
            Kueche_SET.sendCommand(tempNorm)    
        }
        
        case "WOCHENENDTRIP" : {
            Werkstatt_SET.sendCommand(tempWochendentrip)
            Wohnzimmer_SET.sendCommand(tempWochendentrip)
            Kueche_SET.sendCommand(tempWochendentrip)
         }  
    }
    Sende_Update_an_Heizkoerper.postUpdate(OFF)
end

rule "Wochenendtrip endet am So um 18:00 Uhr"
when
  Time cron "0 0 18 ? * SUN *"
then
  if (Heizmodus.state == "WOCHENENDTRIP") {
    logInfo(Logname, ":. Schaltung WOCHENENDTRIP wird verlassen")
    Heizmodus.postUpdate("NORMAL")
  }
end
Das möchte ich nun entsprechend erweitern bzw neu schreiben.
Kann mir hier vielleicht jemand weiterhelfen, wie ich das in einer rule und in der sitemap zu programmieren habe?

Leider fehlt mir dazu noch die entsprechende Erfahrung.

Jörg

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

Re: Zeitfenster (Urlaub)

Beitrag von udo1toni »

Also, es gibt in openHAB kein Uhrzeit/Datum Widget (wird immer wieder bemängelt...) es gibt grob zwei Möglichkeiten, damit umzugehen. Die eine Variante: einen Caldav-Server verwenden (z.B. Google Calendar, Owncloud usw.) Leider gibt es auch immer wieder erhebliche Probleme mit dem caldav Binding.
Die zweite Variante: Du baust Dir einen Satz Items pro Schaltpunkt, also ein Item Minute, ein Item Stunde, ein Item Tag, ein Item Monat, ein Item aktiv, jeweils für ein und aus. Dann noch eine Rule, die triggert, sobald sich eines der Items ändert, die Rule berechnet dann den nächsten Schaltzeitpunkt, prüft, ob der Schaltzeitpunkt "heute" ist und legt im Zweifel einen Timer an. Diese Rule triggert auch um 0 Uhr.

So ganz allgemein:
Du setzt in Deiner Rule einen Lognamen "Heizroutinen.rules". Die Idee ist nicht mal schlecht, aber suboptimal. Der in openHAB verwendete Logger arbeitet hierarchisch. Der vollständige Loggername lautet dann org.openhab.model.script.Heizroutinen.rules. Dabei ist der vordere Teil für alle Logger aus Rules heraus identisch. Es ist also nicht sinnvoll, überhaupt das Wort rules zu verwenden. ;) Weiterhin kann man natürlich alle rules mit einem Logger laufen lassen, man verschenkt damit aber Potential. Du kannst über die Karaf Konsole während openHAB läuft die Logtiefe für jeden Logger separat setzen, z.B. mit log:set WARN org.openhab.model.script.Heizroutinen.rules würde für alle entsprechenden Logbefehle gemeinsam auf den Level WARN gewechselt - damit kommt nur noch logWarn und logError zum Zug, logInfo aber nicht mehr. Es ist also sinnvoll, die Logger feiner zu definieren.

Weiterhin nutzt Du switch Heizmodus.state, was in Ordnung ist, allerdings ist ein Status ein Status und kein String. openHAB wandelt stillschweigend nach String, sauber wäre aber, gleich Heizmodus.state.toString anzugeben.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
clajo
Beiträge: 32
Registriert: 25. Dez 2019 09:23
Answers: 1

Re: Zeitfenster (Urlaub)

Beitrag von clajo »

So etwas habe ich mir schon fast gedacht :(

Trotzdem danke für deine Infos.

Deine angesprochenen Punkte werde ich demnächst mal umsetzten.

Jörg

Antworten