Strings + Exec

Anbindung von FS20-Komponenten, ELV-Wetterstationen, EnOcean und DMX an HomeMatic

Moderator: Co-Administratoren

Antworten
Blubbel
Beiträge: 87
Registriert: 16.01.2016, 17:38
System: CCU
Hat sich bedankt: 3 Mal

Strings + Exec

Beitrag von Blubbel » 12.08.2025, 14:25

Grüß Euch,
ForumSuFu genutz aber leider, ich finde dazu keine Hilfe.
Worum geht's? Ich möchte über die CUXD einen beliebigen WErt über eine Systemvariable) an dem Modbus schreiben.
Siehe letzter Eintrag von mir hier viewtopic.php?f=26&t=55722&start=210
Dafür habe ich mir einen String gebastelt "Final". LEider klappt das nicht (auch nicht per SysExec ohne CUXD).
Vielleicht ist es ja nur eine Kleinigkeit, bzw, wird garnicht unterstützt.


Vielen DANK für Tipps, Andi

Code: Alles auswählen

var SellFistValue = dom.GetObject("MOD_Maximum_Power-Solar_Sell_WRITE").State().ToString(0);
var SellFistValue = 7654;
string StringPart1="tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.224.152 502 1 16 143 ";
string StringModbus = (StringPart1 + SellFistValue);
string Final = '"' + StringModbus+  '"';

!Den State als Variable abschicken geht nicht
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(Final);

! -> geht einwandfrei - >
!dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.224.152 502 1 16 143 1000" );

Xel66
Beiträge: 16988
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 800 Mal
Danksagung erhalten: 1992 Mal

Re: Strings + Exec

Beitrag von Xel66 » 12.08.2025, 14:37

Strings werden nicht mit + sondern mit # verknüpft.

Gruß Xel66
-------------------------------------------------------------------------------------------
737 Kanäle in 182 Geräten und 440 CUxD-Kanäle in 51 CUxD-Geräten:
398 Programme, 465 Systemvariablen und 222 Direktverknüpfungen,
OpenCCU Version: 3.85.7.20260131 (rpi3)
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch, Logging von Programmläufen

Benutzeravatar
Baxxy
Beiträge: 14634
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Berlin
Hat sich bedankt: 937 Mal
Danksagung erhalten: 3305 Mal

Re: Strings + Exec

Beitrag von Baxxy » 12.08.2025, 14:45

Geht beides, aber ich bin auch für #

Mach doch mal ein...

Code: Alles auswählen

WriteLine(Final);
... rein um zu gucken wie dein String aussieht.

Tyfys
Beiträge: 651
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 35 Mal
Danksagung erhalten: 154 Mal

Re: Strings + Exec

Beitrag von Tyfys » 12.08.2025, 15:18

Der String wird von " begrenzt.
Ist das das Problem ?
Gruß
Harry

Benutzeravatar
uwe111
Beiträge: 4939
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 4 Mal
Danksagung erhalten: 276 Mal
Kontaktdaten:

Re: Strings + Exec

Beitrag von uwe111 » 12.08.2025, 17:32

Tyfys hat geschrieben:
12.08.2025, 15:18
Der String wird von " begrenzt.
Ist das das Problem ?
Ja, das sehe ich auch als Problem.

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.13, SSH KeyDir

Benutzeravatar
Baxxy
Beiträge: 14634
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Berlin
Hat sich bedankt: 937 Mal
Danksagung erhalten: 3305 Mal

Re: Strings + Exec

Beitrag von Baxxy » 12.08.2025, 17:39

Na dann kann er doch mal testweise einfach statt Final eben StringModbus übergeben, oder?

Code: Alles auswählen

[SellFistValue     ](var-->integer): 7654
[StringPart1       ](string ): tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.224.152 502 1 16 143 
[StringModbus      ](string ): tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.224.152 502 1 16 143 7654
[Final             ](string ): "tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.224.152 502 1 16 143 7654"

Benutzeravatar
MichaelN
Beiträge: 12637
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 850 Mal
Danksagung erhalten: 2177 Mal

Re: Strings + Exec

Beitrag von MichaelN » 12.08.2025, 17:39

Eben, final wird um " ergänzt, der direkte Befehl nicht

Blubbel
Beiträge: 87
Registriert: 16.01.2016, 17:38
System: CCU
Hat sich bedankt: 3 Mal

Re: Strings + Exec

Beitrag von Blubbel » 12.08.2025, 20:38

Oft sieht man den Wald vor lauter Bäumen nicht ;)
Danke für das Entfernen des Bretts vor dem Kopf.
Ich habe versucht, den String nachzubauen, natürlich begrenzt durch " ".
Ganz ohne, direkt übergeben als

Code: Alles auswählen

tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.224.152 502 1 16 143 7654
hat es geklappt!
VIELEN VIELEN DANK für den Schubser.

Für alle DEYE Hybrid Wechselrichter User, die Probleme mit dem iObroker & MOD-Bus haben, so macht man es mit der Homematic

Code: Alles auswählen

!Register 142 auf Grid Sell First schalten ... 142 0)
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.224.152 502 1 16 142 0");

!Der einzuspeisende Wert steht in einer Sytemvariable, übergeben vom iObroker
!Zum Testen im Skript als Beispiel -> var SellFistValue = 7654;
!Einlesen und sicherheitshalber in einen String konvertieren
var SellFistValue = dom.GetObject("MOD_Maximum_Power-Solar_Sell_WRITE").State().ToString(0);

!String zusammenbauen -> IP + Port + Geräte ID + 16 (write multible registers) + RegisterNummer + Wert
string StringPart1="tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.224.152 502 1 16 143 ";
string StringModbus = (StringPart1 + SellFistValue);

!Vertrauen ist gut, Kontrolle ist besser
WriteLine(StringModbus);

!Den State als Variable übergeben und klappt
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(StringModbus); 

Antworten

Zurück zu „CUxD“