Seite 1 von 1

[gelöst] Erstellen einer Regel für zwei Sensoren und einem Wertbereich

Verfasst: 17. Jan 2023 16:13
von mskopek
Hallo liebes Forum,
zuerst möchte ich kurz mal Hallo und Danke für die vielen hilfreichen Beiträge sagen, die mir schon sehr weitergeholfen haben.

Ich bastle jetzt schon seit Wochen an meiner Konfiguration herum und konnte bisher alles was ich wollte selbst lösen - mehr oder weniger schnell ;)
Jetzt stehe ich leider an und im Forum wurde ich nicht wirklich fündig.
Möglicherweise sehe ich jetzt aber den Wald vor lauter Bäumen nicht mehr, oder ich denke einfach nur komplett falsch. Vielleicht ist mein Vorhaben auch gar nicht möglich.
Nun zu meiner Beschreibung was ich umsetzten möchte:
Ich habe zwei Temperatursensoren am laufen (später werden es mehr), welche mir die Temperatur, die Luftfeuchtigkeit und den Status liefern.
Auf meiner Übersichtsseite möchte ich eine "Label Card" mit dem Titel "Temperatur" erstellen, bei der sich der "Background Style" farblich ändern soll.
Es sollen keine Werte auf der Card angezeigt werden.
Grün, wenn die Temperatur aller Sensoren zwischen z.B. 15 und 25 Grad liegt, und Rot, wenn die Temperatur bereits bei einem der beiden Sensoren außerhalb dieses Bereichs liegt.
Mit dem Online / Offline Status habe ich das mittels einer Gruppe geschafft, deren Status in Folge einen Schalter schaltet, der dann für den "Background Style" benutzt wird: =(items.gruppe_tempsensor_status.state === 'ON') ? '#428E42' : '#E06666'
Hier komme ich aber mit der Verknüpfung der Sensoren und dem einbinden des Temperaturbereichs nicht mehr weiter.
Vielleicht hat ja jemand etwas ähnliches bereits umgesetzt, oder es funktioniert so nicht, oder es gibt einen komplett anderen Lösungsansatz.
Vielen Dank im Voraus.
LG Manfred

Re: Erstellen einer Regel für zwei Sensoren und einem Wertbereich

Verfasst: 17. Jan 2023 18:59
von mskopek
Ich habe es jetzt einmal versucht, mit Blockly zu lösen:

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: Temperatursensor_02_Temperatur
    type: core.ItemStateUpdateTrigger
  - id: "2"
    configuration:
      itemName: Temperatursensor_01_Temperatur
    type: core.ItemStateUpdateTrigger
conditions: []
actions:
  - inputs: {}
    id: "3"
    configuration:
      type: application/javascript
      script: >
        if (itemRegistry.getItem('Temperatursensor_01_Temperatur').getState() <=
        '20') {
          events.sendCommand('status_tempsensor_temp', 'ON');
        } else if (itemRegistry.getItem('Temperatursensor_01_Temperatur').getState() >= '30') {
          events.sendCommand('status_tempsensor_temp', 'ON');
        } else if (itemRegistry.getItem('Temperatursensor_02_Temperatur').getState() <= '20') {
          events.sendCommand('status_tempsensor_temp', 'ON');
        } else if (itemRegistry.getItem('Temperatursensor_02_Temperatur').getState() >= '30') {
          events.sendCommand('status_tempsensor_temp', 'ON');
        } else {
          events.sendCommand('status_tempsensor_temp', 'OFF');
        }
    type: script.ScriptAction
Es macht im Moment das was ich mir vorgestellt habe, ob es die beste Lösung weiß ich nicht.
Über Verbesserungsvorschläge bin ich ich nach wie vor Dankbar.

LG Manfred

Re: Erstellen einer Regel für zwei Sensoren und einem Wertbereich

Verfasst: 17. Jan 2023 22:28
von udo1toni
Die einfachste Verbesserung wäre, einen Logic Block zu nutzen, drei Mal :) Die Logikfunktion heißt or (wobei sie in der Ablage mit and angezeigt wird). Du baust also zwei or Verknüpfungen mit einer or Funktion zu einem großen vierfach or zusammen.
Und dann packst Du die vier Temperaturvergleiche in die vier freien Verknüpfungen.
Das Ganze kommt in ein if(), welches entweder ON oder OFF setzt. Vermutlich reicht es, ein postUpdate() auszuführen, statt des sendCommand()

Re: Erstellen einer Regel für zwei Sensoren und einem Wertbereich

Verfasst: 17. Jan 2023 22:52
von mskopek
Vielen Dank für deinen Vorschlag.
Hört sich soweit logisch an, ob und wie einfach das für einen Laien wie mich :D umzusetzen ist wird sich herausstellen.
In dieses Thema muss ich mich noch wesentlich mehr einlesen, werde es aber versuchen und entsprechend berichten.
Ein wenig bin ich ja mit Rules vertraut, Blockly ist aber komplettes Neuland und es war mein erster Versuch ;)
LG Manfred

Re: Erstellen einer Regel für zwei Sensoren und einem Wertbereich

Verfasst: 17. Jan 2023 23:06
von udo1toni
In DSL Rules wäre es geradeaus :)

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: Temperatursensor_02_Temperatur
    type: core.ItemStateUpdateTrigger
  - id: "2"
    configuration:
      itemName: Temperatursensor_01_Temperatur
    type: core.ItemStateUpdateTrigger
conditions: []
actions:
  - inputs: {}
    id: "3"
    configuration:
      type: application/vnd.openhab.dsl.rule
      script: >
        if(Temperatursensor_01_Temperatur.state >= 30 || Temperatursensor_01_Temperatur.state <= 20 ||
           Temperatursensor_02_Temperatur.state >= 30 || Temperatursensor_02_Temperatur.state <= 20) 
            status_tempsensor_temp.postUpdate(ON)
        else
            status_tempsensor_temp.postUpdate(OFF)
    type: script.ScriptAction

Re: Erstellen einer Regel für zwei Sensoren und einem Wertbereich

Verfasst: 18. Jan 2023 07:04
von mskopek
Hallo,
vielen Dank für die Regel und vor allem die rasche Hilfe. ;)
Am Ende sieht es dann doch einfacher aus, als man gerne mal denkt. Oder doch ein paar Bäume zu viel.....
LG Manfred

Re: Erstellen einer Regel für zwei Sensoren und einem Wertbereich

Verfasst: 18. Jan 2023 12:55
von mskopek
Hallo,
ich möchte dir noch kurz Feedback zu der Rule geben.
Ich musste dann doch von "postUpdate" auf "sendCommand" umstellen, erst dann wurde der Staus des Schalters geändert.

LG Manfred
udo1toni hat geschrieben: 17. Jan 2023 23:06 In DSL Rules wäre es geradeaus :)

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: Temperatursensor_02_Temperatur
    type: core.ItemStateUpdateTrigger
  - id: "2"
    configuration:
      itemName: Temperatursensor_01_Temperatur
    type: core.ItemStateUpdateTrigger
conditions: []
actions:
  - inputs: {}
    id: "3"
    configuration:
      type: application/vnd.openhab.dsl.rule
      script: >
        if(Temperatursensor_01_Temperatur.state >= 30 || Temperatursensor_01_Temperatur.state <= 20 ||
           Temperatursensor_02_Temperatur.state >= 30 || Temperatursensor_02_Temperatur.state <= 20) 
            status_tempsensor_temp.send.Command(ON)
        else
            status_tempsensor_temp.send.Command(OFF)
    type: script.ScriptAction

Re: [gelöst] Erstellen einer Regel für zwei Sensoren und einem Wertbereich

Verfasst: 18. Jan 2023 22:44
von udo1toni
Dann handelt es sich aber um einen externen Schalter. Ich hatte Dich so verstanden, dass Du den Zustand des Switch Items in der UI auswertest, um die Farbe zu steuern, das sollte mit postUpdate genauso (eigentlich sogar besser) funktionieren.

Re: [gelöst] Erstellen einer Regel für zwei Sensoren und einem Wertbereich

Verfasst: 19. Jan 2023 07:10
von mskopek
Hallo, das mache ich auch. Allerdings habe ich dafür ein eigenes Item / switch ohne weitere Zuordnung erstellt.
Ich schalte damit die Background Farbe einer Label Card: Background style =(items.status_tempsensor_temp.state === 'ON') ? '#E06666' : '#428E42'
LG Manfred

Re: [gelöst] Erstellen einer Regel für zwei Sensoren und einem Wertbereich

Verfasst: 19. Jan 2023 18:15
von udo1toni
Dann reicht definitiv das postUpdate() aus. Ein sendCommand() schickt einen Befehl. In der Folge löst openHAB ein postUpdate aus (als default Verhalten) und dieses postUpdate() führt dann zur Statusänderung. sendCommand() ist nur für externe (also verlinkte Channel) Dinge interessant, bzw. für Rules, die auf received command triggern.