GELÖST: system.Exec ("wget -q -O -" #url, &stdout, &stderr); Warum klappt das nicht? ?

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Antworten
dersmarthomer
Beiträge: 40
Registriert: 04.11.2017, 20:20
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 4 Mal

GELÖST: system.Exec ("wget -q -O -" #url, &stdout, &stderr); Warum klappt das nicht? ?

Beitrag von dersmarthomer » 02.12.2018, 00:56

Hallo!

Ich will täglich die Zählerstände an meinen Webserver schicken, der dann die Daten in eine MYSQL-DB einfügt.
Das Script in Homematic ist erstellt und der Link wird auch richtig zusammengebaut.
Aber aus einem mir nicht ersichtlichen Grund wird der Seitenaufruf nicht durchgeführt.

Anbei der Screenshot in dem man erkennt was zusammengestellt und als Link zusammengebastelt wird.
Unbenannt.JPG
Warum funzt das mit dem Aufruf system.Exec ("wget -q -O -" #url, &stdout, &stderr); nicht?


Wäre für einen Tipp/Lösung sehr dankbar!!


Kleinen Hinweis noch:
Kopiere ich den erstellten Link direkt in den Browser, wird die Datenbank richtig beschrieben.
Zuletzt geändert von dersmarthomer am 02.12.2018, 10:45, insgesamt 1-mal geändert.
Raspberrymatic auf Raspberry Pi4 mit Funkmodul RPI-RF-MOD in Selbstbaugehäuse und externer Antenne, HM Wired, HM-IP, 9 Kameras, Mediola AIO NEO, 2 Wandtablets Amazon Fire HD10 zur Visualisierung, Steuerung einer dreh-/neigbaren PV-Anlage mit HM-Wired, 10x Wemos D1 mit Sensoren.

hoedlmoser
Beiträge: 215
Registriert: 19.01.2015, 07:42
Hat sich bedankt: 22 Mal
Danksagung erhalten: 8 Mal

Re: system.Exec ("wget -q -O -" #url, &stdout, &stderr); Warum klappt das nicht? ?

Beitrag von hoedlmoser » 02.12.2018, 09:13

dann häng doch hinten

Code: Alles auswählen

WriteLine(stdout);
WriteLine(stderr);
an und schau was dem wget nicht passt, zur sicherheit machst ihn gesprächiger und nimmst das -q weg.

achja, und in die logs vom webserver hast eh auch schon gschaut?
RaspberryMatic 3.73.9.20231130 on Proxmox, HB-RF-ETH and Aurel Groundplane binded by openHAB 4.1.1

Benutzeravatar
jmaus
Beiträge: 9862
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 464 Mal
Danksagung erhalten: 1880 Mal
Kontaktdaten:

Re: system.Exec ("wget -q -O -" #url, &stdout, &stderr); Warum klappt das nicht? ?

Beitrag von jmaus » 02.12.2018, 09:37

ich123 hat geschrieben:
02.12.2018, 00:56
Warum funzt das mit dem Aufruf system.Exec ("wget -q -O -" #url, &stdout, &stderr); nicht?
Der Aufruf "funzt" nicht weil deine angegebe URL sonderzeichen wie ein & enthält die von der unix shell die zur Ausführung genutzt wird entsprechend ibterpretiert wird. Folglich musst du die URL entsprechend escapen, d.h. Den URL String in Anführungszeichen setzen. Damit sollte der system.Exec() Aufruf dann wie folgt aussehen:

Code: Alles auswählen

system.Exec("wget -q -O - '" # url # "'", &stdout, &stderr);
Damit sollte es funktionieren. Allerdings gibt es hier auch noch gewisses Optimierungspitential bei solch einfachem "wget" Aufruf bei dem du im Grunde nicht an der Ausgabe interessiert bist. Hier würde ich den system.Exec() Aufruf dann wie folgt aussehen lassen:

Code: Alles auswählen

system.Exec("wget -q -O - '" # url # "' &");
Hierbei beachte man das weglassen von stdout/stderr und das Hinzufügen von & ganz am Schluss. stdout/stderr brauchst du ja eh nicht da du wget mit -q aufrufst und danach auch nicht auswertest und das "&" am Schluss bewirkt das das wget asynchron ausgeführt wird. D.h. Die Logikengine (ReGaHss) wartet nicht darauf das das wget Kommando von seiner Ausführung zurückkehrt (was mitunter einige Sekunden/Minuten dauern könnte). Das hat den Vorteil, dass ansonsten ohne das & die ReGa quasi blockiert ist und folglich keine anderen Programme/Skripte abarbeiten kann und es somit zu Verzögerungen oder gar Kommunikationsstörungen kommen kann.
Zuletzt geändert von jmaus am 02.12.2018, 11:50, insgesamt 1-mal geändert.
RaspberryMatic 3.75.7.20240420 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

dersmarthomer
Beiträge: 40
Registriert: 04.11.2017, 20:20
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 4 Mal

Re: system.Exec ("wget -q -O -" #url, &stdout, &stderr); Warum klappt das nicht? ?

Beitrag von dersmarthomer » 02.12.2018, 10:36

Jetzt klappt es einwandfrei, habs mit der 2. Variante umgesetzt.

Vielen DANK
und einen schönen 1. Advent!

Gruß
Andreas
Raspberrymatic auf Raspberry Pi4 mit Funkmodul RPI-RF-MOD in Selbstbaugehäuse und externer Antenne, HM Wired, HM-IP, 9 Kameras, Mediola AIO NEO, 2 Wandtablets Amazon Fire HD10 zur Visualisierung, Steuerung einer dreh-/neigbaren PV-Anlage mit HM-Wired, 10x Wemos D1 mit Sensoren.

Antworten

Zurück zu „HomeMatic allgemein“