Seite 3 von 4

Re: Rule erstellen

Verfasst: 15. Feb 2025 11:58
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

Re: Rule erstellen

Verfasst: 15. Feb 2025 12:09
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 ;)

Re: Rule erstellen

Verfasst: 15. Feb 2025 19:06
von Innocent
Erklärt es mal mir, dem dummen... 🤣 😂 😅

Welche Items muß ich erstellen? 🤔

Re: Rule erstellen

Verfasst: 16. Feb 2025 01:58
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.

Re: Rule erstellen

Verfasst: 17. Feb 2025 06:25
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.

Re: Rule erstellen

Verfasst: 17. Feb 2025 08:00
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 ?

Re: Rule erstellen

Verfasst: 17. Feb 2025 09:05
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.

Re: Rule erstellen

Verfasst: 17. Feb 2025 12:41
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.

Re: Rule erstellen

Verfasst: 18. Feb 2025 06:16
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 !

Re: Rule erstellen

Verfasst: 18. Feb 2025 15:30
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.