Rule erstellen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: Rule erstellen

Beitrag von udo1toni »

Dann hast Du irgendwo einen Tippfehler eingebaut.
Ich habe die Rule gerade bei mir getestet, und sie funktioniert einwandfrei.
Ich habe sie noch ein wenig optimiert :) aber auch die ursprüngliche Version hat funktioniert.
Ich habe hier zum Testen auf Sekunden umgestellt, damit es nicht so lange dauert.

Testumgebung:
Items:

Code: Alles auswählen

Switch SpsDgk1RelayOutput
String RuehrwerkSteuerung
Rule:

Code: Alles auswählen

var Timer  tRuehrwerk    = null                                           // Zeiger auf Timer
var Integer nRuehrwerkOn  = 5                                             // Länge der Einschaltphase in Sekunden
var Integer nRuehrwerkOff = 10                                            // Länge der Ausschaltphase in Sekunden

rule "Rührwerk Steuerung"
when
    Item RuehrwerkSteuerung changed
then
    tRuehrwerk?.cancel                                                    // Timer canceln
    switch(newState.toString) {                                           // Item liefert State
        case "ON",                                                        // Zustand ON
        case "OFF" :                                                      // Zustand OFF
            if(SpsDgk1RelayOutput.state.toString != newState.toString)    // Falls aktueller Zustand abweicht
               SpsDgk1RelayOutput.sendCommand(newState.toString)          // Schalten
        case "AUTO" :                                                     // Zustand ist Auto
            tRuehrwerk = createTimer(now, [|                              // timer anlegen und sofort ausführen
                val soll = if(SpsDgk1RelayOutput.state != ON) ON else OFF // falls nicht ON, ON, ansonsten OFF
                val zeit = if(soll == ON) nRuehrwerkOn else nRuehrwerkOff // falls ON, ON-Zeit, sonst OFF-Zeit
                if(SpsDgk1RelayOutput.state != soll)                      // falls vom Soll abweichend
                    SpsDgk1RelayOutput.sendCommand(soll.toString)         // Schalten
                tRuehrwerk.reschedule(now.plusSeconds(zeit))              // Timer nach zeit erneut ausführen
            ])
    }
end
Sitemap:

Code: Alles auswählen

sitemap test label="Test Sitemap" {
    Frame label="Automatik" icon="icon" {
        Switch item=RuehrwerkSteuerung label="Rührwerk[]" mappings=["OFF"="Aus","ON"="An","AUTO"="Auto"]
        Text item=SpsDgk1RelayOutput label="Relais [%s]"
    }
}
Auszug aus dem Log:

Code: Alles auswählen

2025-02-15 11:48:03.205 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'RuehrwerkSteuerung' received command OFF
2025-02-15 11:48:03.206 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'RuehrwerkSteuerung' changed from NULL to OFF
2025-02-15 11:48:03.223 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'SpsDgk1RelayOutput' received command OFF
2025-02-15 11:48:03.226 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'SpsDgk1RelayOutput' changed from NULL to OFF
2025-02-15 11:48:09.282 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'RuehrwerkSteuerung' received command ON
2025-02-15 11:48:09.283 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'RuehrwerkSteuerung' changed from OFF to ON
2025-02-15 11:48:09.286 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'SpsDgk1RelayOutput' received command ON
2025-02-15 11:48:09.287 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'SpsDgk1RelayOutput' changed from OFF to ON
2025-02-15 11:48:25.457 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'RuehrwerkSteuerung' received command AUTO
2025-02-15 11:48:25.460 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'RuehrwerkSteuerung' changed from ON to AUTO
2025-02-15 11:48:25.576 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'SpsDgk1RelayOutput' received command OFF
2025-02-15 11:48:25.577 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'SpsDgk1RelayOutput' changed from ON to OFF
2025-02-15 11:48:35.577 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'SpsDgk1RelayOutput' received command ON
2025-02-15 11:48:35.578 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'SpsDgk1RelayOutput' changed from OFF to ON
2025-02-15 11:48:40.577 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'SpsDgk1RelayOutput' received command OFF
2025-02-15 11:48:40.579 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'SpsDgk1RelayOutput' changed from ON to OFF
2025-02-15 11:48:50.578 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'SpsDgk1RelayOutput' received command ON
2025-02-15 11:48:50.579 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'SpsDgk1RelayOutput' changed from OFF to ON
2025-02-15 11:48:55.580 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'SpsDgk1RelayOutput' received command OFF
2025-02-15 11:48:55.581 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'SpsDgk1RelayOutput' changed from ON to OFF
2025-02-15 11:49:05.581 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'SpsDgk1RelayOutput' received command ON
2025-02-15 11:49:05.582 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'SpsDgk1RelayOutput' changed from OFF to ON
2025-02-15 11:49:10.582 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'SpsDgk1RelayOutput' received command OFF
2025-02-15 11:49:10.583 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'SpsDgk1RelayOutput' changed from ON to OFF
2025-02-15 11:49:20.583 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'SpsDgk1RelayOutput' received command ON
2025-02-15 11:49:20.584 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'SpsDgk1RelayOutput' changed from OFF to ON
2025-02-15 11:49:25.584 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'SpsDgk1RelayOutput' received command OFF
2025-02-15 11:49:25.585 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'SpsDgk1RelayOutput' changed from ON to OFF
2025-02-15 11:49:29.348 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'RuehrwerkSteuerung' received command OFF
2025-02-15 11:49:29.349 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'RuehrwerkSteuerung' changed from AUTO to OFF
Ansicht in Basic UI:
Screenshot 2025-02-15 115604.png
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

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

Re: Rule erstellen

Beitrag von peter-pan »

Innocent hat geschrieben: 15. Feb 2025 11:22 Missing EOF bei = glaube war es...
Kann es sein, dass, nicht so wie von Udo beschrieben, die globalen Variablen am Anfang der Rules-Datei waren ?
So konnte ich den Fehler mindestens reproduzieren ;)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Innocent
Beiträge: 238
Registriert: 29. Jul 2020 12:40
Answers: 0

Re: Rule erstellen

Beitrag von Innocent »

Erklärt es mal mir, dem dummen... 🤣 😂 😅

Welche Items muß ich erstellen? 🤔
Openhab 2 auf RaspberryPi 4

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

Re: Rule erstellen

Beitrag von udo1toni »

Genau eines (das für das Relais hast Du ja schon). Schau Dir mein Posting einfach genau an, dort sind alle notwendigen Informationen komplett vorhanden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Innocent
Beiträge: 238
Registriert: 29. Jul 2020 12:40
Answers: 0

Re: Rule erstellen

Beitrag von Innocent »

Guten Morgen.
Eben habe ich mich noch einmal damit befasst.
Alles wirklich 1:1 übernommen und siehe da, es funktioniert wie gewünscht.
Genial.

Wo lernt man sowas? Machst du das beruflich Udo?

Wie könnte ich den Schalter jetzt noch in meine sitemap integrieren? 🤔

Diese ist angelegt mit Groups. Wur hatten es in einem anderen Thread davon...

Guten Start in die neue Woche.
Openhab 2 auf RaspberryPi 4

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

Re: Rule erstellen

Beitrag von PeterA »

Innocent hat geschrieben: 11. Feb 2025 19:04 Was mögt ihr so für Biere? 🤔
Zum Release von OpenHab 5.0 ein schönes Pale Ale ?
- OpenHab 2.4
#PWRUP

Innocent
Beiträge: 238
Registriert: 29. Jul 2020 12:40
Answers: 0

Re: Rule erstellen

Beitrag von Innocent »

Wann wird das sein?
OpenHab 5??? Ohje, und ich noch mit dem zweier unterwegs... 🤣

Ale? Hmmm nicht so mein Ding...

Das gestrige wird hoffentlich ein Red Amber Lager.
Openhab 2 auf RaspberryPi 4

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

Re: Rule erstellen

Beitrag von udo1toni »

Innocent hat geschrieben: 17. Feb 2025 06:25 Wo lernt man sowas? Machst du das beruflich Udo?
:) Autodidakt.

Es ist eher anders herum. Inzwischen kümmere ich mich im Arbeitsleben unter anderen um die Konfiguration von Steuerungen für Mediensysteme, da hat mir schon häufiger geholfen, dass ich mich als Hobby mit Hausautomation beschäftige.

Bezüglich der Sitemap: Du musst lediglich diese Zeile

Code: Alles auswählen

Switch item=RuehrwerkSteuerung label="Rührwerk[]" mappings=["OFF"="Aus","ON"="An","AUTO"="Auto"]
an geeigneter Stelle einfügen.

Ich habe sicher bereits ausführlich erläutert, warum es nicht gut ist, Sitemaps mittels Groups zu bauen. Für den Einstieg prima, um schnell "etwas" zu sehen, aber viel zu unflexibel. Für den Start kannst Du einfach unterhalb eines Group Widgets die Zeile einfügen, mittelfristig wäre es aber wesentlich sinnvoller, die Group Widgets durch Text Widgets mit Nachfahren umzubauen.
Beispiel:

Ein Group Item gWohnzimmer enthält die Items WZLicht, WZRollladen und WZTemperatur.
Dann erzeugt das Widget

Code: Alles auswählen

Group item=gWohnzimmer
Einen Link auf eine neue Unterseite, auf dieser Unterseite befinden sich dann drei Widgets.
Besser:

Code: Alles auswählen

Text item=gWohnzimmer {
    Default item=WZLicht
    Default item=WZRollladen
    Default item=WZTemperatur
}
Macht exakt das gleiche, ist aber ausformuliert. Und weil es ausformuliert ist, kannst Du nun die Reihenfolge der Widgets selbst bestimmen und auch das Aussehen der Widgets beeinflussen. Default ist ein "Universal-Widget", welches zur Laufzeit von dem Widgettyp ersetzt wird, der als Default für den Itemtyp festgelegt ist (z.B. Switch für Switch Items, Text für Number Items, Slider für Dimmer, Switch für Rollershutter (automatisch mit drei Knöpfen für UP/STOP/DOWN)
Weiterhin kannst Du nun gezielt mehrere Widgets auf einer Seite gruppieren:

Code: Alles auswählen

Text item=gWohnzimmer {
    Frame label="Licht" {
        Default item=WZLicht
        // weitere Leuchten als einzelne Widgets
    }
    Frame label="Verschattung" {
        Default item=WZRollladen
        // weitere Rollläden
    }
    Frame label="Heizung" {
        Default item=AussenTemperatur
        Default item=WZTemperaturSoll
        Default item=WZTemperaturIst
        Switch item=WZBetriebsart mappings=[1="Komf",2="Stby",3="N8",4="Frost"]
    }
}
Alle drei Frames werden gemeinsam auf einer Seite dargestellt, dabei werden die einzelnen Gruppen von Items jeweils umrahmt und zusammengehalten.
So kann man Sitemaps beliebig tief verschachteln (was die Sitemap natürlich auch beliebig groß und komplex werden lässt :) ), ich habe z.B. in meiner Sitemap auf der obersten Ebene einen Frame mit Tagesinformationen (Datum, Feiertag, Uhrzeit, Wetter, Pollenvorhersage, Müllabfuhr...), einen Frame für das Gebäude und einen Frame für technische Infrastruktur.
Im Gebäudeframe gibt es dann Links zu Unterseiten für die einzelnen Stockwerke und Gruppenfunktionen (z.B. alle Lichter, alle Heizungsregler, alle Rollläden). Auf der Unterseite zu den Stockwerken gibt es dann wieder einen Frame, in dem Links für alle Räume sind, je Raum gibt es eine Seite mit mehreren Frames für die verschiedenen Gewerke usw.
In dem Zusammenhang ist noch erwähnenswert, dass ein Item beliebig oft innerhalb einer Sitemap verwendet werden kann, so dass z.B. meine Rollläden sowohl im Raum als auch in der Übersicht der Rollläden auftauchen. Dabei nutze ich dann in der Übersicht andere Label, so dass ich in der Raumansicht die Rauminformation im Label ausblende.
All diese Optionen stehen aber nur zur Verfügung, wenn man die Sitemap selbst aufbaut.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Innocent
Beiträge: 238
Registriert: 29. Jul 2020 12:40
Answers: 0

Re: Rule erstellen

Beitrag von Innocent »

Guten Morgen.

Ich habe die von Dir genannte Zeile in der Sitemap eingefügt.

Code: Alles auswählen

sitemap wohnung_admin label="Wohnung Admin" {
    
    Frame label="Dachgeschoss" icon="attic" {
        Group item=DG_KidsRoom
        Group item=DG_Bedroom
        Group item=DG_Bathroom_Gast
//        Group item=DG_Hallway
        Group item=DG_Bathroom
        Group item=DG_Kitchen
        Switch item=RuehrwerkSteuerung label="Rührwerk[]" mappings=["OFF"="Aus","ON"="An","AUTO"="Auto"] 
        Group item=DG_LivingDining
//        Group item=DG_Kammer
      
Es erscheint auch, jedoch direkt in Dachgeschoss und nicht in Küche...
Bild_2025-02-18_061539014.png

Schönen Dienstag !
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Openhab 2 auf RaspberryPi 4

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

Re: Rule erstellen

Beitrag von udo1toni »

JA, Du musst schon geschweifte Klammern drum herum machen, damit es zum Nachfahren des Group Widgets wird. Kann allerdings sein (probiere es aus...), dass die anderen Member dann nicht mehr gelistet werden, dann bleibt Dir nichts anderes übrig, als zumindest dieses eine Group Widget komplett manuell anzulegen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten