NEWS
Script zum auslesen eines C.M.I von TA UVR1611
-
Hallo Sineos,
erstmal vielen Dank für deinen tollen Beitrag zur Übertragung der UVR-Daten mittel Can- und Modbus.
Derzeit habe ich damit nur ein Problem:
Wenn ich Werte von iobroker zur UVR übertrage werden nur Integerzahlen zum Modbuseingang der UVR weitergeben.
Das Objekt in Iobroker (erstellt im Modbusadapter dort : input Registers ) zeigt eine Real-Zahl an.
Ich habe schon einige Einstellungen versucht, leider ohne Erfolg.
Derzeitige Einstellung: Signed 16Bit Big Endian im Modbusein- und ausgang .
In der UVR : Modbuseingang: Funktion 04
Vielleicht kannst du einen Tip geben?
-
Wenn ich Werte von iobroker zur UVR übertrage werden nur Integerzahlen zum Modbuseingang der UVR weitergeben.
Das Objekt in Iobroker (erstellt im Modbusadapter dort : input Registers ) zeigt eine Real-Zahl an. `
Das liegt an der eigenwilligen Art der UVR mit Größen und Einheiten umzugehen. Über den Bus und, nach meinem Eindruck, auch intern arbeitet die UVR nur mit Integer Zahlen und erst in Kombination mit einer Einheit wird das ganze zu einer Float.
So hat z.B. die Einheit Temperatur 1 Dezimalstelle, Leistung (kW) 2 Dezimalstellen usw. Ich hab mal für ein JS-Script die Anzahl Stellen rausgesucht:
var MeasurementMapping = { '0': { Name: 'None', Unit: 'None', Decimals: 0 }, '1': { Name: 'Temperature', Unit: '°C', Decimals: 1 }, '2': { Name: 'Global Radiation', Unit: 'W/m²', Decimals: 0 }, '3': { Name: 'FlowRate', Unit: 'l/h', Decimals: 0 }, '4': { Name: 'Time', Unit: 's', Decimals: 0 }, '5': { Name: 'Time', Unit: 'min', Decimals: 0 }, '8': { Name: 'Percent', Unit: '%', Decimals: 1 }, '10': { Name: 'Power', Unit: 'kW', Decimals: 2 }, '11': { Name: 'Power Consumption', Unit: 'kWh', Decimals: 1 }, '12': { Name: 'Power Consumption', Unit: 'MWh', Decimals: 0 }, '13': { Name: 'Voltage', Unit: 'V', Decimals: 2 }, '14': { Name: 'Current', Unit: 'mA', Decimals: 1 }, '15': { Name: 'Time', Unit: 'h', Decimals: 0 }, '16': { Name: 'Time', Unit: 'd', Decimals: 0 }, '17': { Name: 'Pulse', Unit: 'None', Decimals: 0 }, '18': { Name: 'Resistance', Unit: 'kOhm', Decimals: 2 }, '19': { Name: 'Volume', Unit: 'l', Decimals: 0 }, '20': { Name: 'Speed', Unit: 'km/h', Decimals: 0 }, '22': { Name: 'FlowRate', Unit: 'l/min', Decimals: 0 }, '23': { Name: 'Pressure', Unit: 'bar', Decimals: 2 }, '24': { Name: 'Performance Factor', Unit: 'None', Decimals: 2 }, '28': { Name: 'Volume', Unit: 'm3', Decimals: 0 }, '35': { Name: 'FlowRate', Unit: 'l/d', Decimals: 0 }, '36': { Name: 'Speed', Unit: 'm/s', Decimals: 0 }, '37': { Name: 'FlowRate', Unit: 'm3/min', Decimals: 0 }, '38': { Name: 'FlowRate', Unit: 'm3/h', Decimals: 0 }, '39': { Name: 'FlowRate', Unit: 'm3/d', Decimals: 0 }, '50': { Name: 'Currency', Unit: 'Euro', Decimals: 2 }, '51': { Name: 'Currency', Unit: 'USD', Decimals: 2 }, '52': { Name: 'Absolute Humidity', Unit: 'g/m3', Decimals: 1 }, '53': { Name: 'None', Unit: 'None', Decimals: 5 }, '54': { Name: 'Angle', Unit: 'Degree', Decimals: 2 }, '58': { Name: 'None', Unit: 'None', Decimals: 1 }, '63': { Name: 'Current', Unit: 'A', Decimals: 1 }, '65': { Name: 'Pressure', Unit: 'mbar', Decimals: 1 }, '66': { Name: 'Pressure', Unit: 'Pa', Decimals: 0 }, '-1': { Name: 'Undefinded', Unit: 'None', Decimals: 0 } };
Ist aber ein älterer Firmware Stand, ich glaube die haben was geändert.
Heisst also übersetzt, du musst in der UVR und im CMI die richtige Messgröße einstellen und eine entsprechend skalierte Integerzahl über den Bus schicken. So wird dann aus 227 und der Einheit Temperatur die gewünschten 22,7 °C.
Im ioBroker Modbus Adapter kann man bei den Registern das Verhalten über den Faktor steuern. So würde hier ein Temperaturwert einen Faktor 10 bekommen. Sprich ein anderer ioBroker Adapter sendet 22,7 °C, der Modbus Adpater skaliert mit 10 (=227) und die UVR macht dann über die eingestellte Einheit wieder 22,7 draus.
Braucht man eine höhere Genauigkeit, gibt es auch eine dimensionslose Einheit mit 5 Dezimalstellen. Hier wäre entsprechend mit 100.000 zu skalieren.
-
Vielen Dank für die tolle Erklärung.
Das mit den Messgrößen habe ich damit super hinbekommen.
Allerdings sieht es derzeit so aus, als würde die CMI das Register des Modbus-Adapters nicht triggern.
Nur wenn ich den Modbus-Adapter neu starte, bekomme ich neue Werte.
Meine CMI Einstellung:
siehe Bild
6962_download__1_.png -
Allerdings sieht es derzeit so aus, als würde die CMI das Register des Modbus-Adapters nicht triggern.
Nur wenn ich den Modbus-Adapter neu starte, bekomme ich neue Werte. `
Die Anzeige in den CMI Einstellungen aktualisiert sich nicht freiwillig (zumindest bei mir). Wenn ein neuer Wert gesendet wurde (Intervallzeiten beachten) und man drückt, wie in deinem Screenshot dargestellt, nochmals auf "Speichern" aktualisiert sich der Wert.In der UVR sollten die Werte ankommen, also am besten dort testen oder über ein Online-Schema in der CMI.
-
Hallo,
das sich die Anzeige im CMI nur nach dem Speichern erneut aktualisiert ist klar.
Leider aktualisiert sich der Wert in der UVR sowie im Onlineschema erst nach Neustart des Modbus-Adapters.
-
Sorry für die späte Antwort, ich war geschäftlich unterwegs.
Kann mir keinen direkten Reim drauf machen, warum es bei dir nicht funktioniert. Läuft bei mir anstandslos mit mehreren Werten. Ich hab mal ein Beispiel von mir angehängt:
Kann es vielleicht sein, dass du eine hohe "Sendebedingung bei Änderung" hast?
-
Hallo Sineos:
vielen Dank für deine Mühe.
Genauso wie in deinen Beispiel habe ich die Einstellungen auch.
Trotzdem werden ohne periodischen Modbus_Neustart keine Werte in Richtung Modbus (iobroker) und Modbus (UVR1611) aktualisiert.
Ich habe Werte in sämtlichen Registern getestet – gleiches Ergebnis.
Ich wollte einen Heizkreis der UVR mittels Raumthermostat der Homematic steurern (Vorlaufsoll).
Ich muss mir was anderes einfallen lassen.
Nochmal vielen Dank für die Mühe.
-
Vielleicht noch ein paar Ideen:
-
Ich benutze node-red für die Übertragung an den Modbus Adapter. Siehe Screenshot
-
Screenshot meines Eingangsregisters
-
In der CMI Firmware gab es ein paar Bugfixes den Modbus betreffend. Neueste CMI Firmware ist gerade 1.30.2
-
Ggf. mal den Modbus Adpater auf Debug setzen und schauen ob er auch tatsächlich periodisch neue Werte bekommt
-
Den Modbus Adpater über die Konsole (nicht in der WebUI) neu installieren und schauen ob diese fehlerfrei durchläuft
-
-
Habe alles durchprobiert.
Neuste Firmware auf dem CMI, Modbus Adpater auf Debug gesetzt, Adapter neu installiert über Konsole.
Immer das gleiche Ergebnis: in Richtung Iobroker läuft der Modbus; in Richtung CMI leider nicht.
Scheint am CMI zu liegen.
Nochmal vielen Dank für deine Mühe.
Wenn ich dazu komme teste ich es mal über node-red.
Grüsse
-
Wenn dein CMI einmalig die Daten nach einem Neustart des Modbus Adapter bekommt, dann glaube ich nicht, dass es am CMI liegt. Auch ist das CMI der Master und sitzt deshalb eigentlich nur faul rum und wartet bis ein Slave sich meldet. Heißt, der Modbus Adapter baut für jeden Wert eine neue Verbindung zum Master auf. Ich denke, das Problem liegt irgendwo in deiner ioBroker Instanz.
Du kannst den Modbus auch mit Tools wie z.B. http://www.tuomio.fi/ananas/index.htm testen:
-
Hallo Sineos,
vielen Dank für den Tipp mit dem Tool Ananas.
An ihm konnte ich erkennen, dass es nicht am CMI liegt.
In Ananas wird der Modbus Wert des iobrokers auch nicht aktualisiert.
Dies bezieht sich aber nur auf das Input-Register.
Die Holdings und Coils werden aktualisiert!
Ich kann es mir nicht erklären.
Die Werte in den Objekten des Iobroker werden brav aktualisiert und angezeigt.
Ich weiss nicht weiter.
-
Mir fällt jetzt leider auch nichts mehr ein.
Einzig vielleicht auf https://github.com/ioBroker/ioBroker.modbus ein Issue aufmachen mit Referenz zu diesem Thread. Vielleicht können die Entwickler zusätzliche Debug-Ausgaben hinzufügen, um zu sehen wo was falsch läuft.
-
Und momentan maximal den Modbus-Adapter in Version 1.1.2 verwenden, da die Slave-Option in 2.x broken ist.
-
Lässt sich leider bei mir nicht mehr downgraden..
-
Öhm, doch geht. Brauchst Du aber nicht mehr, weil jetzt eine neuere Variante von 2.0.6 auf Github steht. Die neuste Version (immer noch 2.0.6, aber von Bluefox nachgebessert) tut jetzt bei "Slave" was sie soll.
Lösung: Die Partner-ID auf 0.0.0.0 stellen oder die IP des ioBroker Servers angeben. Das funktioniert bei mir. Den Rest wie bei 1.1.2 lassen.
Nutzt du auch eine UVR? Edit: Dumme Frage
-
Vielen Dank für den Hinweis.
Habe es getestet und es läuft mit der IP 0.0.0.0
Ja, ich benutze auch eine UVR1611 und steuere mit dem Modbus Pumpenabschaltungen usw.
-
Nur sieht es derzeit so aus, als wäre die Logik der coil's umgedreht.
true=false
false=true
-
Hilfe, was sind Coils? Ich übertrage nur einige analoge Messwerte. Und das klappt.
-
Das sind die diskreten Ausgänge des Modbus.
Ich benutzte Sie zum Übertragen von Logikwerten.
-
Kannst Du bitte einige Screenshots machen von den Einstellungen, die Du verwendest, um digitale Werte aus der UVR zu ioBroker zu übertragen und ggf auch zurück? Bei mir steht da z.B. immer 0 im ioBroker, obwohl das CMI am Modbus-Ausgang "Ein" sagt.