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
mal wieder eigenantwort :D
{qx(curl https://maker.ifttt.com/trigger/Arloxxx/with/key/XXXX > /dev/null)}
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
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)}
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
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?
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)}"
curl kennt die Option -s für silent
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
wieso nicht einfach so?
{HttpUtils_NonblockingGet(url=>"https://maker.ifttt.com/trigger/Arloxxx/with/key/xxx")}
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
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
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?
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
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
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
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
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 &"
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.
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
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
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
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)
so habe ich mir das ganze vorgestellt. super danke läuft *thumbsup*
kaum macht man es richtig, schon klappts...