Fragen zu: .items/.rules und HM Heizkörperthermost

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Blaccky
Beiträge: 6
Registriert: 24. Apr 2018 19:33

Fragen zu: .items/.rules und HM Heizkörperthermost

Beitrag von Blaccky »

Hallo hätte ein paar Fragen zu den Homematic Heizkörperventilen und einmal generell zu einem Regel aufbau🙂

1. Wenn man gewisse Channels über die PaperUi verlinkt sind sie als ReadOnly konfiguriert (wie z.b. Niedrieger Batteriezustand), wenn ich die Channels aber in einer Items Datei anlege kann ich sie betätigen, wie kann ich das in der Items Datei auf ReadOnly einstellen?

2. Die Thermostate sind im channel „control_mode“ ein Selections Item sprich wenn ich drauf drücke kann ich den Modus auswählen zwischen mehreren Optionen, wie leg ich das in einer Items datei an?

3. Wie baue ich eine Regel auf die erst etwa anderes schaltet wenn 3 andere Items auf „OFF“ sind?
Items & Rule Basics kann ich schon :)

Lg,
Blaccky

hr3
Beiträge: 210
Registriert: 23. Mai 2017 21:41

Re: Fragen zu: .items/.rules und HM Heizkörperthermost

Beitrag von hr3 »

Code: Alles auswählen

rule xxx
when
    Item item1 changed to OFF or//oder received command/update
    Item item2 changed to OFF or
    Item item3 changed to OFF
then
    If (item1.state == OFF && item2.state == OFF && item3.state == OFF) {item4.sendCommand(OFF)}//oder postUpdate()
end
oder für diese 3 Items eine Gruppe definieren und den Gruppen-Status abfragen

Blaccky
Beiträge: 6
Registriert: 24. Apr 2018 19:33

Re: Fragen zu: .items/.rules und HM Heizkörperthermost

Beitrag von Blaccky »

hr3 hat geschrieben: 18. Jun 2018 10:33

Code: Alles auswählen

rule xxx
when
    Item item1 changed to OFF or//oder received command/update
    Item item2 changed to OFF or
    Item item3 changed to OFF
then
    If (item1.state == OFF && item2.state == OFF && item3.state == OFF) {item4.sendCommand(OFF)}//oder postUpdate()
end
oder für diese 3 Items eine Gruppe definieren und den Gruppen-Status abfragen
Das veruschte ich nur mit Variablen :) funktionierte leider nicht aber das mit den Gruppen klingt interessant und simple da werd ich mich heute noch schlau machen darüber, vielen Dank! :)

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

Re: Fragen zu: .items/.rules und HM Heizkörperthermost

Beitrag von udo1toni »

Zu Punkt 1: Du meinst vermutlich, Du legst in einer Sitemap ein Switch Widget an, welches mit einem Item verknüpft ist, das eigentlich readonly ist.
Die einfache Antwort: Schalte es nicht um ;) Die bessere Anwort: Benutze kein Switch Widget, sondern ein Text Widget. Dann wird keine Schaltfläche gezeichnet, das Icon und der Status werden trotzdem entsprechend angezeigt.

Zu Punkt 2: In einer Items Datei kannst Du nur Items anlegen. Ein Selection Item gibt es in openHAB nicht. Was Du meinst, ist ein Selection Widget in einer Sitemap. Nur dort kannst Du das festlegen.

Zu Punkt 3: Die Rule von @hr3 ist natürlich kein fertiger Code. Was meinst Du mit Variablen?
Die Frage ist auch, wie sehen die Randbedingungen nun genau aus?
Geht es darum, dass ein 4. Item geschaltet wird, sobald die drei anderen Items OFF sind, oder müssen die drei OFF sein, damit, wenn das 4. Item geschaltet wird, das auch passiert?
Was soll passieren, wenn eines der drei OFF-Items seinen Zustand ändert?

Grundsätzlich wäre die Gruppenvariante so:
items:

Code: Alles auswählen

Group:Switch:OR(ON,OFF) gMyGroup "Gruppe ist [%s]"
Switch myItem1 "Bedingung 1 [%s]" (gMyGroup)
Switch myItem2 "Bedingung 2 [%s]" (gMyGroup)
Switch myItem3 "Bedingung 3 [%s]" (gMyGroup)
Switch myItem4 "Item 4 ist [%s]"
rule:

Code: Alles auswählen

rule "gMyGroup Switch"
when
    Item gMyGroup changed
then
    if(gMyGroup.state == OFF)
        myItem4.sendCommand(ON)
end
Man könnte aber auch sowas machen:

Code: Alles auswählen

rule "gMyGroup Switch"
when
    Item myItem4 received command
then
    if(gMyGroup.state != OFF && receivedCommand == ON)
        myItem4.sendCommand(OFF)
end
Das würde also das Item sofort wieder ausschalten, wenn ein Einschaltversuch erfolgt. Je nach dahinter hängender Hardware geht das so schnell, dass es keinen Unterschied macht, aber diese Variante funktioniert zuverlässig auch, wenn man z.B. per Rule, REST API oder Karaf Konsole versucht, den ON-Befehl direkt abzusetzen.
Es kommt also darauf an, was Du erreichen willst, wie die Randbedingungen sind.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Blaccky
Beiträge: 6
Registriert: 24. Apr 2018 19:33

Re: Fragen zu: .items/.rules und HM Heizkörperthermost

Beitrag von Blaccky »

udo1toni hat geschrieben: 18. Jun 2018 13:47 Zu Punkt 1: Du meinst vermutlich, Du legst in einer Sitemap ein Switch Widget an, welches mit einem Item verknüpft ist, das eigentlich readonly ist.
Die einfache Antwort: Schalte es nicht um ;) Die bessere Anwort: Benutze kein Switch Widget, sondern ein Text Widget. Dann wird keine Schaltfläche gezeichnet, das Icon und der Status werden trotzdem entsprechend angezeigt.

Zu Punkt 2: In einer Items Datei kannst Du nur Items anlegen. Ein Selection Item gibt es in openHAB nicht. Was Du meinst, ist ein Selection Widget in einer Sitemap. Nur dort kannst Du das festlegen.

Zu Punkt 3: Die Rule von @hr3 ist natürlich kein fertiger Code. Was meinst Du mit Variablen?
Die Frage ist auch, wie sehen die Randbedingungen nun genau aus?
Geht es darum, dass ein 4. Item geschaltet wird, sobald die drei anderen Items OFF sind, oder müssen die drei OFF sein, damit, wenn das 4. Item geschaltet wird, das auch passiert?
Was soll passieren, wenn eines der drei OFF-Items seinen Zustand ändert?

Grundsätzlich wäre die Gruppenvariante so:
items:

Code: Alles auswählen

Group:Switch:OR(ON,OFF) gMyGroup "Gruppe ist [%s]"
Switch myItem1 "Bedingung 1 [%s]" (gMyGroup)
Switch myItem2 "Bedingung 2 [%s]" (gMyGroup)
Switch myItem3 "Bedingung 3 [%s]" (gMyGroup)
Switch myItem4 "Item 4 ist [%s]"
rule:

Code: Alles auswählen

rule "gMyGroup Switch"
when
    Item gMyGroup changed
then
    if(gMyGroup.state == OFF)
        myItem4.sendCommand(ON)
end
Man könnte aber auch sowas machen:

Code: Alles auswählen

rule "gMyGroup Switch"
when
    Item myItem4 received command
then
    if(gMyGroup.state != OFF && receivedCommand == ON)
        myItem4.sendCommand(OFF)
end
Das würde also das Item sofort wieder ausschalten, wenn ein Einschaltversuch erfolgt. Je nach dahinter hängender Hardware geht das so schnell, dass es keinen Unterschied macht, aber diese Variante funktioniert zuverlässig auch, wenn man z.B. per Rule, REST API oder Karaf Konsole versucht, den ON-Befehl direkt abzusetzen.
Es kommt also darauf an, was Du erreichen willst, wie die Randbedingungen sind.
Hallo & danke für die ausführliche Antwort :)

Zu Punkt 1:
Genau ich habe für einen Channel in meinem Network Binding ein „online oder nicht“ Item erstellt soweit so gut wenn ich nun im Habpanel ein text widget nehme funktioniert es auch soweit (richtige Map übersetzung) in der Openhab APP jedoch ist es ein Schalter den ich ein und aus schalten kann (was natürlich nicht schön ist) wenn ich dann aber meine Items datei von Switch auf String ändere bekomm ich nur ein „-„ angezeigt...

Zu Punkt 2:
Ok das ist schade da ich es ja genauso in der Openhab App schalten möchte, ich probierte es schon mit den einzelen channels zum ansteueren was soweit gut funktioniert bis auf der „Manu_mode“ denn muss ich auch im Habpanel als Button angeben damit ich eine Funktion habe.

Hab noch nicht in die Sitemap Sparte reingeschaut da ich noch am Items und Rules erstellen bin, kann ich aber eine Sitemap auch auf die App ziehen?

Zu Punkt 3:
Hab in einer Anleitung gelesen man sollte var ... machen und diese schalten und in einer extra rule testen ob alle ON sind oder nicht. Zum Vorhaben: ich prüfe per Arping ob jemand Zuhause ist (switch mit On oder Off) wenn niemand Zuhause ist sollte er den Bewegungsmelder aktivieren der uns bei einer Erkennung über z.B. Telegram bescheid gibt.

Ich entschuldige mich schonmal für meine Schreibweise aber ich bin derzeit unterwegs und über das Iphone ist es ziemlich umständlich solche Beiträge zu kommentieren :)

Lg

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

Re: Fragen zu: .items/.rules und HM Heizkörperthermost

Beitrag von udo1toni »

Zu 1: Die openHAB App (iOS? Android?) sollte eigentlich auf einer *.sitemap beruhen.
Dort musst Du natürlich auch

Code: Alles auswählen

Text item=myReadOnlyItem
nehmen, statt

Code: Alles auswählen

Default item=myReadOnlyItem
oder gar

Code: Alles auswählen

Switch item=myReadOnlyItem
Zu 2: siehe 1., in der *.sitemap

Code: Alles auswählen

Selection item=mySelectionItem mappings=[1="1",2="2",3="drei","die vier"="vier"]
sollte sowohl in HABDroid als auch in der iOS App ein Selection Widget zeichnen, wie auch in Basic UI und Classic UI (letztere nur der Vollständigkeit halber...).

Zu 3: Ja, das ist ja dann einfach... Du machst eine Gruppe wie beschrieben. OR(ON,OFF) bedeutet, sobald mindestens ein Item ON ist, geht das Gruppenitem auf ON. Anschließend musst Du die Rule durch den Bewegungsmelder triggern lassen. Dann schaust Du innerhalb der Rule nach, welchen Status die Gruppe hat. Wenn sie ON ist, machst Du nichts, wenn sie OFF ist, löst Du Alarm aus (das wäre dann ja ein 5. Item). Das entspricht also quasi der letzten Rule, nur dass Du das .sendCommand auf den Alarmausgang wirken lässt, statt auf den Trigger - und natürlich musst Du die Logik umdrehen, also statt != (ungleich) ein == verwenden, oder alternativ auf ON statt auf OFF testen.
Dabei gilt es zu beachten, dass es auch noch einen dritten Status gibt, nämlich NULL, solange noch kein postUpdate auf die Gruppe gewirkt hat, also alle Items noch nicht initialisiert wurden. Kommt auf die Situation an, welches Verhalten hier wünschenswert ist.

Code: Alles auswählen

rule "Alarm melden"
when
    Item Bewegung received command ON
then
    if (gAnwesenheit.state != ON) {
        Alarm.sendCommand(ON)
        //sendMail("blah","bliblubb") musst Du gucken, mache ich bei mir nicht
        //sendNotification ("was","auch immer")
        // und so weiter
    }
end
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Blaccky
Beiträge: 6
Registriert: 24. Apr 2018 19:33

Re: Fragen zu: .items/.rules und HM Heizkörperthermost

Beitrag von Blaccky »

udo1toni hat geschrieben: 18. Jun 2018 16:59 Zu 1: Die openHAB App (iOS? Android?) sollte eigentlich auf einer *.sitemap beruhen.
Dort musst Du natürlich auch

Code: Alles auswählen

Text item=myReadOnlyItem
nehmen, statt

Code: Alles auswählen

Default item=myReadOnlyItem
oder gar

Code: Alles auswählen

Switch item=myReadOnlyItem
Zu 2: siehe 1., in der *.sitemap

Code: Alles auswählen

Selection item=mySelectionItem mappings=[1="1",2="2",3="drei","die vier"="vier"]
sollte sowohl in HABDroid als auch in der iOS App ein Selection Widget zeichnen, wie auch in Basic UI und Classic UI (letztere nur der Vollständigkeit halber...).

Zu 3: Ja, das ist ja dann einfach... Du machst eine Gruppe wie beschrieben. OR(ON,OFF) bedeutet, sobald mindestens ein Item ON ist, geht das Gruppenitem auf ON. Anschließend musst Du die Rule durch den Bewegungsmelder triggern lassen. Dann schaust Du innerhalb der Rule nach, welchen Status die Gruppe hat. Wenn sie ON ist, machst Du nichts, wenn sie OFF ist, löst Du Alarm aus (das wäre dann ja ein 5. Item). Das entspricht also quasi der letzten Rule, nur dass Du das .sendCommand auf den Alarmausgang wirken lässt, statt auf den Trigger - und natürlich musst Du die Logik umdrehen, also statt != (ungleich) ein == verwenden, oder alternativ auf ON statt auf OFF testen.
Dabei gilt es zu beachten, dass es auch noch einen dritten Status gibt, nämlich NULL, solange noch kein postUpdate auf die Gruppe gewirkt hat, also alle Items noch nicht initialisiert wurden. Kommt auf die Situation an, welches Verhalten hier wünschenswert ist.

Code: Alles auswählen

rule "Alarm melden"
when
    Item Bewegung received command ON
then
    if (gAnwesenheit.state != ON) {
        Alarm.sendCommand(ON)
        //sendMail("blah","bliblubb") musst Du gucken, mache ich bei mir nicht
        //sendNotification ("was","auch immer")
        // und so weiter
    }
end
Ja IOSApp, hab aber noch nie eine Sitemap erstellt und hab trotzdem Items drinnen 🤔 erstellt sich die automatisch?

Vielen Dank einmal für deine sehr ausführliche und gelungene Erklärung werde mich in den nächsten tagen mal wieder dran setzten und es testen :)

Lg
Blaccky

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

Re: Fragen zu: .items/.rules und HM Heizkörperthermost

Beitrag von udo1toni »

Vermutlich schaut die iOS App dann auf die _default.sitemap, die erstellt openHAB in der Tat automatisch.

EDIT: Achso, und diese Sitemap ist rein intern, die wird also nicht als Datei angelegt...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Blaccky
Beiträge: 6
Registriert: 24. Apr 2018 19:33

Re: Fragen zu: .items/.rules und HM Heizkörperthermost

Beitrag von Blaccky »

udo1toni hat geschrieben: 19. Jun 2018 12:36 Vermutlich schaut die iOS App dann auf die _default.sitemap, die erstellt openHAB in der Tat automatisch.

EDIT: Achso, und diese Sitemap ist rein intern, die wird also nicht als Datei angelegt...
Ok super vielen Dank ich werd mich bis zum Wochenende in die ganze Sitemap Geschichte einlesen und testen :)

Darf ich mich hier nochmal melden falls ich auf Schwierigkeiten stoße?

Lg

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

Re: Fragen zu: .items/.rules und HM Heizkörperthermost

Beitrag von udo1toni »

Aber immer doch :)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten