Hilfe bei Script "Übersetzung" ModBus-KNX

Hallo Leute,

Ich bräuchte mal eure Hilfe weil ich dazu nichts finde.

Ich habe hier eine Heizungssteuerung per ModBus TCP in IPS integriert. Kann die Heizung auch steuern und Betriebsarten schalten etc.
Nun möchte ich gerne die Heizung per KNX Taster an der Wand steuern.

Bei den Tastern ist das so. Sie geben bei Betriebsart Automatik eine 0 aus. Bei Komfort eine 1 etc.
Meine Heizung erwartet bei Automatik eine 1 und bei Automatik eine 4, als Beispiel.

Wie kann ich das am einfachsten von IPS „Übersetzen“ lassen? Das müsste von Modbus nach KNX und auch Rückwärts funktionieren.
Habe aber keine Idee wie ich das anstellen soll.

Bei der Temperatur übergabe war das per Script einfach da es sich ja um das selbe Ergebnis handelte.

Zum Beispiel mit der php Anweisung switch - als Pseudocode etwa so:
switch($knx_wert){
case 0: // automatik
Modbus_Write…(InstanceID, 1);
break;
case 1: // Komfort
Modbus_Write…(InstanceID, 4);
break;
}

Das Script fürst du jetzt bei Variablenänderung auf die KNX Adresse aus.
Umgekehrt geht das natürlich auch für KNX.

Aber Achtung: du solltest die Scripte evtl gegenseitig verriegeln. Damit Sie sich nicht ggf. permanend im Kreis ausführen.

Solange du bei der Übersetzung keinen Fehler machst, musst du da eigentlich nichts blockieren. Es reicht, wenn du im entsprechenden ausgelösten Ereignis „Bei Veränderung“ als Auslöser wählst.

Bei der Übersetzung sehe ich zwei Ansätze: Entweder je ein Skript mit Auslöser der Variablen bei Veränderung, welches dann den geschalteten Wert ausliest und die andere Variable entsprechend schaltet (das würde ich übrigens per RequestAction und nicht den gerätespezifischen Befehlen machen).

Alternativ kannst du für jeden Wert ein eigenes ausgelöstes Ereignis erstellen, dann brauchst du gar keine Skripte. Also beispielsweise ein ausgelöstes Ereignis mit dem Auslöser des Schalters, welches bei „Automatik“ das Ziel, die Heizungsvariable, auch auf „Automatik“ schaltet. Wenn die Profile gut gemacht sind, dann musst du dich auch gar nicht um die tatsächlichen Zahlen dahinter kümmern und kannst „Automatik“ und co per Dropdown auswählen. Dies ist meiner Meinung nach die deutlich einfachere Lösung, skaliert aber schlechter, wenn du viele Einstellungsmöglichkeiten hast. Wenn du mit Skripten fit bist und es ein paar mehr Optionen gibt, dann würde ich den ersten Ansatz wählen.

Ich danke euch für eure Lösungsansätze.

Alternativ kannst du für jeden Wert ein eigenes ausgelöstes Ereignis erstellen, dann brauchst du gar keine Skripte. Also beispielsweise ein ausgelöstes Ereignis mit dem Auslöser des Schalters, welches bei „Automatik“ das Ziel, die Heizungsvariable, auch auf „Automatik“ schaltet. Wenn die Profile gut gemacht sind, dann musst du dich auch gar nicht um die tatsächlichen Zahlen dahinter kümmern und kannst „Automatik“ und co per Dropdown auswählen.

Das habe ich nun bei einem Raum probiert und funktioniert wunderbar. An so eine einfache Lösung hatte ich gar nicht gedacht. Aber das ist ganz schön Zeitintensiv. Ich habe pro Raum 5 Zustände. Das wären 10 Ereignisse pro Raum.

Aber ich probiere mich nun doch an einem Script. Ich glaube per Switch/case und Request action sollte ich das hin bekommen.
Falls es zu einem Ergebnis kommt werde ich es hier teilen :wink:

Aktuell löse ich das nun mit folgendem Script.

Verkehrt herum genauso.
Funktioniert aktuell sehr gut, da sich die Modbus Variable nur alle 5 Minuten aktualisiert

<?
$Betriebsart = GetValueInteger (36277);
$KNXinstanz = 33160;

switch($Betriebsart){
case 0:
KNX_WriteDPT20 ($KNXinstanz ,4);
break;
case 1:
KNX_WriteDPT20 ($KNXinstanz ,0);
break;
case 2:
KNX_WriteDPT20 ($KNXinstanz ,3);
break;
case 3:
KNX_WriteDPT20 ($KNXinstanz ,2);
break;
case 4:
KNX_WriteDPT20 ($KNXinstanz ,1);
break;
}

?>