GELÖST: notify mit drei auszuführenden Befehlen

Begonnen von Shafhem, 22 August 2014, 19:46:39

Vorheriges Thema - Nächstes Thema

Shafhem

Hallo,

ich würde gerne ein notify umsetzen, welches drei Befehle ausführt.
Leider läuft es noch nicht wie es soll.

Wenn Betrieb auf standby geht soll:
1. Ein Pushover gesendet werden
2. Die LED der FritzBox blinken
3. Die LED 20 Sekunden später wieder ausgeschaltet wird

Einzeln läuft das Pushover schon.
Nur das mit den LEDs klappt nicht.
Ich denke es liegt bestimmt daran, wie die drei Befehle getrennt sind. (;;)

Mir ist auch aufgefallen, dass die LED Komandos sich komisch verhalten,
wenn man {system("/bin/led-ctrl update_running")} aufruft und dann {system("/bin/led-ctrl update_led1=0")},
muss man erst einen anderen Befehl wie {system("/bin/led-ctrl update_error")} ausfüren, damit man wieder ein {system("/bin/led-ctrl update_running")} senden kann.

Evtl. muss man auch die LED erst zurücksetzen, also:
LED dauer an
LED aus
LED blinken
LED aus

define AbgeschlossenPushover notify Betrieb:standby {fhem ("set Pushover1 msg 'Fertig!' 'Ende.'");;system("/bin/led-ctrl update_running");;define LEDAus at +00:00:20 {system("/bin/led-ctrl update_led1=0")}

LG und danke!
Daniel

Puschel74

#1
Hallo,

im DEF genügt ein ;

Wenn die Befehle einzeln funktionieren würde ich das mal so

define AbgeschlossenPushover notify Betrieb:standby {
fhem ("set Pushover1 msg 'Fertig!' 'Ende.'");
fhem("system('/bin/led-ctrl update_running')");
fhem("define LEDAus at +00:00:20 {system('/bin/led-ctrl update_led1=0')");
}


Innerhalb von Perl musst du auch mitteilen das FHEM etwas machen soll - so wie beim Pushover.
Spätestens das define ... at wird innerhalb von { } nicht ohne fhem("....") funktionieren.
Ob das mit den einfachen ' so richtig ist kann ich dir aber nicht sagen - " innerhalb von " klappt aber nicht.
Zur Not einfach mal die Fehlermeldung zeigen.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Shafhem

Danke! Werde es gleich testen.
Ein Befehl pro Zeile ist doch einfach übersichtlicher!

Beste Grüße und ein schönes WE!

Shafhem

#3
Hallo,

also das Pushover funktioniert schon einmal.
Der Code sieht im DEF jetzt so aus:
Betrieb:standby {
fhem ("set Pushover1 msg 'Fertig!' 'Ende.'");
fhem("system('/bin/led-ctrl update_led1=0')");
fhem("system('/bin/led-ctrl update_running')");
fhem("define LEDAus at +00:00:20 {system('/bin/led-ctrl update_led1=0')");
}


Logfile:
2014.08.22 20:00:00 3: set Pushover1 msg 'Fertig!' 'Ende.' : OK
2014.08.22 20:00:00 3: system('/bin/led-ctrl update_led1=0') : Unknown command system('/bin/led-ctrl, try help.
2014.08.22 20:00:00 3: system('/bin/led-ctrl update_running') : Unknown command system('/bin/led-ctrl, try help.
2014.08.22 20:00:20 3: LEDAus: Unknown command {system('/bin/led-ctrl, try help.

Der Unknown command Fehler kommt auch wenn man in der Kommandzeile eingibt:
system("/bin/led-ctrl update_led1=0")

also ohne geschweifte Klammer.

MfG
Daniel

Puschel74

Hallo,

du solltest auch meine ganze Antwort lesen  ;)
Ich hab doch etwas geschrieben von ' und " - ausserdem habe ich im geposteten Code einfache Anführungszeichen verwendet.
In deinem Code sind aber immer noch " (doppelte).

fhem("system('/bin/led-ctrl update_running')");

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Shafhem

Sorry nein ich hatte es mit einem einfachen ' probiert.
Und dann zum Test noch einmal ein " eingefügt. (Zum Test :-P)

Und eben den letzten (falschen) Code gepostet.

Puschel74

Hallo,

dann musst du erstmal schauen das die Befehle einzeln funktionieren  8)

Zum system-Befehl musst du schauen, da kann ich dir leider nicht helfen.

In der 99_myUtils.pm setze ich einen ähnlichen so ab:
my ($befehl) = "sudo i2cget -y 1 ".$sensor." 0x00 w &";
my ($result) = `$befehl`;


Das klappt einwandfrei.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Shafhem

Vielleicht kommt ja noch jemand herum, mit der Lösung ohne auslagern aus dem DEF.
Das system ist irgendwie speziell.

Puschel74

#8
Hallo,

versuch doch mal
fhem('system("/bin/led-ctrl update_running")');

Was passiert dann?

Grüße

Edith: Im Wiki habe ich leider auch nur Beispiele gefunden (soweit ich gesucht habe) die über eine eigenen sub laufen - sprich in die 99_myUtils.pm (oder eine eigene .pm) gehören.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Shafhem

Mit getauschten " ' wirf er leider auch Fehler:
2014.08.22 22:28:19 3: set Pushover1 msg 'Fertig!' 'Ende.' : OK
2014.08.22 22:28:19 3: system("/bin/led-ctrl update_led1=0") : Unknown command system("/bin/led-ctrl, try help.
2014.08.22 22:28:19 3: system("/bin/led-ctrl update_running") : Unknown command system("/bin/led-ctrl, try help.
2014.08.22 22:28:39 3: LEDAus: Unknown command {system("/bin/led-ctrl, try help.


Betrieb:standby {
fhem ("set Pushover1 msg 'Fertig!' 'Ende.'");
fhem('system("/bin/led-ctrl update_led1=0")');
fhem('system("/bin/led-ctrl update_running")');
fhem('define LEDAus at +00:00:20 {system("/bin/led-ctrl update_led1=0")');
}


Vorher war die LED an.
Dann muss die LED ausgemacht werden (reset).
Dann wieder blinkend an.
Und 20 Sekunden später wieder aus.

LG
Daniel

fiedel

Hi Daniel,

hier mal ein Beispiel aus meiner CFG - Achtung: Das Beispiel ist aus der CFG! ;)

# Status auf "Anwesend" setzen, AB ausschalten:
define State_At_Home_N notify Home:toggle|Home:on { \
      if (Value("Haus_Status") ne "Anwesend") { \
         Log 1, 'Haus Status geändert auf "Anwesend"';; \
         fhem("set Haus_Status Anwesend");;\
         fhem("set Dum_SM_D Status_Anwesend");;\
         system("/usr/bin/php /media/sd_intern/fhem/fritzbox_api/fritzbox_tam_on_off.php 0");;\
      }\
}


Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Puschel74

Moin,

system("/usr/bin/php /media/sd_intern/fhem/fritzbox_api/fritzbox_tam_on_off.php 0");
ohne fhem vorne dran - ok, ich muss mich mal ein bischen mit den system-befehlen für die fb rumschlagen  ::)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Shafhem

So Jungs,

ich gebe eine virtuelle Runde Bier aus.  :D
Jetzt läuft es.
Der Code in CFG sieht nun wie folgt aus:
# Pushover-Notification und LED
define AbgeschlossenPushover notify Betrieb:standby { \
         fhem ("set SATReceiver msg attention 3 Trockner fertig!");;\
         fhem ("set Pushover1 msg 'Trockner fertig!' 'Bitte leeren.'");;\
         system("/bin/led-ctrl budget_reached");;\
         fhem ("define LEDAus at +00:15:00 {system('/bin/led-ctrl update_led1=0')}");;\
}


In diesem Beispiel ist alles enthalten.
Vielleicht kann es ja jemand gebrauchen.

Noch ein Hinweis zu den Fritz!Box LEDs:
Ich habe es auf einer 7362 SL probiert.
Wie die LEDs blinken ist z.Bsp. hier beschrieben http://www.ip-phone-forum.de/showthread.php?t=185747&page=2&p=1316971#post1316971
Jetzt kommt aber der "hit". Zumindest bei der 7362 SL mit Fritz!OS 06.03 ist es so,
dass er manche LED-Befehle nur einmal annimmt. Sogar die LED auszuschalten und den Befehl noch einmal aufzurufen funktioniert nicht!

Ich habe jedoch herausgefunden, dass dies manche der LED Befehle nicht betrifft.
Man muss also vorher per Telnet oder Kommandozeile testen ob der Befehl mehrmals hintereinander setzen geht.
Bei der 7362 SL geht für das blinken der Info LED zum Beispiel budget_reached, aber update_running oder update_error gehen nicht.

Vielen lieben Dank und ein schönes WE
Daniel