Modbus zu KNX / Float vs Integer

Hallo zusammen,

ich teste gerade den IPS als ModbusTCP/KNX Gateway.

Ich lese also ein Modbus Register für die bezogene Wirkenergie aus. Dieses Register hat das Format FP64 mit der Einheit Wh.

Im KNX gibt es dafür den Datenpunkt Typ 29. Elektrische Energie - Wirkarbeit in Wh

oder

Typ 13.* 4byte Vorzeichenbehaftet - 13.010 Wirkarbeit in Wh

Mit Hilfe des IPS lasse ich nun über ein Ereignis den Modbus Wert in eine KNX Gruppenadresse schreiben.

Die Instanz des Modbus-Registers entspricht einem Float aber die angelegte Instanz der KNX Gruppenadresse einem Integer.

Auf diese Art und Weise werden die Werte aber nicht in den KNX gesendet.

Erst wenn ich einen anderen KNX Datenpunkt als Instanz im IPS auswähle (der auch dem Typ Float entspricht zB DPT14) so kommen die Daten auch im KNX an.

Es gibt dabei „nur“ den Schönheitsfehler, dass die Einheit im IPS nicht stimmt - der Wert aber passt.

Wie würde man dies richtig machen können?

Die reine Anzeige (mit Einheit) wird durch die Darstellung oder das Variablenprofil bestimmt. Die kannst du frei anpassen.

Wie genau? Wenn’s ein Script ist so sollte eine einfache Typumwandlung mit Funktion intval() funktionieren.

Ich persönlich würde es schon bevorzugen, den “richtigen” Datentpyp auf den Bus zu senden, einfach um Missverständnisse zu vermeiden. Also umwandeln und dann den exakt passenden DPT nutzen.

Bin hier ganz deiner Meinung. Würde es ja auch gerne „richtig“ machen wollen…

Muss mich aber auch mehr/besser mit dem IPS beschäftigen - ist für mich alles noch relativ neu.

Ich füge im Objektbaum ein neues Objekt hinzu und wähle dabei dann das „Ereignis - Ausgelöst“ an. Darin sage ich dann, dass die „Auslösende Variable“ der Modbus-Wert ist und sich der Wert bei jeder Aktualisierung als Aktion in die KNX-Gruppenadresse schreiben soll.

Mit Script/PHP kenne ich mich leider nicht aus.

Die Frage hier ist, warum von der MODBUS Seite die Wh als FP64 kommen. Ein INT32 oder UINT32 hätte hier aus meiner Sicht mehr Sinn gemacht. Die KNX Datentypen 13.010 oder 29.010 machen es hier richtig und unterstützen nur Integer-Werte.

Wenn du es sauber auf dem KNX haben möchtest, kommst du um eine Umwandlung nicht herum. Volker hat schon die passende Funktion erwähnt. Also fix ein Skript gebaut, ein bißchen GetValue, intval und RequestAction rein, Ereignis erstellen, fertig. Würde auch als Einzeiler funktionieren, ist aber für den Einstieg etwas zu kompliziert.

Wenn du ein Skript baust und etwas nicht funktioniert, zeig es hier gerne, dann wird man dir helfen können.