Switch Item für numerisches Thing

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
Hannes
Beiträge: 14
Registriert: 3. Aug 2023 12:25
Answers: 0

Switch Item für numerisches Thing

Beitrag von Hannes »

Guten Tag,
ich habe ein Thing, welches einem Modbus Register entspricht, das ich sowohl lesen, als auch schreiben kann.
Diese Thing repräsentiert einen Schalter für das forcierte Laden meines Batteriespeichers aus dem Netz und kann die Werte 0 oder 1 einnehmen (0: forciertes Laden aus, 1: forciertes Laden ein).

Zur Repräsentation und Steuerung des Verhaltens (setzten des Modbus Werts) über die Sitemap möchte ich ein entsprechendes Switch Item verwenden, das aber die Werte ON und OFF verlangt.

Jetzt könnte ich natürlich hergehen und:
- Ein Number-Item anlegen, welches den Wert aus dem Thing als 0 oder 1 enthält (also dem Channel zugeordnet ist)
- Ein Dummy-Switch-Item anlegen, welches über eine Rule, in Abhängigkeit des Number-Items, gesetzt wird
- Eine weitere Rule anlegen, die das Number-Item bei Änderungen des Switch-Items entsprechend aktualisiert

Meine Frage wäre, ob ich das Verhalten auch einfacher bzw. eleganter erreichen könnte, idealerweise ohne zusätzliche Rules etc.

Danke,
Hannes

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

Re: Switch Item für numerisches Thing

Beitrag von PeterA »

Hallo Hannes,

m.E. müsste das direkt in der Sitemap mit dem Number Item über das "Mapping" funktionieren.
So ähnlich ist das hier mit den Stufen der Lüftung hier.
Das Item (Number) kennt nur 0,1,2,3 in der Ui nenne ich das aber
Aus, Klein, Mittel, Groß.
Und über das Mapping "Mappe" ich entsprechend Aus=0 usw.
Heute Abend suche ich den Entsprechenden Code aus der Sitemap.


Gruß Peter
- OpenHab 2.4
#PWRUP

Hannes
Beiträge: 14
Registriert: 3. Aug 2023 12:25
Answers: 0

Re: Switch Item für numerisches Thing

Beitrag von Hannes »

Hallo Peter,

danke für deine rasche Antwort.
Ich habe nun folgende Einstellung in der Sitemap hinterlegt:

Code: Alles auswählen

 Switch item=GoodWe1_SFCST label="Forciertes Laden" icon="switch" mappings=[0="AUS", 1="EIN"] 
...und konnte damit das gewünschte Verhalten steuern.

Allerdings wird mir damit dann nicht mehr der bekannte Switch "Schieber" angezeigt und die Farbe des Icons wechselt nicht zwischen rot (AUS) und grün (EIN).

Ist aber nicht tragisch, damit kann ich leben.

LG
Hannes

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

Re: Switch Item für numerisches Thing

Beitrag von PeterA »

Prima so.

Mit "valuecolor" und "labelcolor" kann man da noch schön spielen.

Gruß Peter
- OpenHab 2.4
#PWRUP

nw378
Beiträge: 199
Registriert: 22. Sep 2018 10:38
Answers: 4

Re: Switch Item für numerisches Thing

Beitrag von nw378 »

Der Punkt ist, wenn Du mit mapping (oder der MAP Tranformation) arbeitest, änderst Du nur die Anzeige; nicht den eigentlichen Wert des Items.

Wenn Du mit dem erreichten leben kannst, ist ja alles erledigt.

Falls Du doch einen "klassischen" Switch mit seinen Eigenschaften (inkl. Farbwechsel des Icons) willst, wirst Du um eine rule nicht herumkommen.
Der Aufwand ist aber auch überschaubar:

Das Number Item wirst Du ja eh schon haben (das Thing nimmt keinen Wert an, außer ON- / OFFLINE).
Zusätzlich benötigst du eben ein Switch Item.

Code: Alles auswählen

rule "Switch item GoodWe1_SFCST" 
when 
    Item  GoodWe1_SFCST changed
then
    if (newState == 0) Switch_GoodWe1_SFCST.sendCommand(OFF) 
else
    Switch_GoodWe1_SFCST.sendCommand(ON) 
end    
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

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

Re: Switch Item für numerisches Thing

Beitrag von udo1toni »

Ähm...

Erst mal denke ich, ist die Rule die falsche Richtung, es geht ja darum, mit einem Switch Item einen Befehl 0 oder 1 zu senden. Andererseits braucht es natürlich auch die Empfangsrichtung, mit Rules umgesetzt wären das also zwei Rules, nicht eine:

Code: Alles auswählen

rule "kommend"
when
    Item dasNumberItem changed   // Modbus empfängt einen Wert
then
    dasSwitchItem.postUpdate(if(newState == 0) OFF else ON)
end

rule "gehend"
when
    Item dasSwitchItem received command  // Das Switch Item empfängt einen Befehl (z.B. über die UI geschaltet)
then
    dasNumberItem.sendCommand(if(receivedCommand == ON) 1 else 0)
end
Ganz wichtig: die kommende Rule triggert auf ein changed Ereignis, die gehende Rule triggert auf received command.
Die kommende Rule sendet den Wert unbedingt mittels postUpdate(), die gehende Rule verwendet unbedingt sendCommand().

Allerdings verstehe ich den ganzen Aufriss nicht.
Zum einen sollte es möglich sein, den number Channel über ein Profile an ein Switch Item zu binden (z.B. unter OH4 mit dem Profile SCRIPT Rule DSL (v1), es gibt dann zwei Felder für die beiden Richtungen.
Code kommend (vom Thing zum Item):

Code: Alles auswählen

|if(Integer.parseInt(input)== 0) OFF else ON
Code gehend (vom Item zum Thing):

Code: Alles auswählen

|if(input.toString == "OFF") 0 else 1
Wahlweise könnte man die beiden Scripte (ohne die Pipe zu Beginn) auch als Transformation Scripte anlegen, allerdings, bei jeweils einer Zeile...

(Ich habe das mit dem Profile mit mqtt erfolgreich getestet)

Modbus kann aber auch Switch Channel erstellen, die dann ON und OFF ausgeben bzw. auf diese Befehle reagieren.
Ich selbst nutze kein Modbus, weshalb ich keine Ahnung habe, wie man das konfigurieren muss, aber ich kann mir irgendwie nicht vorstellen, dass das nicht direkt im Thing möglich sein soll.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Hannes
Beiträge: 14
Registriert: 3. Aug 2023 12:25
Answers: 0

Re: Switch Item für numerisches Thing

Beitrag von Hannes »

Hallo udo1toni,

danke für deine Antwort!
Ich habe mir den Ansatz "...den number Channel über ein Profile an ein Switch Item zu binden..." angeschaut, allerdings finde ich diese Option nur über die UI.
Ich habe generell meine Things in der UI, die Items in einem File definiert (textbasierte Konfiguration).
Kannst du mir da evt. ein kurzes Beispiel geben, wie das über die textbasierte Konfiguration aussehen würde?

Danke,
Hannes

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

Re: Switch Item für numerisches Thing

Beitrag von udo1toni »

Ja, gerne

Code: Alles auswählen

Switch meinSwitch "Der Switch" {channel="..."[profile="transform:DSL", toItemScript="|if(Integer.parseInt(input)== 0) OFF else ON", toHandlerScript="|if(input.toString == \"OFF\") 0 else 1"]}
So sollte das funktionieren. :)
Weil das Script jeweils inline angegeben ist, müssen die Anführungszeichen escaped werden. Eventuell könnte man innerhalb der Definition auch einfache Anführungszeichen verwenden, also so:

Code: Alles auswählen

Switch meinSwitch "Der Switch" {channel="..."[profile="transform:DSL", toItemScript="|if(Integer.parseInt(input)== 0) OFF else ON", toHandlerScript="|if(input.toString == 'OFF') 0 else 1"]}
Hab ich aber nicht ausprobiert...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Hannes
Beiträge: 14
Registriert: 3. Aug 2023 12:25
Answers: 0

Re: Switch Item für numerisches Thing

Beitrag von Hannes »

Vielen Dank für das Beispiel, schon cool, was da alles möglich ist, wenn man weiß, wie es geht :-).

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

Re: Switch Item für numerisches Thing

Beitrag von udo1toni »

Ich finde besonders toll, dass letztlich so gut wie alles weiter über Textdateien konfiguriert werden kann, obwohl ein Gutteil davon erst eingeführt wurde, nachdem die UI schon da und als "der Weg" der Konfiguration etabliert war.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten