FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Kiki99 am 07 Juli 2018, 16:20:11

Titel: [gelöst] nach FHEM Start dummy-Status setzen auf Ergebnis von Shell Script.
Beitrag von: Kiki99 am 07 Juli 2018, 16:20:11
Hallo zusammen,
ich habe ein dummy Device mit dem ich nun ein Script auf einem anderen Rechner Starten oder killen kann. So weit so gut:

define Alexa FS20 1234 50
attr Alexa dummy 1
attr Alexa room Wohnzimmer
define Alexa_An notify Alexa:on "/opt/fhem/Pi_Alexa_An.sh"
define Alexa_Aus notify Alexa:off "/opt/fhem/Pi_Alexa_Aus.sh"


Das funktioniert so weit. Einzig störend ist, dass der Status nach einem Neustart von fhem natürlich manchmal falsch ist. Ich müsste jetzt dafür definieren:

define notify_fhem_reload_AlexaStat notify global:INITIALIZED set Alexa "/opt/fhem/Pi_Alexa_Status.sh"

was so natürlich nicht funktioniert. In welche Klammern, Kommandos oder Whatever muss ich den Scriptaufruf einbetten, damit das Script aufgerufen und das Ergebnis dem Device zugewiesen wird? :o Das Script gibt on oder off zurück  ;D

Wenn ich nach notify und script oder bash suche dann finde ich zwar scriptaufrufe im notify (wie auch bei mir oben) aber nie, um das Ergebnis einem Gerät zuzuweisen :/

Danke im voraus für Tipps  :) 8)
Titel: Antw:nach FHEM Start dummy-Status setzen auf Ergebnis von Shell Script.
Beitrag von: Otto123 am 08 Juli 2018, 12:12:11
Hi,

ich hatte die Thematik für mich mal aufgeschrieben (https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html) :)

So direkt wie Du das machen willst geht das nicht (denke ich), Du kannst den Weg über Perl gehen. Ähnlich meinem Beispiel im Text (schon angepasst - nicht getestet):
{my $b = qx/bash /opt/fhem/Pi_Alexa_An.sh/;;  fhem("set Alexa $b")}

Gruß Otto
Titel: Antw:nach FHEM Start dummy-Status setzen auf Ergebnis von Shell Script.
Beitrag von: MadMax-FHEM am 08 Juli 2018, 13:04:41
Ich sehe ja nichts von einem anderen Rechner (wahrsch./evtl. "im" Shell-Script) aber du kannst auch im Script selber die Werte im Dummy setzen:


perl /opt/fhem/fhem.pl 7072 "set Alexa on"
perl /opt/fhem/fhem.pl 7072 "set Alexa off"


Gruß, Joachim
Titel: Antw:nach FHEM Start dummy-Status setzen auf Ergebnis von Shell Script.
Beitrag von: Kiki99 am 09 Juli 2018, 20:47:49
Hi ihr beiden und danke erst mal für die Tipps.

Funktionieren tut es aber noch nicht ganz irgendwelche Klammern, Anführungszeichen oder was auch immer fehlen noch, im Log steht

PERL WARNING: Bareword found where operator expected at (eval 49) line 1, near "qx/bash "/opt"
2018.07.09 20:40:07 1: ERROR evaluating my $EVTPART0='INITIALIZED';my $SELF='notify_fhem_reload_AlexaStat';my $NAME='global';my $TYPE='Global';my $EVENT='INITIALIZED';{my $b = qx/bash "/opt/fhem/Pi_Alexa_Status.sh"/;  fhem("set Alexa $b")}: syntax error at (eval 49) line 1, near "qx/bash "/opt"


Er zerlegt also den Befehl in Einzelteile?

Den zweiten Vorschlag verstehe ich leider nicht ganz. Ich kann doch aus der Unix bash nicht Set Alexa on aufrufen? Vielleicht mit fhem davor? ??? Und für was steht die 7073  ???

Sorry, ich spreche Perlisch und Shellisch noch nicht so gut  :'( ;)

Gruß
Kiki
Titel: Antw:nach FHEM Start dummy-Status setzen auf Ergebnis von Shell Script.
Beitrag von: MadMax-FHEM am 09 Juli 2018, 21:02:01
So wie ich es bislang gesehen/verstanden habe läuft dort wo das Script aufgerufen wird auch fhem!?
Zumindest konnte ich nix bzgl. remote sehen...

Du kannst mit dem Aufruf per Telnet (Port 7072) den Wert im Dummy setzen...

Einfach mal in der Linux Console eintippen und zwar komplett so...
Vors. fhem ist unter /opt/fhem installiert...

Gruß, Joachim
Titel: Antw:nach FHEM Start dummy-Status setzen auf Ergebnis von Shell Script.
Beitrag von: Kiki99 am 09 Juli 2018, 21:10:06
Ahh, okay, das ist sehr praktisch.

Ja, Du hast recht, der Remoteaufruf ist komplett in dem bash script, damit ich ihm leichter auf die Finger schauen kann ;)

Da kommen dann jetzt Deine beiden Aufrufe rein. Sehr praktisch, Danke  ;D

Gruß Kiki