FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: romakrau am 09 November 2020, 19:07:16

Titel: Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: romakrau am 09 November 2020, 19:07:16
Hallo zusammen,

das Problem scheint selten zu sein und ich finde nichts passendes im Forum.

Ich möchte gerne ein Shell-Script starten und die Ausgabe in ein Reading einlesen.
Konkret geht es hier darum die PID des aufgerufenen Programms in einem KILL Script wieder zu verwenden.
Gefunden habe ich den Befehl qx aber keine Doku hierzu. Kann jemand helfen?

Gruß Roman
Titel: Antw:Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: xenos1984 am 09 November 2020, 19:23:04
Dazu gibt es auch Doku - qx ist ein Perl-Operator:

http://perldoc.perl.org/functions/qx%2FSTRING%2F
Titel: Antw:Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: romakrau am 09 November 2020, 19:47:36
Danke aber das ist nicht das was ich suche. Muss in etwa so aussehen {qx (test.sh)}
Titel: Antw:Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: amenomade am 09 November 2020, 19:56:18
eher { my $pid = qx("test.sh")}
Titel: Antw:Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: Otto123 am 09 November 2020, 19:56:32
Hi,

mein Vorschlag:
{my $var=qx (test.sh)}
@amenomade Ich hatte mir zu Deiner Variante mal das notiert:
ZitatAchtung: Die Verwendung von qx("") führt zu einer Fehlermeldung, da ist offenbar ein String Terminator zu viel.

Gruß Otto
Titel: Antw:Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: amenomade am 09 November 2020, 20:05:13
Zitat von: Otto123 am 09 November 2020, 19:56:32

@amenomade Ich hatte mir zu Deiner Variante mal das notiert:

Stimmt. Ich wollte eher zeigen, wie man den Wert in einer Variable kriegt.

Nur am Rand: so muss natürlich test.sh in /opt/fhem liegen oder irgendwie beim PATH erreichbar sein. Und muss die richtige Berechtigungen haben.

Titel: Antw:Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: Otto123 am 09 November 2020, 20:44:25
:)
Ich hatte da mal etwas experimentiert und die Ergebnisse dokumentiert.
https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html
Vielleicht hilft das an der Stelle.

Gruß Otto
Titel: Antw:Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: romakrau am 09 November 2020, 21:08:09
Danke euch allen. Werde ausprobieren. Gruß Roman
Titel: Antw:Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: Wernieman am 10 November 2020, 09:39:36
Ist es nicht besser das Programm "nur" Aufzurufen und dieses liefert selber die Werte Zurück? Also "push zu Fhem"

Hat den Vorteil, das FHEM nicht blockt. Ist zwar für einfache Operationen wie "Finde PID raus" etwas oversized, aber wenn man es sich einmal richtig eingewöhnt ...
Titel: Antw:Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: romakrau am 11 November 2020, 14:25:31
Hallo Wernieman,
nun ist genau das passiert was du geschrieben hast. Ich kann das Script starte und erhalte erst nach Beendigung des Scripts meine PID zurück. Leider endet das SCript nur auf der Shell direct. Aus FHEM heraus aufgerufen muss ich den im Script gestartet Prozess immer erst beenden. Ziel war eigentlich anhand der PID das im Script aufgerufenen Programm gezielt zu beenden. Wie funktioniert dein Weg? Ich habe was gelesen in der form"perl fhem 7072 "set VAR 123", leider findet perl den port nicht.
Gruß Roman
Titel: Antw:Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: Otto123 am 11 November 2020, 15:40:59
Hallo Roman,

Vorschlag
mit diesem Script (https://github.com/heinz-otto/fhemcl) kannst Du in FHEM Dummy Readings sonstwas setzen.

Also Ruf dein Script einfach mit "ScriptName" in FHEM auf (ohne Perl, ohne system, ohne qx!) und melde dort in deinem Script mit meinem Script an FHEM deine PID zurück.

Geht sicher auch völlig anders, aber um da mitzudenken müsstest Du noch mehr erzählen ;)

Gruß Otto
Titel: Antw:Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: romakrau am 11 November 2020, 16:13:31
Hallo zusammen, was für ein langer Weg. Aber ich hab's so geschafft:

telnetport eingerichtet (define telnetport telnet 7072)
shell gestartet (system <script> &)
Im Script dann mit perl /opt/fhem/fhem.pl <IP>:7072 "set YICAM01_record PID $PID" das Reading gesetzt.

Danke an alle die mir geholfen haben. Für Verbesserungen bin ich immer zu haben.

Titel: Antw:Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: Otto123 am 11 November 2020, 16:29:32
naja Verbesserung ist es nicht - aber wie gesagt:
Falls du nur den Aufruf (system <script> &) machst geht in FHEM auch "<script>"  https://fhem.de/commandref_DE.html#command
Und mit mit meinem fhemcl "sparst" Du Dir Telnet und machst:
bash /opt/fhem/fhemcl.sh <IP>:8083 "set YICAM01_record PID $PID"
Titel: Antw:Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: Wernieman am 11 November 2020, 17:44:37
anstatt mit fhem.pl kannst Du auch mit nc die Daten zu fhem puschen.

Wenn kein Passwort in FHEM-telnet definiert z.B. durch:
echo -en "<fhem-Befehl>\nquit\n" | $nc -w 5 localhost 7072 >/dev/null

Wenn Passwort, ist dieses vor dem FHEM-Befehl (und Enter=\n" einzugeben
Wenn Du telnet mit SSL geschützt hast, gibt es in der Doku auch Hinweise (oder hier):
echo -en "<fhem-Befehl>\nquit\n" | /usr/bin/ncat -w10 -4 --ssl <fhem-Server> 7073

Hinweis: Alles mit <..> bitte passend ersetzen ...
Titel: Antw:Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: Guzzi-Charlie am 30 Dezember 2021, 23:23:09
Hallo,

ich stehe vor einem ähnlichen Problem. Ich habe es nach 6 Jahren endlich geschafft meine Stromzähler (DRS110M mit IEC1107 Protokoll) mit dem Script von patmen (Beitrag ==> https://forum.fhem.de/index.php/topic,105726.0.html (https://forum.fhem.de/index.php/topic,105726.0.html)) auszulesen. Da es noch kein FHEM-Modul gibt würde ich gerne das Script von FHEM aus auf dem RasPi starten und dann die Ausgabe der Daten nach FHEM senden.

Diese sehen so aus:
ZitatMeter: 1613300191
Current : 0.3 A
Temperature : 40 °C
Time : 2021-12-30T17:48:40
Reactive Power : 80 VAr
Frequency : 50 Hz
Active Power : 0 W
Voltage : 229.6 V
Apparent Power : 80 VA
Active Energy : 00303842 Wh
log off from 1613300191

Ich habe schon Einiges gelesen, aber nicht genug verstanden um das programmtechnisch umzusetzen. Das Script kann ich ja z.B. mit {my $datenZaehler=qx (drs110m.pl)} über ein at starten, oder?

Um das Blockieren von FHEM zu verhindern wäre es  (wenn ich das richtig verstanden habe) sinnvoll die erzeugten Daten dann vom Perl-Script selber über HTTP an FHEM (in einen Dummy?) senden zu lassen. Dafür müßten dann die HTTP-Befehle in das Perl-Script eingebaut werden, oder?

Für die exakte Syntax fehlt mir leider das Know How. Es wäre super wenn mir da Jemand unter die Arme greifen könnte.
Titel: Antw:Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: Wernieman am 31 Dezember 2021, 11:43:01
Wenn ich mal auf Ottos Block verweisen darf:
https://heinz-otto.blogspot.com/2019/02/fhem-http-client.html (https://heinz-otto.blogspot.com/2019/02/fhem-http-client.html)

Oder in diesem Thread verwies Otto schon darauf:
https://github.com/heinz-otto/fhemcl (https://github.com/heinz-otto/fhemcl)

Und bitte ... kannst Du ein neuen Thread für ein neues Problem aufmachen?
Titel: Antw:Shell mit qx ausführen und Rückgabe in Reading einlesen.
Beitrag von: Guzzi-Charlie am 02 Januar 2022, 13:55:02
Hallo Werniemann,

Danke für die Links. Die hatte ich tatsächlich schon selbst gefunden, allerdings hatte ich da einige Verständnisprobleme in der Anwendung.

Allerdings hat mich inzwischen CoolTux super unterstützt und es prinzipiell zum Laufen gebracht. Näheres zum Stand ==> hier: https://forum.fhem.de/index.php/topic,105726.15.html (https://forum.fhem.de/index.php/topic,105726.15.html)