Switch Item für numerisches Thing
-
- Beiträge: 14
- Registriert: 3. Aug 2023 12:25
Switch Item für numerisches Thing
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
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
- PeterA
- Beiträge: 1052
- Registriert: 8. Feb 2019 12:12
Re: Switch Item für numerisches Thing
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
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
#PWRUP
-
- Beiträge: 14
- Registriert: 3. Aug 2023 12:25
Re: Switch Item für numerisches Thing
Hallo Peter,
danke für deine rasche Antwort.
Ich habe nun folgende Einstellung in der Sitemap hinterlegt:
...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
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"]
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
- PeterA
- Beiträge: 1052
- Registriert: 8. Feb 2019 12:12
Re: Switch Item für numerisches Thing
Prima so.
Mit "valuecolor" und "labelcolor" kann man da noch schön spielen.
Gruß Peter
Mit "valuecolor" und "labelcolor" kann man da noch schön spielen.
Gruß Peter
- OpenHab 2.4
#PWRUP
#PWRUP
-
- Beiträge: 199
- Registriert: 22. Sep 2018 10:38
Re: Switch Item für numerisches Thing
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.
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
- udo1toni
- Beiträge: 13986
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Switch Item für numerisches Thing
Ä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:
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 gehend (vom Item zum Thing):
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.
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
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: Alles auswählen
|if(input.toString == "OFF") 0 else 1
(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
-
- Beiträge: 14
- Registriert: 3. Aug 2023 12:25
Re: Switch Item für numerisches Thing
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
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
- udo1toni
- Beiträge: 13986
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Switch Item für numerisches Thing
Ja, gerne
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:
Hab ich aber nicht ausprobiert...
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"]}
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"]}
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 14
- Registriert: 3. Aug 2023 12:25
Re: Switch Item für numerisches Thing
Vielen Dank für das Beispiel, schon cool, was da alles möglich ist, wenn man weiß, wie es geht .
- udo1toni
- Beiträge: 13986
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Switch Item für numerisches Thing
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