FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: cs-online am 08 September 2023, 22:24:10

Titel: sh Script auf Raspberry im Terminal aufrufen ?
Beitrag von: cs-online am 08 September 2023, 22:24:10
Hallo,

leider hat Google nicht helfen können... Ich habe ein Script, dass ich mittels vnc-Viewer auf dem FHEM-Rpi von Hand im Terminal öffnen kann und dort regelmäßig zur Kontrolle Werte bekomme. Nun würde ich das gern von FHEM aus so starten, dass das ebenfalls im Terminal läuft. Geht das ? Falls ja, habt ihr ein Beispiel ? Also wie man generell von FHEM aus Scripte starten kann, weiß ich, das funktioniert auch gut, nur starten die dann sozusagen im Hintergrund und ich sehe nichts

Grüße Christian
Titel: Aw: sh Script auf Raspberry im Terminal aufrufen ?
Beitrag von: betateilchen am 08 September 2023, 23:22:16
Vermutlich ist Dein angedachtes Vorhaben der falsche Ansatz.

Was möchtest Du denn wirklich tun?
Was tut das Skript und woher kommen die Werte, die es liefert?
Titel: Aw: sh Script auf Raspberry im Terminal aufrufen ?
Beitrag von: JoWiemann am 09 September 2023, 12:20:14
Hallo,

Fhem stellt kein Terminalfenster zur Verfügung. Wenn Du ein Script mit qx(...) aufrufst, dann wird die Rückgabe des Script im Fhem Web angezeigt.

Grüße Jörg
Titel: Aw: sh Script auf Raspberry im Terminal aufrufen ?
Beitrag von: cs-online am 10 September 2023, 18:32:23
Hallo,

ähm, ich vermute, ich hab es nicht richtig erklärt. Ich habe auf dem RPI ein Script, dass mittels watch in regelmäßigen Abständen an eine Schnittestelle eine Abfrage schickt. Da sich die Gegenseite häufiger mal aufhängt, kontrolliere ich gerne auf dem RPI (hier mittels VNC-Viewer), ob die Verbindung noch läuft. Das kann ich nur, wenn ich die Antwort des Skriptes im Terminalfenster auf dem RPI sehen kann. Blöderweise muss ich das Script (weil ich noch nicht herausgefunden habe, ob und ggf. wie sich das aus der Ferne oder ggf. auch auf dem RPI selber, starten läßt, so dass ein Terminalfenster angezeigt wird) nach jedem Neustart des RPIs von Hand starten. Und so kann es sein, dass schon einige Zeit vergeht, bis ich merke, dass keine Aktuellen Werte mehr vorhanden sind...

Daher die Frage: Ist es möglich (entweder von FHEM aus oder durch den RPI selber), ein Script so zu starten, dass es in einem Terminalfenster geöffnet wird ?

Danke für eure Antworten

Christian
Titel: Aw: sh Script auf Raspberry im Terminal aufrufen ?
Beitrag von: betateilchen am 10 September 2023, 18:34:05
Immer noch halte ich das für den falschen Ansatz...

Woran erkennst Du denn im Terminalfenster, ob die Verbindung noch läuft?
Titel: Aw: sh Script auf Raspberry im Terminal aufrufen ?
Beitrag von: cs-online am 10 September 2023, 18:49:27
zum einen, weil sich die Zeitangabe nicht mehr ändert und teilweise auch, weil dann im Fenster zu einzelnen Anforderungen Fehlermeldungen angezeigt werden...
Titel: Aw: sh Script auf Raspberry im Terminal aufrufen ?
Beitrag von: MadMax-FHEM am 10 September 2023, 18:52:11
Zitat von: cs-online am 10 September 2023, 18:49:27zum einen, weil sich die Zeitangabe nicht mehr ändert und teilweise auch, weil dann im Fenster zu einzelnen Anforderungen Fehlermeldungen angezeigt werden...

Zeig das doch mal als Screenshot und (evtl.) auch mal das Script selbst...
(evtl. mit Erläuterung was das Script tut und auch mit welchem Gerät es auf welchem Weg [Übertragung/Protokoll] es denn kommuniziert)

EDIT: Meldungen/Fehlermeldungen eines Scriptes kann man doch "abfragen"...

Gruß, Joachim
Titel: Aw: sh Script auf Raspberry im Terminal aufrufen ?
Beitrag von: Torxgewinde am 11 September 2023, 07:42:34
@cs-online: Die Antwort auf deine Frage dürfte sein, dass man in FHEMWEB/Webbrowser ein Terminal öffnen kann. Mit blinkendem Cursor und Interaktion, richtig?

Technisch geht das durchaus (z.B. mit XtermJS (http://xtermjs.org/) und vermutlich websocketd (http://websocketd.com/), alternativ noVNC (https://novnc.com/info.html), ...), aber willst du das? Automation heißt ja, dass Dinge automatisch passieren.
Titel: Aw: sh Script auf Raspberry im Terminal aufrufen ?
Beitrag von: Wernieman am 11 September 2023, 08:20:51
Ich sehe mehrere Probleme:

1.
Zitatmittels VNC-Viewer
Es ist ein Grafisches Desktopsystem

2.
Zitatjedem Neustart des RPIs von Hand starten
Das muß man automatisieren, also das Script per System (oder per FHEM) starten lassen

3.
Zitatwatch
watch ist auf der Konsole für den Admin toll .. aber in einem Script? Währe da nicht cron (oder FHEM) besser?

Deshalb wie die Kollegen schon sagten:
Bitte mehr Infos über das Script und was es machen soll.

Titel: Aw: sh Script auf Raspberry im Terminal aufrufen ?
Beitrag von: cs-online am 15 September 2023, 14:24:03
Hallo, Dankeschön für eure Antworten.

zu Punkt 2: das Starten des Scripts ist nicht das Problem, das kann ich sowohl über FHEM als auch über das System, Ich kann dann nur nicht sehen, wenn sich irgendwas auf der Gegenseite aufhängt, dafür brauche ich das Terminalfenster...

Ich komme im Moment aber auch nicht wirklich dazu, mich da intensiver mit zu beschäftigen, daher erstmal vielen Dank für euren Input.

Grüße Christian
Titel: Aw: sh Script auf Raspberry im Terminal aufrufen ?
Beitrag von: Prof. Dr. Peter Henning am 17 September 2023, 14:58:56
Der mögliche Lösungsweg ist eine bidirektionale Kommunikation. FHEM startet ein Skript, soweit gut. Nun sollte aber auch das Skript Zustandsänderungen etc. an FHEM melden. Nachstehend ein Beispiel, mit dem ich von FHEM aus auf einem anderen Rechner einen WebCam-Stream starte, überprüfe und ggf. auch stoppe. Für die Rückmeldung an FHEM wird jeweils das Programm curl aufgerufen und setzt dann ein Reading in FHEM auf den richtigen Wert.
# /bin/sh
#
#   script to start a streamer in the SnapMaker
#
#   Prof.Dr. Peter A. Henning, May 2023
#

FHEMDP="SnapMaker.Cam"          # FHEM Devicename for SnapMaker webcam
FHEMIP="192.168.0.xx"           # IP address
FHEMPORT="8083"                 # Port number
FHEMHTTPS="false"               # true for HTTPS, false without HTTPS

curlprog="curl"
curlargs="-s"                  # -k to disable HTTPS certificate check,
                                # -u user:password for user and password       
HOME="/home/fhem"               # Home

### FHEM path ###
if [ $FHEMHTTPS = "true" ]; then
        csrf=`$curlprog -s -D - "https://$FHEMIP:$FHEMPORT/fhem?XHR=1" | awk '/X-FHEM-csrfToken/{print $2}' | tr -d "\r\n"`
        FHEM="https://$FHEMIP:$FHEMPORT/fhem?XHR=1&fwcsrf=$csrf&cmd.$FHEMDP"
else
        csrf=`$curlprog -s -D - "http://$FHEMIP:$FHEMPORT/fhem?XHR=1" | awk '/X-FHEM-csrfToken/{print $2}' | tr -d "\r\n"`
        FHEM="http://$FHEMIP:$FHEMPORT/fhem?XHR=1&fwcsrf=$csrf&cmd.$FHEMDP"
fi

       
### execute commands ##
case $1 in

 start) #-- start streamer
       export LD_LIBRARY_PATH=/usr/local/lib
       mjpg_streamer -i "input_uvc.so -r 1600x1200 -y -d /dev/video0" -o "output_http.so -p 9000 -w /usr/local/www" > /dev/null 2> /dev/null &
       sleep 4
       streamerpid=`pidof "mjpg_streamer"`
       if [ -z "$streamerpid" ]; then
         $curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20streamer_state%20failed" &
         $curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20streamer_pid%20----" &
         echo "" > $HOME/streamerpid
         echo "streamer start failed"
       else
         $curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20streamer_state%20ok" &
         $curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20streamer_pid%20$streamerpid" &
         echo $streamerpid > $HOME/streamerpid
         echo "streamer started successfully as $streamerpid"
       fi
       ;;
         
status) #-- see if is running
       streamerpid=`pidof "mjpg_streamer"`
       if [ "$streamerpid" = "" ]; then
         $curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20streamer_state%20stopped" &
         $curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20streamer_pid%20----" &
         echo "streamer stopped"
       else
         $curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20streamer_state%20ok" &
         $curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20streamer_pid%20$streamerpid" &
         echo "streamer running"
       fi
       ;;

 stop) #-- stop streamer process
       streamerpid=`pidof "mjpg_streamer"`
       if [ "$streamerpid" = "" ]; then
         echo "streamer not running"
       else
         #-- check for timelapse
         motionpid=`pidof "motion"` 
         if [ "$motionpid" != "" ]; then
           $HOME/timelapse.sh stop
         fi

         sudo kill  $streamerpid > /dev/null 2> /dev/null
         $curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20streamer_state%20stopped" &
         $curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20streamer_pid%20----"&
         echo "streamer stopped"
       fi
       ;;

esac

LG

pah
Titel: Aw: sh Script auf Raspberry im Terminal aufrufen ?
Beitrag von: cs-online am 08 Oktober 2023, 13:28:57
Hallo PAH,

danke dir, ich werde mir das bei Gelegenheit mal anschauen. Im Moment geht bei uns die meiste Freizeit für unsere 3-jährigen Zwillinge drauf, da bleibt hier wenig Kappa für über  ;D

Liebe Grüße

Christian