cuxd curl oder system curl oder wget

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

Moderator: Co-Administratoren

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

Re: cuxd curl oder wget

Beitrag von Baxxy » 13.09.2025, 11:44

joerg_rw hat geschrieben:
13.09.2025, 11:32
mutmassen das "exit(28)" ist der returncode
Denke auch das Uwe (CUxD) hier die Exit-Codes vom ausgeführten Befehl zurückgibt.

Hier mal für wget:
https://www.man7.org/linux/man-pages/ma ... XIT_STATUS

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

Re: cuxd curl oder wget

Beitrag von Baxxy » 13.09.2025, 11:49

grmpf hat geschrieben:
13.09.2025, 11:44
Aber nochmal zum Kern: ist es nun besser curl per system.exec oder per cuxd.exec zu nutzen und ... warum?
Das ist wohl ne Glaubensfrage auf die es m.E. keine klare Antwort gibt.
Richtig konfiguriert kann man heutzutage beides problemlos nutzen.

Benutzeravatar
grmpf
Beiträge: 958
Registriert: 21.01.2012, 12:16
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 18 Mal
Danksagung erhalten: 22 Mal

Re: cuxd curl oder wget

Beitrag von grmpf » 13.09.2025, 12:00

Also stehen sich 2 Varianten gegenüber:

Code: Alles auswählen

! Senden
dom.GetObject("CUxD.CUX2801001:2.CMD_EXEC").State("extra/curl --max-time 5 -s -k https://api.telegram.org/bot"#botAPI#"/sendMessage -d text='"#message#"' -d chat_id="#chatid);
und...

Code: Alles auswählen

string stdout; 
string stderr;
system.Exec("timeout 5 curl --max-time 5 -s -k https://api.telegram.org/bot"#botAPI#"/sendMessage -d text='"#message#"' -d chat_id="#chatid, &stdout, &stderr);
wobei ich beim Zweiten eher denke dass timeout und max-time doppeltgemoppelt sind?
Gert
________________________________
HM1 | Raspi 3B+/RFUSB HM+HMIP (Altbau), nur Funk: >80 Geräte
HM2 | Raspi 3B/HM-MOD-RPI-PCB (Altbau), nur Funk: HM 18x Rollladensteuerung + FB, tw. HMIP Heizungssteuerung
HM3 | CCU3 mit RM (Neubauinst.) HMIPW (3x DRI, 5x DRS, kpl. FBH-Steuerung) plus HMIP (BROLL, Bewmelder etc.)
HM4 | Raspi 3B/RFUSB (Neubauinst.) HMIPW (1x DRI, 3x DRS, kpl. FBH-Steurung) plus HMIP (BROLL, Bewmelder etc.)

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

Re: cuxd curl oder wget

Beitrag von uwe111 » 13.09.2025, 12:11

Baxxy hat geschrieben:
13.09.2025, 11:44
joerg_rw hat geschrieben:
13.09.2025, 11:32
mutmassen das "exit(28)" ist der returncode
Denke auch das Uwe (CUxD) hier die Exit-Codes vom ausgeführten Befehl zurückgibt.

Hier mal für wget:
https://www.man7.org/linux/man-pages/ma ... XIT_STATUS
Hier die Curl Exit-Codes: https://everything.curl.dev/cmdline/exitcode.html
Hier steht auch was zu Befehlszeilen-Timeouts: https://everything.curl.dev/usingcurl/timeouts.html

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
grmpf
Beiträge: 958
Registriert: 21.01.2012, 12:16
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 18 Mal
Danksagung erhalten: 22 Mal

Re: cuxd curl oder wget

Beitrag von grmpf » 13.09.2025, 12:15

Danke! Die exit-codes hatte ich gar nicht so im Visier - eher die Zeiten von bis zu 135s!

und btw: warum steht bei cuxd eigentlich "extra/curl" ?? "curl reicht doch! ODER... war das auch was Historisches?
Gert
________________________________
HM1 | Raspi 3B+/RFUSB HM+HMIP (Altbau), nur Funk: >80 Geräte
HM2 | Raspi 3B/HM-MOD-RPI-PCB (Altbau), nur Funk: HM 18x Rollladensteuerung + FB, tw. HMIP Heizungssteuerung
HM3 | CCU3 mit RM (Neubauinst.) HMIPW (3x DRI, 5x DRS, kpl. FBH-Steuerung) plus HMIP (BROLL, Bewmelder etc.)
HM4 | Raspi 3B/RFUSB (Neubauinst.) HMIPW (1x DRI, 3x DRS, kpl. FBH-Steurung) plus HMIP (BROLL, Bewmelder etc.)

joerg_rw
Beiträge: 102
Registriert: 09.02.2015, 13:20
Hat sich bedankt: 134 Mal
Danksagung erhalten: 6 Mal

Re: cuxd curl oder wget

Beitrag von joerg_rw » 13.09.2025, 12:55

grmpf hat geschrieben:
13.09.2025, 12:00

Code: Alles auswählen

string stdout; 
string stderr;
system.Exec("timeout 5 curl --max-time 5 -s -k https://api.telegram.org/bot"#botAPI#"/sendMessage -d text='"#message#"' -d chat_id="#chatid, &stdout, &stderr);
wobei ich beim Zweiten eher denke dass timeout und max-time doppeltgemoppelt sind?
ja, "--max-time 5" reicht bei curl (anders als bei wget, das macht mit seinen timeout options nicht das was man zunaechst erwarten wuerde), wenn curl da mit timeout rausfliegt dann bekommst du eben 28 im returncode(=system.Exec(...) ) den du wieder rausgeworfen hast. Falls alles normal geklappt hat, ist returncode = 0. Ich bin immer der Auffassung man sollte gerade um die Fehlerfaelle sich ausreichend kuemmern und entsprechend drauf reagieren.
Zuletzt geändert von joerg_rw am 13.09.2025, 16:36, insgesamt 1-mal geändert.

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

Re: cuxd curl oder system curl oder wget

Beitrag von uwe111 » 13.09.2025, 12:57

grmpf hat geschrieben:
13.09.2025, 12:15
Die exit-codes hatte ich gar nicht so im Visier - eher die Zeiten von bis zu 135s!
Ok, beim Aufruf mittels CUxD CMD_EXEC blockiert die CCU nicht.
grmpf hat geschrieben:
13.09.2025, 12:15
warum steht bei cuxd eigentlich "extra/curl" ??
Weil Dein Aufruf über die Befehlszeile aus historischen Gründen mittels extra/curl erfolgt. Nur curl funktioniert auch. Am Ende macht das aber keinen Unterschied.

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
grmpf
Beiträge: 958
Registriert: 21.01.2012, 12:16
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 18 Mal
Danksagung erhalten: 22 Mal

Re: cuxd curl oder system curl oder wget

Beitrag von grmpf » 13.09.2025, 15:10

OK - danke an alle! Dann seh ich für mich klarer:
Ich werde mit cuxd CMD_EXEC weitermachen aber da zum einen immer den --max-time n einfügen und das /extra rauslöschen. Grund ist vor allem:
uwe111 hat geschrieben:
13.09.2025, 12:57
beim Aufruf mittels CUxD CMD_EXEC blockiert die CCU nicht.
wget nutze ich seit langem nicht mehr. Am Anfang hatte ich da mal Wetterdaten aus dem Netz gefischt aber das Verhältnis der CCU-Stabilität zum Ertrag war am Ende zu schlecht.

curl über timeout und system.exec ist auch ok aber aufgrund der Argumente hier ziehe ich cuxd vor!

Nochmals Danke an alle - und an die Arbeit 8)
Gert
________________________________
HM1 | Raspi 3B+/RFUSB HM+HMIP (Altbau), nur Funk: >80 Geräte
HM2 | Raspi 3B/HM-MOD-RPI-PCB (Altbau), nur Funk: HM 18x Rollladensteuerung + FB, tw. HMIP Heizungssteuerung
HM3 | CCU3 mit RM (Neubauinst.) HMIPW (3x DRI, 5x DRS, kpl. FBH-Steuerung) plus HMIP (BROLL, Bewmelder etc.)
HM4 | Raspi 3B/RFUSB (Neubauinst.) HMIPW (1x DRI, 3x DRS, kpl. FBH-Steurung) plus HMIP (BROLL, Bewmelder etc.)

joerg_rw
Beiträge: 102
Registriert: 09.02.2015, 13:20
Hat sich bedankt: 134 Mal
Danksagung erhalten: 6 Mal

Re: cuxd curl oder system curl oder wget

Beitrag von joerg_rw » 13.09.2025, 16:16

grmpf hat geschrieben:
13.09.2025, 15:10
OK - danke an alle! Dann seh ich für mich klarer:
Ich werde mit cuxd CMD_EXEC weitermachen aber da zum einen immer den --max-time n einfügen und das /extra rauslöschen. Grund ist vor allem:
uwe111 hat geschrieben:
13.09.2025, 12:57
beim Aufruf mittels CUxD CMD_EXEC blockiert die CCU nicht.
joh, geht mit angehaengtem "&" ganz am Ende des Befehls + parameter auch, also "curl ... foo ... bar&"
viewtopic.php?f=31&t=59101#p585248
>>1. Kommandostring (wenn & am Ende dann wird das Kommando in den Background gesendet und system.Exec() kehrt sofort zurück und die darauffolgenden 3 parameter (stderr, stdout, stdin) sind nicht wirksam/notwendig.<<
Wie Jens im anderen thread meinte: >>Es ist wie so oft: Mehere Wege führen nach Rom :D<< 8) :P
Mir ist das CUxD.exec zu kompliziert zu benutzen: erstmal virtuelles device anlegen, benamsen, beschriften und Zeug, dann auch wieder Fehlerbehandlung, was macht dein script wenn das CUxD umbenannt oder geloescht wurde? system.Exec ist gradlinig mit fast keinen Abhaengigkeiten ueber die eine script codeline und die vorherige def von stdout, stderr, rc hinaus -- alles auf einem Bildschirm auf einen Blick <3

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

Re: cuxd curl oder system curl oder wget

Beitrag von Xel66 » 13.09.2025, 22:27

joerg_rw hat geschrieben:
13.09.2025, 16:16
... und die darauffolgenden 3 parameter (stderr, stdout, stdin) sind nicht wirksam/notwendig.<<
Da bin ich auch schon drauf reingefallen. Das hilft Dir nur bei fire&forget-Aufrufen (HTTP-Befehle an Aktoren, Telegram etc.). Fragst Du Daten ab, Die Du weiterverarbeiten willst, brauchst Du stdout.

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

Antworten

Zurück zu „CUxD“