[gelöst:] Werte in Befehle einbinden (LCN-Binding)

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
harteknut
Beiträge: 235
Registriert: 3. Dez 2019 08:21
Answers: 9

[gelöst:] Werte in Befehle einbinden (LCN-Binding)

Beitrag von harteknut »

Hallo zusammen,

ich weiß zwar, dass der LCN-Bus hier nicht weit verbreitet ist, ich evtl. könnt Ihr mir trotzdem helfen. Ich würde mich jedenfalls sehr freuen, wenn Ihr euch mal Folgendes angucken könntet:

Ich nutze wie gerade erwähnt das LCN-Binding, weil ich die Grundvernetzung im Haus mit LCN durchgeführt habe. Über das (v1-) Bindung lassen sich die meisten Sachen teilweise schön in openHAB einbinden, an ein paar Stellen sind aber etwas tricky. Um in einem LCN-Modul einen Regler zu setzen, muss man in den Items die openHAB-Kommandos mit den LCN-Kommandos mappen, z.B. so:

Code: Alles auswählen

Switch Test "TEST" {lcn="[ON:lcndemo:SETPOINT.0.M019.2.20]"}
Wenn der Schalter "Test" nun den Befehl "ON" bekommt, wird im Bus lcndemo der Setpoint gesetzt, und zwar bei Segment 0 Modul M019 der Setpoint Nr. 2 auf den Wert 20.

Das klappt soweit. Jetzt möchte ich aber nicht immer fest "20" weitergeben, sondern z.B. den im Item Temp_Min_1 im Status gespeicherten Wert.
Wie bekomme ich den denn da rein? Habe mit %i und sowas experimentiert, aber da fehlt mir echt das Verständnis.
Würde mich sehr freuen, wenn Ihr da ein paar Hinweise für mich hättet.

Gruß,
Simon
von harteknut » 22. Apr 2020 22:33
Ich muss hier nochmal korrigieren, weil ich festgestellt habe, dass ich mit der oben stehenden Vorgehensweise zwar keine Fehlereinträge erzeuge, aber die Kommandos auf dem Bus totalen Quatsch erzeugen. Die richtige Lösung habe ich dann im LCN-Forum zufällig gefunden, jetzt habe ichs auch verstanden, daher hier die Auflösung:
Die Werte für Variablen, Schwell- oder Sollwerte werden auch dem Bus immer in "LCN native" gesendet. Je nach dem, welche Größe (Temperatur, Helligkeit, ...) gesendet wird, werden die Werte im Zielmodul entsprechend umgerechnet. Das ganze ist hier ganz gut dokumentiert.
Beim Anlegen von Items kann man daher entscheiden, ob die eingebundenen Werte in der Kopplung modifiziert werden sollen oder eben nicht.
Beispiel: Die Temperatur 21,5°C entspricht in LCN-Native dem Wert 1215. Damit das Binding die Umrechnung vornimmt, muss dies in den Kopplungsbefehlen erwähnt werden.
Das Item sieht dann z.B. so aus:

Code: Alles auswählen

Number Anzeige_T_akt "Anzeige_T_akt"   <temperature>   {lcn="[lcndemo:SETPOINT_VALUE.0.M005.1.Celsius], [%i:lcndemo:SETPOINT.0.M005.1.%iCelsius]"}
... und dabei ganz ganz wichtig: zwischen %i und Celsius kommt kein Punkt. (Das war mein Fehler!)
Dann kann ich die Temperatur z.B. in der Sitemap über einen Slider einstellen oder in einer Rule per .sendCommand einen Wert auf das Item schreiben. In beiden Fällen schickt das Binding schickt den Wert in "LCN native" in den Bus.

Alternativ kann ich das Item auch "nativ" erstellen, also ohne "Celsius"-Zuordnung:

Code: Alles auswählen

Number Anzeige_T_akt "Anzeige_T_akt"   <temperature>   {lcn="[lcndemo:SETPOINT_VALUE.0.M005.1], [%i:lcndemo:SETPOINT.0.M005.1.%i]"}
und die Temperatur einfach vorher in Rule umrechnen, z.B. so:

Code: Alles auswählen

var int x = Math::round(10*(((LocalWeatherAndForecastCurrentApparentTemperature.state  as QuantityType<Number>).floatValue)+100))	
Das Ergebnis auf dem Bus ist das Gleiche, aber im ersten Fall stehen 21,5 °C in dem Item, im zweiten Fall 1125.
Wenn ich die "native"-Variante daher über einen Slider verstellen möchte muss ich bedenken, dass ich einen anderen Wertebereich verwenden muss.

Vielleicht hilft das dem ein oder anderen, ich habe ne Weile gebraucht (v.a. wegen dem Punkt!).
Jetzt gehts und ich freue mich sehr.

Gruß,
Simon
Gehe zur vollständigen Antwort
Zuletzt geändert von harteknut am 21. Apr 2020 16:22, insgesamt 1-mal geändert.

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

Re: Werte in Befehle einbinden (LCN-Binding)

Beitrag von udo1toni »

Hast Du Dir die Doku zum Binding schon mal angeschaut? https://www.openhab.org/addons/bindings ... ut-ports-2 da sind Beispielkonfigurationen auch für Number Items angegeben. da es sich um einen numerischen Wert handelt, muss natürlich ein Number Item verwendet werden.

Ich nutze allerdings selbst kein LCN.
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 9.0.3, LXC)

harteknut
Beiträge: 235
Registriert: 3. Dez 2019 08:21
Answers: 9

Re: Werte in Befehle einbinden (LCN-Binding)

Beitrag von harteknut »

Hallo Udo,

ja, die Doku von dem Binding kenne ich gut. Ich verstehe halt nicht alles, habe auch schon mal bei den Kollegen von Issendorff (Hersteller der LCN-Komponenten) nachgefragt, da ist die Response-Zeit leider nicht optimal, das Thema openHAB ist leider dort nicht Prio 1 :(

Das "Number"-Beispiel bei den Ausgängen ist dort nur für die Visualisierung beschrieben. Ich habe ja schon ein Number-Element in dem Item Temp_Min_1 (oder ich kann mir daraus eins erzeugen).
Ich möchte aber ein Kommando absetzen, daher habe ich den Switch verwendet.
In dem Dimmer, der auch bei den Ausgängen beschrieben ist, wird %i verwendet, das klingt vielversprechend. Ich weiß nur nicht, wie ich dieses %i beschreiben kann.

harteknut
Beiträge: 235
Registriert: 3. Dez 2019 08:21
Answers: 9

Re: Werte in Befehle einbinden (LCN-Binding)

Beitrag von harteknut »

Update:
Mit dem Dimmer konnte ich das Thema aber lösen, war also der richtige Hinweis! Die in der Doku beschriebene Vorgehensweise mit einem Number-Item:

Code: Alles auswählen

 Number   EG_Arbeit_Temp_Soll   "T_tar EG Arbeit [soll: %.1f °C]"   <temperature>   (gHeizungsregler, gEG_Arbeit, gEG_Arbeit_Heizung)    {lcn="[lcndemo:SETPOINT_VALUE.0.M011.1.CELSIUS], [%i:lcndemo:SETPOINT.0.M011.1.%i]"}
hat leider nicht funktiert. Wenn ich das Item per SetPoint in die Sitemap einbinde kann ich zwar verstellen, aber der Wert springt nach wenigen Sekunden wieder zurück. Daher habe ich es mit einem Dimmer versucht

Code: Alles auswählen

Dimmer EG_Arbeit_Temp_Soll   "T_tar EG Arbeit [soll: %.1f °C]"   <temperature>   (gHeizungsregler, gEG_Arbeit, gEG_Arbeit_Heizung)   {lcn="[lcndemo:SETPOINT_VALUE.0.M011.1.CELSIUS], [INCREASE:lcndemo:PCK.0.M011.REASA+2], [DECREASE:lcndemo:PCK.0.M011.REASA-2], [%i:lcndemo:SETPOINT.0.M011.1.%i]"}
und den per Slider in die Sitemap eingebunden:

Code: Alles auswählen

Slider item=EG_Arbeit_Temp_Soll step=0.2 minValue=15 maxValue=23
und das funktioniert.
Jetzt kann ich den Wert auch extern beschreiben, z.B. in einer Rule. Eine aus DarkSky geholte Temperatur

Code: Alles auswählen

Number:Temperature     Temp_Min_1  "Minimale gefühlte Temperatur morgen"     (gWetter)  {channel="darksky:weather-and-forecast:123456ab:local:forecastTomorrow#min-apparent-temperature"}
kann ich mit

Code: Alles auswählen

EG_Arbeit_Temp_Soll.sendCommand((Temp_Min_1.state as Number).doubleValue)
auf den Regler schreiben. TOP! :)

Danke für den Denkanstoß,
Simon

harteknut
Beiträge: 235
Registriert: 3. Dez 2019 08:21
Answers: 9

Re: [gelöst:] Werte in Befehle einbinden (LCN-Binding)

Beitrag von harteknut »

Ich muss hier nochmal korrigieren, weil ich festgestellt habe, dass ich mit der oben stehenden Vorgehensweise zwar keine Fehlereinträge erzeuge, aber die Kommandos auf dem Bus totalen Quatsch erzeugen. Die richtige Lösung habe ich dann im LCN-Forum zufällig gefunden, jetzt habe ichs auch verstanden, daher hier die Auflösung:
Die Werte für Variablen, Schwell- oder Sollwerte werden auch dem Bus immer in "LCN native" gesendet. Je nach dem, welche Größe (Temperatur, Helligkeit, ...) gesendet wird, werden die Werte im Zielmodul entsprechend umgerechnet. Das ganze ist hier ganz gut dokumentiert.
Beim Anlegen von Items kann man daher entscheiden, ob die eingebundenen Werte in der Kopplung modifiziert werden sollen oder eben nicht.
Beispiel: Die Temperatur 21,5°C entspricht in LCN-Native dem Wert 1215. Damit das Binding die Umrechnung vornimmt, muss dies in den Kopplungsbefehlen erwähnt werden.
Das Item sieht dann z.B. so aus:

Code: Alles auswählen

Number Anzeige_T_akt "Anzeige_T_akt"   <temperature>   {lcn="[lcndemo:SETPOINT_VALUE.0.M005.1.Celsius], [%i:lcndemo:SETPOINT.0.M005.1.%iCelsius]"}
... und dabei ganz ganz wichtig: zwischen %i und Celsius kommt kein Punkt. (Das war mein Fehler!)
Dann kann ich die Temperatur z.B. in der Sitemap über einen Slider einstellen oder in einer Rule per .sendCommand einen Wert auf das Item schreiben. In beiden Fällen schickt das Binding schickt den Wert in "LCN native" in den Bus.

Alternativ kann ich das Item auch "nativ" erstellen, also ohne "Celsius"-Zuordnung:

Code: Alles auswählen

Number Anzeige_T_akt "Anzeige_T_akt"   <temperature>   {lcn="[lcndemo:SETPOINT_VALUE.0.M005.1], [%i:lcndemo:SETPOINT.0.M005.1.%i]"}
und die Temperatur einfach vorher in Rule umrechnen, z.B. so:

Code: Alles auswählen

var int x = Math::round(10*(((LocalWeatherAndForecastCurrentApparentTemperature.state  as QuantityType<Number>).floatValue)+100))	
Das Ergebnis auf dem Bus ist das Gleiche, aber im ersten Fall stehen 21,5 °C in dem Item, im zweiten Fall 1125.
Wenn ich die "native"-Variante daher über einen Slider verstellen möchte muss ich bedenken, dass ich einen anderen Wertebereich verwenden muss.

Vielleicht hilft das dem ein oder anderen, ich habe ne Weile gebraucht (v.a. wegen dem Punkt!).
Jetzt gehts und ich freue mich sehr.

Gruß,
Simon

Antworten