Modbus Wert mit sendCommand schreiben / Umwandlung string --> int
Verfasst: 15. Aug 2024 21:13
Ich versuche gerade, ein Bundle für eine Wärmepumpe zu schreiben. Für die Übergabe der PV-Überschussleistung muss ich einen Wert in ein Register mit 2 Byte, also Datentyp int schreiben.
Der Channel im Thing hat den Parametertyp number:Power, entsprechend hat auch das Item, das ich dafür generiere, den Parametertyp number:Power.
Wenn ich jetzt mit
einen Wert an das Item sende, bekommt er vom Item die Einheit W angehängt und wird auch so (als String ?) an den Code des Bundles übergeben.
Damit kommt mein abgekupfertes Binding nicht zurecht, es erwartet eine Zahl.
Ich habe mir jetzt erst mal so beholfen, dass ich dem Channel ein zweites Item lambdahp_actual_power_number verlinkt habe, das den Parametertyp number hat. Dann kommt der Code damit klar.
Das ist natürlich etwas unschön, denn die Nutzer des Bundles müssten das dann auch machen: Ein Item zum Lesen mit der passenden Einheit W, ein anderes zum Schreiben ohne Einheit. Das ist etwas unlogisch.
Sicher gibt es eine Funktion (in Java), mit der man den an den Code übergebenen String in einen Integerwert übersetzen kann.
Konkreter: Alles, was nicht {0..9, +, -} ist, aus dem String löschen und daraus einen Integerwert machen.
Ergänzung: Müsste der Code dafür nicht irgendwo im Quelltext des modbus-Bundle versteckt sein, denn der thing-type data erzeugt ja diverse channels Value as Number .. Value as Rollershutter und kann dann wohl auch mit sendCommand an die verschiedenen Datentypen umgehen.
Der Channel im Thing hat den Parametertyp number:Power, entsprechend hat auch das Item, das ich dafür generiere, den Parametertyp number:Power.
Wenn ich jetzt mit
Code: Alles auswählen
int P_Available = 1234
lambdahp_actual_power.sendCommand(P_Available)
Damit kommt mein abgekupfertes Binding nicht zurecht, es erwartet eine Zahl.
Ich habe mir jetzt erst mal so beholfen, dass ich dem Channel ein zweites Item lambdahp_actual_power_number verlinkt habe, das den Parametertyp number hat. Dann kommt der Code damit klar.
Das ist natürlich etwas unschön, denn die Nutzer des Bundles müssten das dann auch machen: Ein Item zum Lesen mit der passenden Einheit W, ein anderes zum Schreiben ohne Einheit. Das ist etwas unlogisch.
Sicher gibt es eine Funktion (in Java), mit der man den an den Code übergebenen String in einen Integerwert übersetzen kann.
Konkreter: Alles, was nicht {0..9, +, -} ist, aus dem String löschen und daraus einen Integerwert machen.
Ergänzung: Müsste der Code dafür nicht irgendwo im Quelltext des modbus-Bundle versteckt sein, denn der thing-type data erzeugt ja diverse channels Value as Number .. Value as Rollershutter und kann dann wohl auch mit sendCommand an die verschiedenen Datentypen umgehen.