Hallo an alle,
ich habe in einem notify den Befehl
{system('/opt/fhem/mycfg/scripts/netpower.sh set 2 on');;}
umgestellt auf
{qx (curl -s --user user:pw --data F1=O http://ip-adr/ctrl.htm);;}
Mit dem systemaufruf funktioniert alles mit korrektem Eintrag im log, mit dem qxaufruf hab ich diesen log-eintrag:
2021.11.22 16:48:19 3: Anel_SD_02_dummy_off return value: ���`I�%&/m�{J�J��t��`$ؐ@������iG#)�*��eVe]f@�흼��{���{���;�N'���?\fdl��J�ɞ!���?~|?"���j�^��t�.ʣ��<�����/N���n����/Z��}t�M���I�l��(�/����e�=�WE�zYg����O߭�:o��;ܰ-�2?:~q�|����
��m�����˫�����w� �-���t^����j<mZ���}Դ�e����(ŀ?���ߵw��5ӺX�iSO?�8���������ߕ���?j�I���b���?�Y�;�T�,�����M����Ϊ=�%�2������L��uZ-�W�쳏�߿�/�>�x���wi���"oi�����}M���?��θX.���o�x���p%��9�qn�3��>z���i�5�g�����v�^��:����=#��GӪ��G?�駟zxH���l6+����}t��Ye��;;�>�(-h �@)jp�F�G�ӷ��ɗ���U^fEc=�������w|�t�sb�]ዻv�j�2���<��(���죣��tog�^�����m�����wWG�c�
Kann man dies irgendwie verhindern? Hab schon einiges versucht leider ohne Erfolg.
Viele Grüße
Dieter
Hallo Dieter,
qx liefert Dir das Ergebnis von curl zurück, Du trägst diese Rückgabe offenbar irgendwo "Anel_SD_02_dummy_off" ein.
Der Logeintrag ist ein "normaler" 3: Anel_SD_02_dummy_off return value: ...
Wo/wie genau rufst Du das qx() Konstrukt auf?
Gruß Otto
Hallo Otto,
das wird von einem DoIf aufgerufen. Die Rawdefinition sieht so aus:
defmod Anel_SD_02_dummy_off notify Anel_SD_02_dummy:off {qx (curl -s --user user:pw --data F1=O http://ip-Adr/ctrl.htm);;}
setstate Anel_SD_02_dummy_off 2021-11-22 16:52:35
setstate Anel_SD_02_dummy_off 2021-11-22 16:40:18 state active
setstate Anel_SD_02_dummy_off 2021-11-22 16:52:35 triggeredByDev Anel_SD_02_dummy
setstate Anel_SD_02_dummy_off 2021-11-22 16:52:35 triggeredByEvent off
vorher hab ich mit einem systemaufruf ein Shell-Script gestartet und das shellscript wollte ich durch diesen qx ersetzen.
Wenn ich den Befehl auf der shell starte kommt kein return.
Gruß
Dieter
Hallo Dieter,
was kommt zurück wenn Du den Befehl in die FHEM Kommandozeile wirfst?
{qx (curl -s --user user:pw --data F1=O http://192.168.178.34:88/ctrl.htm);;}
Du kannst versuchen die Ausgabe Deines Befehls umleiten:
{qx (curl -s --user user:pw --data F1=O http://192.168.178.34:88/ctrl.htm > /dev/null)}
Allerdings finde ich das Konstrukt so nicht sinnvoll. Der Befehl wirkt blockierend, wenn Du nichts zurück erwartest ist das uU nicht sinnvoll.
Du kannst auch einfach den FHEM Shell Befehl nehmen, der blockiert nicht:
defmod Anel_SD_02_dummy_off notify Anel_SD_02_dummy:off "curl -s --user user:pw --data F1=O http://ip-Adr/ctrl.htm > /dev/null"
Etwas zum lesen aus meinen Notizen (https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html).
Gruß Otto
derselbe Kauderwelsch :( wie im logfile
Die Umleitung hab ich auch schon versucht klappt leider auch nicht.
Werde den shell-Befehl testen. Danke Dir.
Gruß
Dieter
So umleiten?
2>&1> /dev/null
Der Shell Befehl wird auch ins Logfile schreiben ::)
Der Befehl funktioniert aber egal wie ich umleite es kommt immer der datenmüll im log :(
Hast Du noch eine Idee?
Ja :) mach es wie bisher im Script. Ich sehe keinen Sinn darin, kein Script zu verwenden.
Hier gab es das Thema auch schon https://forum.fhem.de/index.php?topic=58673.15
ok Danke für Deine Mühe und Zeit :)
Viele Grüße aus FFB
Dieter
Hallo Dieter,
ich weiß nicht ob Du noch meine Ergänzung in #3 gesehen hast.
Ich habe da selbst auch lange rumprobiert - mein gedankliches Resüme: wenn es mehr wie eine Hand voll Positionen in der Kommandozeile gibt wird es stressig. ;)
- Hochkommas verschachteln
- stdOut / Umleitung
- Variablennamen auflösen/schützen
- Parameter ans nächste Programm weiterreichen
- und und und
Ich glaube, man kann es noch etwas abmildern wenn man die Zeile an bash -c 'Kommandofolge' übergibt. Aber da hat man schon wieder eine Ebene mehr.
Gruß Otto