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: 16247
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 743 Mal
Danksagung erhalten: 1865 Mal

Re: Strings + Exec

Beitrag von Xel66 » 12.08.2025, 14:37

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

Gruß Xel66
-------------------------------------------------------------------------------------------
617 Kanäle in 166 Geräten und 242 CUxD-Kanäle in 45 CUxD-Geräten:
366 Programme, 357 Systemvariablen und 209 Direktverknüpfungen,
RaspberryMatic Version: 3.75.7.20240420 (rpi3) + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch, Logging von Programmläufen

Benutzeravatar
Baxxy
Beiträge: 13893
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Berlin
Hat sich bedankt: 856 Mal
Danksagung erhalten: 3101 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: 641
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 33 Mal
Danksagung erhalten: 152 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: 4925
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 4 Mal
Danksagung erhalten: 274 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: 13893
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Berlin
Hat sich bedankt: 856 Mal
Danksagung erhalten: 3101 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: 12053
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 825 Mal
Danksagung erhalten: 2077 Mal

Re: Strings + Exec

Beitrag von MichaelN » 12.08.2025, 17:39

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

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

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“