FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: mrb am 20 Februar 2022, 10:44:51

Titel: [hoffentlich dieses mal gelöst] Externer HTTPS aufruf
Beitrag von: mrb am 20 Februar 2022, 10:44:51
Hallo Forum,

da jetzt mein hm-Problem gelöst ist habe ich eine nächste Frage.
Ich habe zwei Überwachungskameras die über IFTTT getriggert werden können und bis vor kurzem(ca 1/2 Jahr aber schon her) hat das auch funktioniert. Mein fhem soll durch einen Homematic-Bewegungsmelder eine IFTTT aktion auslösen und der trigger wird auch korrekt ausgelöst, aber eine Site wie früher nicht ausgelöst. Ich hatte folgendes in meier FhemConfig
GA_Bewegungsmelder2:motion https://maker.ifttt.com/trigger/ArloXXXXX/key/xxxxx

und das hat 1a funktioniert. Jetzt funktioniert nur noch der eine Bewegunsmelder, aber der andere nicht mehr. Ich habe schon brav geegoogelt und einen Externen Aufruf per GetHttpFile gefunden, aber da scheint ja anscheinend HTTPS nicht zu funktionieren. GetHttpsFile gibt es nicht :(
über wget wie auf diversen seiten geht es auch nicht
{system('wget --quiet - \"https://maker.ifttt.com/trigger/ArloXXXXX/key/xxxxx\"')}
war mein Aufruf und da kommt nur -1 zurück und der IFTTT wird nicht ausgelöst :(

Also wie schon im Betreff geschrieben muss ich "einfach" nur ne HTTPS Seite aufrufen. Das Netz ist voll von HTTP aufrufen aber leider kein HTTPS
Titel: Antw:Externer HTTPS aufruf
Beitrag von: mrb am 20 Februar 2022, 11:48:25
mal wieder eigenantwort :D
{qx(curl https://maker.ifttt.com/trigger/Arloxxx/with/key/XXXX > /dev/null)}
Titel: Antw:Externer HTTPS aufruf
Beitrag von: mrb am 20 Februar 2022, 11:52:57
nur noch irgendwie den kompletten output ins dev null schieben.
so wird gerade das log mit  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100    45  100    45    0     0    195      0 --:--:-- --:--:-- --:--:--   19
zugemüllt
Titel: Antw:Externer HTTPS aufruf
Beitrag von: mrb am 20 Februar 2022, 12:14:51
zum xten mal selbstantwort :D


{qx(curl https://maker.ifttt.com/trigger/Arloxxxxx/with/key/xxxxx > /dev/null 2>&1> /dev/null)}


Komplett:
bewegungsmelder:motion {qx(curl https://maker.ifttt.com/trigger/Arloxxx/with/key/xxxx > /dev/null 2>&1> /dev/null)}
Titel: Antw:[gelöst] Externer HTTPS aufruf
Beitrag von: MadMax-FHEM am 20 Februar 2022, 12:52:35
Damit du dir nicht ständig selbst antworten musst ;)

Das hier ans Ende

2>&1 > /dev/null


reicht, um Fehler und Ausgaben nach /dev/null zu schicken ;)

Dass dein "Konstrukt" fhem blockiert solange der https-Aufruf "unterwegs" ist, ist dir bewusst?

Evtl. noch ein '&' anfügen -> send to background...

Oder einfach den "curl-Aufruf" in Anführungszeichen, dann blockiert auch nichts...

Siehe: https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html

system() liefert immer -1 zurück. Wenn dann lag es am Unterschied zwischen wget und curl... D.h. ein curl statt dem wget in system() hätte verm. auch funktioniert...
...aber ebenso blockiert.

Gruß, Joachim
Titel: Antw:[gelöst] Externer HTTPS aufruf
Beitrag von: mrb am 20 Februar 2022, 13:49:48
also so wie ich dich verstehe joachim wäre das hier nicht im background und besser:
Bewegungsmelder:motion &"{qx(curl https://maker.ifttt.com/trigger/Arloxxx/with/key/xxx > /dev/null 2>&1> /dev/null)}"
richtig?
Titel: Antw:[gelöst] Externer HTTPS aufruf
Beitrag von: mrb am 20 Februar 2022, 14:16:13
Zitat von: MadMax-FHEM am 20 Februar 2022, 12:52:35
Damit du dir nicht ständig selbst antworten musst ;)

Das hier ans Ende

2>&1 > /dev/null


reicht, um Fehler und Ausgaben nach /dev/null zu schicken ;)

Dass dein "Konstrukt" fhem blockiert solange der https-Aufruf "unterwegs" ist, ist dir bewusst?
ich weiß. Leider

Zitat von: MadMax-FHEM am 20 Februar 2022, 12:52:35
Evtl. noch ein '&' anfügen -> send to background...

Oder einfach den "curl-Aufruf" in Anführungszeichen, dann blockiert auch nichts...
wie genau meinst du das dann?
so dann? "{qx(curl https://maker.ifttt.com/trigger/Arloxxx/with/key/xxx > /dev/null 2>&1> /dev/null)}"
Titel: Antw:[gelöst] Externer HTTPS aufruf
Beitrag von: CoolTux am 20 Februar 2022, 14:20:50
curl kennt die Option -s für silent
Titel: Antw:[gelöst] Externer HTTPS aufruf
Beitrag von: mrb am 20 Februar 2022, 14:24:42
Zitat von: CoolTux am 20 Februar 2022, 14:20:50
curl kennt die Option -s für silent
stimmt, aber dann hast du ja immer noch das > /dev/null nötig
Titel: Antw:[gelöst] Externer HTTPS aufruf
Beitrag von: Guybrush am 20 Februar 2022, 14:27:49
wieso nicht einfach so?

{HttpUtils_NonblockingGet(url=>"https://maker.ifttt.com/trigger/Arloxxx/with/key/xxx")}

Titel: Antw:[gelöst] Externer HTTPS aufruf
Beitrag von: MadMax-FHEM am 20 Februar 2022, 14:29:21
Zitat von: mrb am 20 Februar 2022, 13:49:48
also so wie ich dich verstehe joachim wäre das hier nicht im background und besser:
Bewegungsmelder:motion &"{qx(curl https://maker.ifttt.com/trigger/Arloxxx/with/key/xxx > /dev/null 2>&1> /dev/null)}"
richtig?

Ein '&' ANFÜGEN nicht VORNE dran machen ;)

Also so:


Bewegungsmelder:motion {qx(curl https://maker.ifttt.com/trigger/Arloxxx/with/key/xxx 2>&1 > /dev/null &)}

(sofern dein geposteter "Code" tut)

Und warum die Anführungszeichen um einen PERL-Aufruf?
Da gehören nur die geschweiften Klammern eben für: "wechsle nach Perl", siehe: https://wiki.fhem.de/wiki/Klammerebenen

Den Link zu Otto hast du mal gelesen?

Anmerkung von CoolTux hilft auch...

Gruß, Joachim
Titel: Antw:[gelöst] Externer HTTPS aufruf
Beitrag von: mrb am 20 Februar 2022, 14:35:58
Zitat von: MadMax-FHEM am 20 Februar 2022, 14:29:21
Ein '&' ANFÜGEN nicht VORNE dran machen ;)

Also so:


Bewegungsmelder:motion {qx(curl https://maker.ifttt.com/trigger/Arloxxx/with/key/xxx 2>&1 > /dev/null &)}

(sofern dein geposteter "Code" tut)

Und warum die Anführungszeichen um einen PERL-Aufruf?
Da gehören nur die geschweiften Klammern eben für: "wechsle nach Perl", siehe: https://wiki.fhem.de/wiki/Klammerebenen

Den Link zu Otto hast du mal gelesen?

Anmerkung von CoolTux hilft auch...

Gruß, Joachim
ja hab ich überflogen auf der suche nach der Sperre, aber da steht ja nix über die sperre auflösen oder ich bin blind. Danke für den hinweis
Titel: Antw:[gelöst] Externer HTTPS aufruf
Beitrag von: mrb am 20 Februar 2022, 14:37:16
Zitat von: Guybrush am 20 Februar 2022, 14:27:49
wieso nicht einfach so?

{HttpUtils_NonblockingGet(url=>"https://maker.ifttt.com/trigger/Arloxxx/with/key/xxx")}


also bei mir läuft das nicht oder ich bin zu blöd. hast du vielleicht eine "myUtils" NonblockingGet?
Titel: Antw:[gelöst] Externer HTTPS aufruf
Beitrag von: MadMax-FHEM am 20 Februar 2022, 15:02:15
Zitat von: mrb am 20 Februar 2022, 14:35:58
ja hab ich überflogen auf der suche nach der Sperre, aber da steht ja nix über die sperre auflösen oder ich bin blind. Danke für den hinweis

Steht doch gleich zu Beginn:
Zitat
Es gibt drei FHEM Kommandotypen, sie unterscheiden sich in der Verwendung der "Klammer"

    FHEM Befehl - keine Klammer
    "Shell Befehl" - doppelte Anführungszeichen (blockiert FHEM nicht)
    {Perl Befehl} - geschweifte Klammer (kann FHEM blockieren)

Was du nutzt ist Perl-Befehl -> kann blockieren...

Dann: du nutzt eben einen synchronen (ohne '&' -> Background) Systemaufruf -> aus "kann blockieren" wird dann eben "blockiert"... ;)

Kann man ändern indem man den Systemaufruf einfach in Anführungszeichen steckt und zwar NUR den Systemaufruf NICHT den Perl-Aufruf (inkl. System-Aufruf)...
...oder eben den synchronen Systemaufruf "in den Hintergrund" schickt -> '&' anhängen (Linux Shell)...

Bzgl. NonBlocking_Get: https://wiki.fhem.de/wiki/HttpUtils#HttpUtils_NonblockingGet

Gruß, Joachim
Titel: Antw:[gelöst] Externer HTTPS aufruf
Beitrag von: mrb am 20 Februar 2022, 15:21:43
Zitat von: MadMax-FHEM am 20 Februar 2022, 15:02:15
Steht doch gleich zu Beginn:
okay. sorry.

Zitat von: MadMax-FHEM am 20 Februar 2022, 15:02:15
Dann: du nutzt eben einen synchronen (ohne '&' -> Background) Systemaufruf -> aus "kann blockieren" wird dann eben "blockiert"... ;)

Kann man ändern indem man den Systemaufruf einfach in Anführungszeichen steckt und zwar NUR den Systemaufruf NICHT den Perl-Aufruf (inkl. System-Aufruf)...
...oder eben den synchronen Systemaufruf "in den Hintergrund" schickt -> '&' anhängen (Linux Shell)...

Bzgl. NonBlocking_Get: https://wiki.fhem.de/wiki/HttpUtils#HttpUtils_NonblockingGet
habe jetzt deinen ersten und zweiten vorschlag gewählt (doppelt gemoppelt hält besser, oder?)
sieht dann so für mich jetzt aus
"curl https://maker.ifttt.com/trigger/Arloxxx/with/key/xxxx > /dev/null 2>&1> /dev/null &"

das nonblockingget habe ich wie ihr seht verworfen da es nicht funktioniert hat
Titel: Antw:[gelöst] Externer HTTPS aufruf
Beitrag von: MadMax-FHEM am 20 Februar 2022, 16:00:11
Wenn du alles doppelt moppeln willst, also das "in den Hintergrund" (weil das macht ja das & und aber auch die Anführungszeichen)...
...und das nach /dev/null...

Wie du willst.
Wenn es funktioniert "schadet" es nicht aber ist halt (mehrfach) "überflüssig(es Zeug" drin...

EDIT: zur Sicherheit kann man (mache ich immer so) den vollen Pfad zum "Programm" angeben, also z.B. /usr/bin/curl statt "nur" curl. Dann ist sichergestellt, dass fhem das "Programm" auch findet ;) (weil der User fhem [u.U.] eine andere "Umgebung" inkl. PATH hat wie z.B. der User pi usw.) das mit "/usr/bin/curl" stammt nat. von MEINEM System. Wo curl bei dir zu finden ist, musst nat. du bei dir "schauen" (z.B. which curl)...

Gruß, Joachim
Titel: Antw:[gelöst] Externer HTTPS aufruf
Beitrag von: Guybrush am 20 Februar 2022, 16:34:26
Zitat von: mrb am 20 Februar 2022, 14:37:16
also bei mir läuft das nicht oder ich bin zu blöd. hast du vielleicht eine "myUtils" NonblockingGet?

https://wiki.fhem.de/wiki/HttpUtils
Titel: Antw: Externer HTTPS aufruf
Beitrag von: mrb am 02 März 2022, 16:01:51
okay ärgerlich. anscheinend funktioniert es doch nicht :(
bekomme immer im log folgendes:
sh: 1: Syntax error: redirection unexpected
hab auch brav das netz und die forums-suche befragt und es heist ja absoluten pfad angeben und dem user die rechte geben. daher sieht dann mein command folgend aus.

   
Bewegungsmelder:motion "/usr/bin/curl https://maker.ifttt.com/trigger/Arloxx/with/key/xxXXxx > /dev/null 2>&1> /dev/null &"
Titel: Antw:[noch nicht gelöst] Externer HTTPS aufruf
Beitrag von: betateilchen am 02 März 2022, 16:09:44
Zitat von: mrb am 20 Februar 2022, 15:21:43
das nonblockingget habe ich wie ihr seht verworfen da es nicht funktioniert hat

das ist doch hanebüchen...

Es ist immer sinnvoller, solche Aufgaben mit FHEM Bordmitteln zu lösen, als solche merkwürdigen Konstrukte für Systemaufrufe zu stricken.
Titel: Antw: Externer HTTPS aufruf
Beitrag von: betateilchen am 02 März 2022, 16:26:46
Geh doch einfach mal systematisch vor. Fangen wir mal mit der einfachsten Variante an.

define test_notify notify GA_Bewegungsmelder2:motion {GetFileFromURL("https://maker.ifttt.com/trigger/Arloxxx/with/key/xxxx")}

Wenn das nicht funktioniert - was steht dann im Logfile zu einem möglichen Fehler?

Wie heißt eigentlich die URL nun richtig? In diesem Thread finden sich schon mindestens zwei Varianten:

https://maker.ifttt.com/trigger/ArloXXXXX/key/xxxxx\
https://maker.ifttt.com/trigger/Arloxxx/with/key/xxxx
Titel: Antw:[noch nicht gelöst] Externer HTTPS aufruf
Beitrag von: mrb am 02 März 2022, 16:44:39
oh mein gott. danke betateilchen.........

Jetzt steht schön im log "2022.03.02 16:41:41 3: Notify return value: Congratulations! You've fired the Arloxxxx event"
manchmal bin ich echt neben der kappe  :o :o :o :o :o
Titel: Antw: Externer HTTPS aufruf
Beitrag von: mrb am 02 März 2022, 16:54:49
Zitat von: betateilchen am 02 März 2022, 16:26:46
Geh doch einfach mal systematisch vor. Fangen wir mal mit der einfachsten Variante an.

define test_notify notify GA_Bewegungsmelder2:motion {GetFileFromURL("https://maker.ifttt.com/trigger/Arloxxx/with/key/xxxx")}

Wenn das nicht funktioniert - was steht dann im Logfile zu einem möglichen Fehler?

Wie heißt eigentlich die URL nun richtig? In diesem Thread finden sich schon mindestens zwei Varianten:

https://maker.ifttt.com/trigger/ArloXXXXX/key/xxxxx\
https://maker.ifttt.com/trigger/Arloxxx/with/key/xxxx

ja also die Urls habe ich ausge"x"t da sonst jeder meine arlo starten kann.
und ich will vermutlich immer 2 schritte zu weit gehen. sorry allen :( :o
Titel: Antw: Externer HTTPS aufruf
Beitrag von: betateilchen am 02 März 2022, 17:06:04
Zitat von: mrb am 02 März 2022, 16:44:39
Jetzt steht schön im log "2022.03.02 16:41:41 3: Notify return value: Congratulations! You've fired the Arloxxxx event"

Ok, dann sind wir ja schonmal einen Schritt weiter.
Das Ganze ist nun zwar noch nicht nonblocking, aber angesichts der Tatsache, dass es schlichtweg um den Aufruf einer URL geht und keinerlei Nachverarbeitung erfolgen soll, sehe ich das nicht als großes Problem. Falls Du das trotzdem noch probieren willst, ersetze den URL-Aufruf GetFileFromURL() durch


HttpUtils_NonblockingGet({ url=>"https://maker.ifttt.com/trigger/Arloxxx/with/key/xxxx", callback=>sub() {} });


(ungetestet)
Titel: Antw:[hoffentlich dieses mal gelöst] Externer HTTPS aufruf
Beitrag von: mrb am 02 März 2022, 17:18:52
so habe ich mir das ganze vorgestellt. super danke läuft *thumbsup*
Titel: Antw: Externer HTTPS aufruf
Beitrag von: betateilchen am 02 März 2022, 17:30:14
kaum macht man es richtig, schon klappts...