Autor Thema: [gelöst] qx und wget blockiert FHEM bei Nutzung von RSS  (Gelesen 678 mal)

Offline h002

  • Full Member
  • ***
  • Beiträge: 109
Hallo,

wenn folgender Teil meines DOIF ausgeführt wird, blockiert FHEM.

signal_command {
if ( [?signal:msgText] =~ /^rss$/) {
qx"wget --quiet --no-check-certificate https://fhem.intranet:8083/fhem/rss/rssFeed.png -O /opt/fhem/fhem_png_plots/rss.png";
qx"wget --quiet --no-check-certificate https://fhem.intranet:8083/fhem/rss/rssFeedS10.png -O /opt/fhem/fhem_png_plots/rssS10.png";
set_Exec("send_rss_info",5,'fhem_set("signal send &/opt/fhem/fhem_png_plots/rss.png &/opt/fhem/fhem_png_plots/rssS10.png")');
}
}

Rufe ich die URL zu dem PNG direkt auf, wird mir das Bild korrekt angezeigt.

Direkt auf der Shell wird das Bild mit dem folgenden Kommando korrekt gespeichert.
sudo -u fhem wget --quiet --no-check-certificate https://fhem.intranet:8083/fhem/rss/rssFeed.png -O /opt/fhem/fhem_png_plots/rss.png

Starte ich das Kommando über die Weboberfläche von FHEM, blockiert das Kommando FHEM.
{qx"wget --quiet --no-check-certificate https://fhem.intranet:8083/fhem/rss/rssFeed.png -O /opt/fhem/fhem_png_plots/rss.png"}
Die Datei wird zwar auf dem Filesystem erzeugt, ist aber 0 Byte groß.

Im Log bekomme ich bei Ausführung innerhalb von FHEM (DOIF oder WebGui) bis zur Blockierung folgendes angezeigt.

--2022-05-05 16:00:11--  https://fhem.intranet:8083/fhem/rss/rssFeed.png
Auflösen des Hostnamens fhem.intranet (fhem.intranet)… 192.168.1.159
Verbindungsaufbau zu fhem.intranet (fhem.intranet)|192.168.1.159|:8083 … verbunden.

Es ist dann ein Prozess sichtbar, den ich erst beenden muss, bevor FHEM wieder reagiert.
fhem     25235 19586  0 16:39 ?        00:00:00 wget --quiet --no-check-certificate https://fhem.intranet:8083/fhem/rss/rssFeed.png -O /opt/fhem/fhem_png_plots/rss.png

Führe ich das Kommando direkt auf der Shell aus, bekomme ich diesen Output und alles arbeitet wie gewünscht.

pi@fhem:/opt/fhem/fhem_png_plots $ sudo -u fhem wget --no-check-certificate https://fhem.intranet:8083/fhem/rss/rssFeed.png -O /opt/fhem/fhem_png_plots/rss.png
--2022-05-05 15:51:10--  https://fhem.intranet:8083/fhem/rss/rssFeed.png
Auflösen des Hostnamens fhem.intranet (fhem.intranet)… 192.168.1.159
Verbindungsaufbau zu fhem.intranet (fhem.intranet)|192.168.1.159|:8083 … verbunden.
WARNUNG: Dem Zertifikat von »fhem.intranet« wird nicht vertraut.
WARNUNG: Das Zertifikat von »»fhem.intranet«« hat keinen bekannten Austeller.
Der Zertifikat-Eigentümer passt nicht zum Hostname »fhem.intranet«.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 101632 (99K) [image/png]
Wird in »/opt/fhem/fhem_png_plots/rss.png« gespeichert.

/opt/fhem/fhem_png_plots/rss.png                     100%[======================================================================================================================>]  99,25K   599KB/s    in 0,2s

2022-05-05 15:51:13 (599 KB/s) - »/opt/fhem/fhem_png_plots/rss.png« gespeichert [101632/101632]

Zu diesem Problem kommt es, nachdem ich mein DOIF auf Perl umgestellt habe. Als ich noch im "DOIF-Modus" unterwegs war, funktionierte alles mit der folgenden Zeile.

DOELSEIF ( [signal:msgText] =~ /^rss$/)
("wget --quiet --no-check-certificate https://fhem.intranet:8083/fhem/rss/rssFeed.png -O /opt/fhem/fhem_png_plots/rss.png")

Die Owner der Files für /opt/fhem stehen alle korrekt auf fhem:dialout. Hoffentlich konnte ich alle Infos sinnvoll liefern, um von euch ein paar Hinweise zur Lösung des Problems in meinem DOIF zu erhalten. ;-) Vielen Dank!

« Letzte Änderung: 05 Mai 2022, 23:22:59 von h002 »

Offline Damian

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9750
Antw:Perl-Modus mit qx und wget blockiert FHEM
« Antwort #1 am: 05 Mai 2022, 18:40:27 »
Zitat
Starte ich das Kommando über die Weboberfläche von FHEM, blockiert das Kommando FHEM.

Was verstehst du hier unter Weboberfläche?

Funktioniert der Befehl:

{qx"wget --quiet --no-check-certificate https://fhem.intranet:8083/fhem/rss/rssFeed.png -O /opt/fhem/fhem_png_plots/rss.png"}
in der Kommandozeile?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline h002

  • Full Member
  • ***
  • Beiträge: 109
Antw:Perl-Modus mit qx und wget blockiert FHEM
« Antwort #2 am: 05 Mai 2022, 20:45:49 »
Damit meine ich die Weboberfläche von FHEMWEB (siehe Screenshot). Dort kommt es zum beschriebenen Verhalten. Meinst du das mit Kommandozeile?


Offline Damian

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9750
Antw:Perl-Modus mit qx und wget blockiert FHEM
« Antwort #3 am: 05 Mai 2022, 20:49:52 »
Damit meine ich die Weboberfläche von FHEMWEB (siehe Screenshot). Dort kommt es zum beschriebenen Verhalten. Meinst du das mit Kommandozeile?

Das ist ja die Kommandozeile.

Wenn es da schon nicht funktioniert, dann brauchst du im DOIF nicht weitersuchen. Sondern das Problem in Automatisierung-Board schildern, denn es ist kein DOIF-Problem.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline h002

  • Full Member
  • ***
  • Beiträge: 109
Antw:Perl-Modus mit qx und wget blockiert FHEM
« Antwort #4 am: 05 Mai 2022, 21:12:50 »
Alles klar, vielen Dank.

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 21083
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:qx und wget blockiert FHEM bei Nutzung von RSS
« Antwort #5 am: 05 Mai 2022, 23:05:48 »
Hallo h002,

Wenn Du das:
{qx"wget --quiet --no-check-certificate https://fhem.intranet:8083/fhem/rss/rssFeed.png -O /opt/fhem/fhem_png_plots/rss.png"}so machst
"wget --quiet --no-check-certificate https://fhem.intranet:8083/fhem/rss/rssFeed.png -O /opt/fhem/fhem_png_plots/rss.png"Wird es ev. funktionieren. Zumindest ist es bei mir so.
Allerdings wird dieser Code nicht blockierend im Hintergrund ausgeführt, Dein Folgebefehl kann also u.U. früher ausgeführt werden.

Da Du den Code auf der gleichen Maschine ausführst, führt es offenbar zur Blockade von FHEMWEB? Von einer anderen Maschine funktioniert der Code.

Aber irgendwie ist das auch Unfug?
Mach doch einfach:
Edit: Fehler korrigiert.
{qx"cp ./www/rss/rssFeed.png fhem_png_plots/rss.png"}
Wobei mir sich der Sinn der Kopie nicht erschließt. ::)

Gruß Otto
« Letzte Änderung: 06 Mai 2022, 09:31:50 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Offline h002

  • Full Member
  • ***
  • Beiträge: 109
Antw:qx und wget blockiert FHEM bei Nutzung von RSS
« Antwort #6 am: 05 Mai 2022, 23:22:31 »
Hallo Otto,
danke für deinen Input. Ich habe eben gerade noch experimentiert und eine Möglichkeit gefunden.

Wenn ich bei wget die Option -b für die Ausführung im Hintegrund mitgebe, funktioniert es plötzlich.

Hier das funktionierende Ergebnis mit Hilfe der Kommandozeile.

{qx"wget -O /opt/fhem/fhem_png_plots/rss.png -b -q --no-check-certificate https://192.168.1.159:8083/fhem/rss/rssFeed.png"}

so machst
"wget --quiet --no-check-certificate https://fhem.intranet:8083/fhem/rss/rssFeed.png -O /opt/fhem/fhem_png_plots/rss.png"Wird es ev. funktionieren. Zumindest ist es bei mir so.

Das hat in meinem DOIF im Perlmodus nicht funktioniert. Ich bekam nur die Warnung:

2022.05.05 23:17:20 1: PERL WARNING: Useless use of a constant ("wget --quiet --no-check-certific"...) in void context at (eval 22990) line 74.

Vielen Dank noch mal für das Interesse an meinem Problem :-)

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 21083
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:[gelöst] qx und wget blockiert FHEM bei Nutzung von RSS
« Antwort #7 am: 05 Mai 2022, 23:29:26 »
Ich habe auch nicht gesagt es funktioniert in Perl :) Es ist die Umsetzung eines Shell Befehls in FHEM, funktioniert so in der Kommandozeile. Die Kommandozeile ist FHEM und kein Perl. {qx()} ist die Umsetzung eines Perlbefehls in FHEM.

Aber damit, dass Du es jetzt in den Hintergrund schickst, wird folgendes passieren:
Befehl1 - läuft 3 sec im Hintergrund
Befehl2 - läuft 4 sec im Hintergrund
Befehl3 - läuft sofort los und will die Ergebnisse von Befehl1 und Befehl2 verarbeiten, die kommen aber später...

Wozu musst Du eine lokale Datei über das Webinterface kopieren?
« Letzte Änderung: 05 Mai 2022, 23:32:42 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz
Zustimmung Zustimmung x 1 Liste anzeigen

Offline h002

  • Full Member
  • ***
  • Beiträge: 109
Antw:[gelöst] qx und wget blockiert FHEM bei Nutzung von RSS
« Antwort #8 am: 06 Mai 2022, 00:11:49 »
Wozu musst Du eine lokale Datei über das Webinterface kopieren?

Ich hoffe ich verstehe die Frage richtig. Ich nutze das RSS-Modul (png wird ja erst erzeugt, wenn es explizit aufgerufen wird) und möchte via Signal Messenger das Kommando "rss" senden, um ein png mit aufbereiteten Informationen zu erhalten. Die Verarbeitung erfolgt über das DOIF. Deshalb benötige ich die Kopie, um das Bild über den SignalBot zu versenden.
« Letzte Änderung: 06 Mai 2022, 00:29:34 von h002 »

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 21083
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:[gelöst] qx und wget blockiert FHEM bei Nutzung von RSS
« Antwort #9 am: 06 Mai 2022, 09:31:14 »
Moin,

ich denke Du hast den Hintergrund meiner Frage nicht verstanden - oder ich liege schief:
Zitat
png wird ja erst erzeugt, wenn es explizit aufgerufen wird
bist Du sicher? ::)

Du machst ja alles auf einer Maschine - richtig? (Sonst käme es nicht zu dem von Dir eingangs beschriebenen Verhalten)
Die Datei https://fhem.intranet:8083/fhem/rss/rssFeed.png findest Du im lokalen Dateisystem unter ./www/rss/rssFeed.png bzw. /opt/fhem/www/rss/rssFeed.png


Ich liege falsch - ich muss weiter nachdenken!!!

Ich meine, Du kannst einfach diese Datei an signal übergeben?

Da gibt es noch den interessanten Beitrag, ich denke der betrifft Dein eingangs beschriebenes Problem:
https://forum.fhem.de/index.php/topic,22520.msg159824.html#msg159824
« Letzte Änderung: 06 Mai 2022, 10:51:52 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 21083
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:[gelöst] qx und wget blockiert FHEM bei Nutzung von RSS
« Antwort #10 am: 06 Mai 2022, 10:56:23 »
Hallo h002,

Du hast sicher Recht mit dem erzeugen der Datei. Ich war da neben der Spur.

Was ist signal send &/opt/fhem/f ... für ein Kommando? Das ist doch auch ein Shell und kein FHEM Befehl?

Wenn es so ist, solltest Du alle Shell Befehle einfach in ein Script packen und dieses Script komplett aus FHEM heraus starten (wie schon gezeigt den Aufruf einfach in "" packen) Damit wäre die Kette komplett (aber im Hintergrund) und FHEM wird nicht blockieren.
Bild1 holen
Bild2 holen
signal schicken

Sorry nochmal für die Verwirrung. Aber ich bin nach wie vor der Meinung, deine jetzige Lösung funktioniert nicht richtig!

Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz
Zustimmung Zustimmung x 1 Liste anzeigen

Offline h002

  • Full Member
  • ***
  • Beiträge: 109
Antw:[gelöst] qx und wget blockiert FHEM bei Nutzung von RSS
« Antwort #11 am: 06 Mai 2022, 11:50:10 »
Hallo Otto,

das "signal send &/opt" ist notwendig, um dem Modul signalbot mitzuteilen, ein Bild was auf dem Dateisystem liegt, zu versenden (siehe Wiki). Es handelt sich um ein set-Kommando des Moduls.

Im DOIF (Perlmodus) funktioniert es nun ja auch mit dem "-b" Parameter.

signal_commands {
##rss Info zu Haus versenden
if ( [signal:msgText] =~ /^rss$/) {
qx"wget -b --no-check-certificate https://fhem.intranet:8083/fhem/rss/rssFeed.png -O /opt/fhem/fhem_png_plots/rss.png";
qx"wget -b --no-check-certificate https://fhem.intranet:8083/fhem/rss/rssFeedS10.png -O /opt/fhem/fhem_png_plots/rssS10.png";
set_Exec("send_rss_info",5,'fhem_set("signal send &/opt/fhem/fhem_png_plots/rss.png &/opt/fhem/fhem_png_plots/rssS10.png")');
}
}

Das set_Exec verzögert ja den Versand um 5 Sekunden, um dem wget Zeit zum Speichern der Bilder zu geben.

Da gibt es noch den interessanten Beitrag, ich denke der betrifft Dein eingangs beschriebenes Problem:
https://forum.fhem.de/index.php/topic,22520.msg159824.html#msg159824
Meiner Meinung nach geht es hier um das Konfigurieren des rssLayout zur Einbindung von Bildern. In meinem Fall geht es ja "nur" um die Generierung des Feed und Bereitstellung als Grafik, um es dann mittels signal zu versenden. Im Anhang das Ergebnis, wie es aktuell auch funktioniert und korrekt über den Signal Messenger auf meinem Telefon ankommt.

Die Auslagerung in ein Skript wäre auch eine Möglichkeit. Da ich die DOIFs mag und mit dem Handling einigermaßen zurechtkomme, versuche ich möglichst alles darüber zu realisieren. Da habe ich alles an einer Stelle und kann es für mich besser überblicken.

Du verwirrst mich nicht, sondern verleitest mich zum Nachdenken. Das unterstützt die Lernkurve. ;-)
« Letzte Änderung: 06 Mai 2022, 11:56:49 von h002 »

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 21083
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:[gelöst] qx und wget blockiert FHEM bei Nutzung von RSS
« Antwort #12 am: 06 Mai 2022, 12:14:55 »
ok habe verstanden, der DOIF Syntax ist mir an der Stelle nicht geläufig, das set steht praktisch im Befehl fhem_set()😅

Gut wenn Du da eine Verzögerung machst funktioniert das auch -  das ist die 5 in dem set_exec Befehl?  ???

Den Link zum RSS Workshop meinte ich nur als Bestätigung in der Richtung meiner Gedanken: es entsteht eine Endlosschleife/Blockade wenn man die URL zur Erzeugung des Bildes aus dem gleichen FHEM aufruft. Genau das tust Du mit deinem ursprünglichen wget. Durch die Verlagerung in den Hintergrund, kann FHEM weiterarbeiten und blockiert sich nicht mehr selbst.
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline h002

  • Full Member
  • ***
  • Beiträge: 109
Antw:[gelöst] qx und wget blockiert FHEM bei Nutzung von RSS
« Antwort #13 am: 06 Mai 2022, 12:24:00 »
V
Gut wenn Du da eine Verzögerung machst funktioniert das auch -  das ist die 5 in dem set_exec Befehl?  ???
Genau.

Den Link zum RSS Workshop meinte ich nur als Bestätigung in der Richtung meiner Gedanken: es entsteht eine Endlosschleife/Blockade wenn man die URL zur Erzeugung des Bildes aus dem gleichen FHEM aufruft. Genau das tust Du mit deinem ursprünglichen wget. Durch die Verlagerung in den Hintergrund, kann FHEM weiterarbeiten und blockiert sich nicht mehr selbst.
Gut zu wissen. Auch wenn ich es technisch nicht im Detail nachvollziehen kann, hilft es mir beim weiteren Ausbau der DOIFs weiter.

 

decade-submarginal