Hallo,
nächstes Thema. Wie übergeb ich eine Temperatur aus einem Modbusregister an meinen Heizungsthermostat als Set Temperature?
Ich habe bereits ein Item als Setpoint mit dem Modbuswert angelegt dieses unter dem jeweiligen Thermostat verlinkt, aber es wird an meinen Thermostat nicht gesendet.
Vielen Dank für eure Hilfe.
Allen ein wunderschönes Weihnachtsfest!
Modbus Temp -> Homematic Set Temperature
Moderator: seppy
-
- Beiträge: 11
- Registriert: 10. Sep 2021 09:00
- udo1toni
- Beiträge: 15052
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Modbus Temp -> Homematic Set Temperature
Schritt 1: Du legst das Modbus Thing so an, dass die Daten gelesen und geschrieben werden können.
Schritt 2: Du prüfst, dass das auch funktioniert (indem Du den number Channel mit einem neuen Number Item verlinkst und dieses über die UI steuerst. Schau nach, ob Änderungen auf Modbus-Seite in openHAB angezeigt werden und umgekehrt.
Schritt 3: Du legst den passenden Channel für das Thermostat an.
Schritt 4: Du prüfst, dass auch dieser Channel wie erwartet funktioniert. (siehe Schritt 2)
Selbstverständlich kannst Du die Reihenfolge der Schritte auch sinngemäß ändern, wichtig ist aber, dass zunächst beide Anbindungen in der UI in beide Richtungen funktionieren.
Im nächsten Schritt verifizierst Du, dass beide Channel den gleichen Wertebereich nutzen. Es kommt z.B. oft vor, dass Modbus 1/10°C Schritte nutzt. Allerdings mit einem Integerwert, d.h. aus 21,5 °C wird 215. Der Thermostat verwendet aber evtl. einen echten Float Wert, also z.B. 21.5 für 21,5 °C.
Im besten Fall sorgst Du durch Anpassungen an den Channels dafür, dass die Werte als QuantityType zur Verfügung stehen, mindestens aber, dass beide Channel den gleichen Wertebereich nutzen.
Als letztes verlinkst Du beide Channel mit dem selben Number Item. Dabei gibst Du beim "Slave" als Profile noch "follow" mit an. Dadurch interpretiert dieser Channel eine eintreffende Statusänderung als Befehl und sendet den Wert an das verknüpfte Gerät weiter.
Aber Achtung! Du darfst nicht beide Channel mit follow konfigurieren, Du musst Dich also entscheiden, ob eine Wertänderung am Thermostaten oder am Modbus Gerät zur anderen Seite gesendet wird.
Zusatzinfo:
Wenn Das nicht akzeptabel ist (die Set Temperatur soll jederzeit an beiden Geräten und über die UI konfigurierbar sein), musst Du stattdessen auf eine Rule ausweichen und am besten drei Number Items verwenden (eines für die UI, eines für den Thermostaten und eines für das Modbus Register). Die Weiterleitung der Steuerbefehle wird dann durch die Rule vorgenommen, in der Form, dass die Rule auf changed triggert (alle drei Items) und den empfangenen Wert an alle Items als Befehl sendet, allerdings nur dann, wenn sich der aktuelle Wert des jeweiligen Items vom empfangenen Wert unterscheidet. z.B. so:
Also drei Items, zusammengefasst in der Gruppe gThermostatWohnzimmer.
Diese Variante ist aber nur dann notwendig, wenn Du unbedingt an allen drei Stellen gleichberechtigt steuern können willst. Ansonsten kannst Du die "einfache" Variante nehmen, die ich oben beschrieben habe.
Schritt 2: Du prüfst, dass das auch funktioniert (indem Du den number Channel mit einem neuen Number Item verlinkst und dieses über die UI steuerst. Schau nach, ob Änderungen auf Modbus-Seite in openHAB angezeigt werden und umgekehrt.
Schritt 3: Du legst den passenden Channel für das Thermostat an.
Schritt 4: Du prüfst, dass auch dieser Channel wie erwartet funktioniert. (siehe Schritt 2)
Selbstverständlich kannst Du die Reihenfolge der Schritte auch sinngemäß ändern, wichtig ist aber, dass zunächst beide Anbindungen in der UI in beide Richtungen funktionieren.
Im nächsten Schritt verifizierst Du, dass beide Channel den gleichen Wertebereich nutzen. Es kommt z.B. oft vor, dass Modbus 1/10°C Schritte nutzt. Allerdings mit einem Integerwert, d.h. aus 21,5 °C wird 215. Der Thermostat verwendet aber evtl. einen echten Float Wert, also z.B. 21.5 für 21,5 °C.
Im besten Fall sorgst Du durch Anpassungen an den Channels dafür, dass die Werte als QuantityType zur Verfügung stehen, mindestens aber, dass beide Channel den gleichen Wertebereich nutzen.
Als letztes verlinkst Du beide Channel mit dem selben Number Item. Dabei gibst Du beim "Slave" als Profile noch "follow" mit an. Dadurch interpretiert dieser Channel eine eintreffende Statusänderung als Befehl und sendet den Wert an das verknüpfte Gerät weiter.
Aber Achtung! Du darfst nicht beide Channel mit follow konfigurieren, Du musst Dich also entscheiden, ob eine Wertänderung am Thermostaten oder am Modbus Gerät zur anderen Seite gesendet wird.
Zusatzinfo:
Wenn Das nicht akzeptabel ist (die Set Temperatur soll jederzeit an beiden Geräten und über die UI konfigurierbar sein), musst Du stattdessen auf eine Rule ausweichen und am besten drei Number Items verwenden (eines für die UI, eines für den Thermostaten und eines für das Modbus Register). Die Weiterleitung der Steuerbefehle wird dann durch die Rule vorgenommen, in der Form, dass die Rule auf changed triggert (alle drei Items) und den empfangenen Wert an alle Items als Befehl sendet, allerdings nur dann, wenn sich der aktuelle Wert des jeweiligen Items vom empfangenen Wert unterscheidet. z.B. so:
Code: Alles auswählen
Group gThermostatWohnzimmer
Number ThermostatWohnzimmerModbus (gThermostatWohnzimmer)
Number ThermostatWohnzimmerEcht (gThermostatWohnzimmer)
Number ThermostatWohnzimmerUI "Wohnzimmer Thermostat" (gThermostatWohnzimmer) {stateDescription=""[pattern="%.1f °C"]}
Code: Alles auswählen
rule "Termostat Wohnzimmer"
when
Member of gThermostatWohnzimmer changed // eines der Items hat seinen Wert geändert
then
if(!(newState instanceof Number)) // ist der Wert keine gültige Zahl?
return; // dann Abbruch
val soll = (newState as Number).floatValue // neuen Sollwert als Float Zahl bereitstellen
gThermostatWohnzimmer.members.forEach[i| // für jedes Item der Gruppe ausführen
var Boolean bSetzen = true // definiere einen variablen Wahrheitswert
if(i.state instanceof Number) // falls der Status des Items eine Zahl ist
if((i.state as Number).floatValue == soll) // falls die Zahl gleich dem empfangenen Wert ist
bSetzen = false // kein Befehl notwendig -> Variable auf false ändern
if(bSetzen) // falls bSetzen weiterhin wahr ist
i.sendCommand(soll) // sende den empfangenen Wert an das aktuelle Item
]
end
openHAB4.3.2 stable in einem Debian-Container (bookworm) (Proxmox 8.3.3, LXC), mit openHABian eingerichtet
-
- Beiträge: 11
- Registriert: 10. Sep 2021 09:00
Re: Modbus Temp -> Homematic Set Temperature
Hallo und ein Gutes neues Jahr 2025!
So hab soweit alles hinbekommen, momentan ohne Rule. Kann in beide Richtungen arbeiten, jedoch läuft mit Follow mein Duty Cycle über. Innerhalb einer viertel Stunde auf 99%. Gibt es eine andere Lösung, oder ist das Problem mit einer Rule weg?
Vielen Dank im Voraus.
Schöne Grüße
So hab soweit alles hinbekommen, momentan ohne Rule. Kann in beide Richtungen arbeiten, jedoch läuft mit Follow mein Duty Cycle über. Innerhalb einer viertel Stunde auf 99%. Gibt es eine andere Lösung, oder ist das Problem mit einer Rule weg?
Vielen Dank im Voraus.
Schöne Grüße
- udo1toni
- Beiträge: 15052
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Modbus Temp -> Homematic Set Temperature
Keine Ahnung, was ein Duty Cycle ist, aber:
Was auf gar keinen Fall erlaubt ist, dass Du beide Channel mittels follow an das selbe Item koppelst, denn dann wird jedes Update des einen Channels einen Befehl an den anderen Channel schicken, womit dann wieder ein Update ausgelöst wird.
Das ist dann eine Endlosschleife. Diese kann nur durch die Rule anstatt der follows verhindert werden. Die follow Strategie geht nur als "Master/Slave", also der eine Channel kontrolliert den anderen Channel, Eine Richtung, niemals gleichberechtigt in beide Richtungen.
Was auf gar keinen Fall erlaubt ist, dass Du beide Channel mittels follow an das selbe Item koppelst, denn dann wird jedes Update des einen Channels einen Befehl an den anderen Channel schicken, womit dann wieder ein Update ausgelöst wird.
Das ist dann eine Endlosschleife. Diese kann nur durch die Rule anstatt der follows verhindert werden. Die follow Strategie geht nur als "Master/Slave", also der eine Channel kontrolliert den anderen Channel, Eine Richtung, niemals gleichberechtigt in beide Richtungen.
openHAB4.3.2 stable in einem Debian-Container (bookworm) (Proxmox 8.3.3, LXC), mit openHABian eingerichtet
-
- Beiträge: 11
- Registriert: 10. Sep 2021 09:00
Re: Modbus Temp -> Homematic Set Temperature
Guten Morgen!
Entschuldige, ich hab mich falsch ausgedrückt. Ich arbeite nur in eine Richtung. ETAtouch gibt über Modbus Solltemp vor (Master) -> OH4 -> Debmatic (Slave) hier follow gesetzt. Funktioniert, nur zu viel Datenverkehr (Duty Cycle). Homematic gibt bei 100% auf. Die haben irgendwie eine Begrenzung was die Funkbefehle innerhalb einer bestimmten Zeit anbelangt.
Ich werde mich mal mit einer Rule versuchen.
Vielen Dank vorerst.
Entschuldige, ich hab mich falsch ausgedrückt. Ich arbeite nur in eine Richtung. ETAtouch gibt über Modbus Solltemp vor (Master) -> OH4 -> Debmatic (Slave) hier follow gesetzt. Funktioniert, nur zu viel Datenverkehr (Duty Cycle). Homematic gibt bei 100% auf. Die haben irgendwie eine Begrenzung was die Funkbefehle innerhalb einer bestimmten Zeit anbelangt.
Ich werde mich mal mit einer Rule versuchen.
Vielen Dank vorerst.
- udo1toni
- Beiträge: 15052
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Modbus Temp -> Homematic Set Temperature
Ah. Das heißt, es kommen einfach zu viele Datentelegramme über Modbus rein? Strange...
Es gibt die Option, die Weiterleitung auf Änderungen zu begrenzen, aber das musst Du auf der Sendeseite konfigurieren:
Du installierst dazu aus Addons->Transformations die Basic Profiles nach.
Anschließend gibt es im Link zwischen Channel und Item als Profile zusätzlich den State Filter.
Diesen richtest Du nun in der Modbus Verbindung zum Item ein.
Als Condition trägst Du $DELTA > 0 ein.
Falls der Channel eine Unit mitliefert, musst Du die ebenfalls angeben, siehe Beispiel hier: https://www.openhab.org/addons/transfor ... r-examples (als Textkonfiguration angegeben, funktioniert sinngemäß aber genauso auch über die UI)
Nach der Anpassung werden nur noch Änderungen des Werts ins Item übernommen, und damit auch keine Updates ohne Wertänderung als Befehl weitergeleitet.
Es gibt die Option, die Weiterleitung auf Änderungen zu begrenzen, aber das musst Du auf der Sendeseite konfigurieren:
Du installierst dazu aus Addons->Transformations die Basic Profiles nach.
Anschließend gibt es im Link zwischen Channel und Item als Profile zusätzlich den State Filter.
Diesen richtest Du nun in der Modbus Verbindung zum Item ein.
Als Condition trägst Du $DELTA > 0 ein.
Falls der Channel eine Unit mitliefert, musst Du die ebenfalls angeben, siehe Beispiel hier: https://www.openhab.org/addons/transfor ... r-examples (als Textkonfiguration angegeben, funktioniert sinngemäß aber genauso auch über die UI)
Nach der Anpassung werden nur noch Änderungen des Werts ins Item übernommen, und damit auch keine Updates ohne Wertänderung als Befehl weitergeleitet.
openHAB4.3.2 stable in einem Debian-Container (bookworm) (Proxmox 8.3.3, LXC), mit openHABian eingerichtet
-
- Beiträge: 11
- Registriert: 10. Sep 2021 09:00
Re: Modbus Temp -> Homematic Set Temperature
Hallo,
vielen Dank für deine Hilfe. Genau das war die richtige Lösung. Nun funktioniert das wunderbar. Beide Systeme arbeiten über openHAB zusammen.
Schöne Grüße
Florian
vielen Dank für deine Hilfe. Genau das war die richtige Lösung. Nun funktioniert das wunderbar. Beide Systeme arbeiten über openHAB zusammen.
Schöne Grüße
Florian
- udo1toni
- Beiträge: 15052
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Modbus Temp -> Homematic Set Temperature
Prima
openHAB4.3.2 stable in einem Debian-Container (bookworm) (Proxmox 8.3.3, LXC), mit openHABian eingerichtet