Shell Script aufrufen im Anweisungsteil

Begonnen von korreander12, 21 September 2016, 10:55:03

Vorheriges Thema - Nächstes Thema

korreander12

Hallo zusammen,

ich habe in meiner fhem.cfg mehrere notify 's erfolgreich am laufen:
define AA_EG_Wohnen notify AA_BEW_EG_Wohnen:on.* {system("/home/pi/apps/AA_EG_Wohnen.js");;}
Es wird ein shell script aufgerufen welches Daten an einen Server sendet so wie hier:
https://forum.fhem.de/index.php/topic,11977.msg70879.html#msg70879

Nun brauche ich in absehbarer Zeit eine weitere Bedingung
Wenn ("AA_BEW_EG_Wohnen:on" && "AA_Alarm_Aktiv") Dann  ......

Darum soll das ganze in eine DOIF:

#define AA_EG_Wohnen_do DOIF ([AA_BEW_EG_Wohnen] eq "on")
   ({system(""/home/pi/apps/AA_EG_Wohnen.js"")})

und ich bekomme ständig Fehlermeldung für den Anweisungsteil:
Unknown command ({system(""/home/pi/apps/AA_EG_Wohnen.js"")}), try help.

#define AA_EG_Wohnen_do DOIF ([AA_BEW_EG_Wohnen] eq "on")
   ({system("nodejs /home/pi/apps/AA_EG_Wohnen.js")})

Unknown command ({system("nodejs, try help.

#define AA_EG_Wohnen_do DOIF ([AA_BEW_EG_Wohnen] eq "on")
    (""/home/pi/apps/AA_EG_Wohnen.js"")

Unknown command (""/home/pi/apps/AA_EG_Wohnen.js""), try help.

Nun habe ich gefühlte 1000 Varianten schon ausprobiert und komme einfach nicht weiter.
Zumal der perl Aufruf beim notify wunderbar funktioniert.
Und aus der commandref werde ich dazu nicht wirklich schlau.
Kann mir bitte jemand helfen?

kumue

hab auf die Schnelle mal ein DOIF von mir gesucht, da siehts so aus und funktioniert...

([01:23|135]) ({system ("sudo -u root /opt/fhem/FHEM/backup.sh &")})

Damian

Zitat von: Korre am 21 September 2016, 10:55:03
Hallo zusammen,

ich habe in meiner fhem.cfg mehrere notify 's erfolgreich am laufen:
define AA_EG_Wohnen notify AA_BEW_EG_Wohnen:on.* {system("/home/pi/apps/AA_EG_Wohnen.js");;}
Es wird ein shell script aufgerufen welches Daten an einen Server sendet so wie hier:
https://forum.fhem.de/index.php/topic,11977.msg70879.html#msg70879

Nun brauche ich in absehbarer Zeit eine weitere Bedingung
Wenn ("AA_BEW_EG_Wohnen:on" && "AA_Alarm_Aktiv") Dann  ......

Darum soll das ganze in eine DOIF:

#define AA_EG_Wohnen_do DOIF ([AA_BEW_EG_Wohnen] eq "on")
   ({system(""/home/pi/apps/AA_EG_Wohnen.js"")})

und ich bekomme ständig Fehlermeldung für den Anweisungsteil:
Unknown command ({system(""/home/pi/apps/AA_EG_Wohnen.js"")}), try help.

#define AA_EG_Wohnen_do DOIF ([AA_BEW_EG_Wohnen] eq "on")
   ({system("nodejs /home/pi/apps/AA_EG_Wohnen.js")})

Unknown command ({system("nodejs, try help.

#define AA_EG_Wohnen_do DOIF ([AA_BEW_EG_Wohnen] eq "on")
    (""/home/pi/apps/AA_EG_Wohnen.js"")

Unknown command (""/home/pi/apps/AA_EG_Wohnen.js""), try help.

Nun habe ich gefühlte 1000 Varianten schon ausprobiert und komme einfach nicht weiter.
Zumal der perl Aufruf beim notify wunderbar funktioniert.
Und aus der commandref werde ich dazu nicht wirklich schlau.
Kann mir bitte jemand helfen?

Und warum nimmst du nicht den gleichen?

( {system("/home/pi/apps/AA_EG_Wohnen.js")} )
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

korreander12

Zitat von: Damian am 21 September 2016, 11:19:41
Und warum nimmst du nicht den gleichen?

( {system("/home/pi/apps/AA_EG_Wohnen.js")} )

ich würde ja gerne den gleichen Code nehmen, und habe es mehrfach versucht.
Jedesmal kommt die Fehlermeldung:

Unknown command ({system("/home/pi/apps/AA_EG_Wohnen.js")}), try help.

:'( :'( :'(
und ich frage mich warum?
Kann mir das jemand erklären?

kumue


korreander12

nein das Leerzeichen hat keinen Einfluss (habs versucht).

folgendes ist mir nun aufgefallen durch eure Hinweise:
funktioniert:
#define AA_EG_Wohnen_do DOIF ([AA_BEW_EG_Wohnen] eq "on" and [AA_Alarm_Aktiv] eq "on")({system("/home/pi/apps/AA_EG_Wohnen.js" )})

funktioniert nicht:
#define AA_EG_Wohnen_do DOIF ([AA_BEW_EG_Wohnen] eq "on" and [AA_Alarm_Aktiv] eq "on")
({system("/home/pi/apps/AA_EG_Wohnen.js" )})


obwohl in der Commandref folgendes steht.....
ZitatDas Modul unterstützt dazu Einrückungen, Zeilenumbrüche an beliebiger Stelle und Kommentierungen beginnend mit ## bis zum Ende der Zeile. Die Formatierungen lassen sich im DEF-Editor der Web-Oberfläche vornehmen.
....scheint mein Zeilenumbruch  (zur besseren Lesbarkeit, wie empfohlen) nach der Bedingung zu bewirken, dass der Interpreter die Ausführungszeile als neuen (extra) Befehl ansieht und nicht in Verbindung mit der DOIF Bedingung abarbeiten möchte.

Hat der Zeilenumbruch bei Euch auch einen Einfluss oder habt ihr nur eine Zeile in der fhem.cfg?

Ich editiere über "edit files" auf der Weboberfläche (attr WEB editConfig 1) - ist das falsch?
   

kumue

habe es eben mit Zeilenumbruch getestet...Script-Aufruf funktioniert...

hier meine DOIF-Version

98_DOIF.pm           11314 2016-04-26 18:29:24Z damian-s

Damian

Zitat von: Korre am 21 September 2016, 11:59:24
nein das Leerzeichen hat keinen Einfluss (habs versucht).

folgendes ist mir nun aufgefallen durch eure Hinweise:
funktioniert:
#define AA_EG_Wohnen_do DOIF ([AA_BEW_EG_Wohnen] eq "on" and [AA_Alarm_Aktiv] eq "on")({system("/home/pi/apps/AA_EG_Wohnen.js" )})

funktioniert nicht:
#define AA_EG_Wohnen_do DOIF ([AA_BEW_EG_Wohnen] eq "on" and [AA_Alarm_Aktiv] eq "on")
({system("/home/pi/apps/AA_EG_Wohnen.js" )})


obwohl in der Commandref folgendes steht.........scheint mein Zeilenumbruch  (zur besseren Lesbarkeit, wie empfohlen) nach der Bedingung zu bewirken, dass der Interpreter die Ausführungszeile als neuen (extra) Befehl ansieht und nicht in Verbindung mit der DOIF Bedingung abarbeiten möchte.

Hat der Zeilenumbruch bei Euch auch einen Einfluss oder habt ihr nur eine Zeile in der fhem.cfg?

Ich editiere über "edit files" auf der Weboberfläche (attr WEB editConfig 1) - ist das falsch?


Du arbeitest nicht mit der aktuellen Version des DOIF-Moduls.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

korreander12

Zitat von: Damian am 21 September 2016, 12:17:05
Du arbeitest nicht mit der aktuellen Version des DOIF-Moduls.

Ich habe vorgestern ein "update" ausgeführt und meine Datei  /opt/fhem/FEHM/98_DOIF.pm zeigt folgendes:

Zitat#############################################
# $Id: 98_DOIF.pm 11314 2016-04-26 18:29:24Z damian-s $
#
# This file is part of fhem.

.... ich habe zwischendurch schon mehrere shutdown restarts gemacht.
muss ich dann nochmal was machen um die aktuelle DOIF zu laden?   ???
kann ich in der Webansicht abfragen welche Version von DOIF aktuell verwendet wird?

Ellert

Zitat von: Korre am 21 September 2016, 11:59:24
nein das Leerzeichen hat keinen Einfluss (habs versucht).

folgendes ist mir nun aufgefallen durch eure Hinweise:
funktioniert:
#define AA_EG_Wohnen_do DOIF ([AA_BEW_EG_Wohnen] eq "on" and [AA_Alarm_Aktiv] eq "on")({system("/home/pi/apps/AA_EG_Wohnen.js" )})

funktioniert nicht:
#define AA_EG_Wohnen_do DOIF ([AA_BEW_EG_Wohnen] eq "on" and [AA_Alarm_Aktiv] eq "on")
({system("/home/pi/apps/AA_EG_Wohnen.js" )})


obwohl in der Commandref folgendes steht.........scheint mein Zeilenumbruch  (zur besseren Lesbarkeit, wie empfohlen) nach der Bedingung zu bewirken, dass der Interpreter die Ausführungszeile als neuen (extra) Befehl ansieht und nicht in Verbindung mit der DOIF Bedingung abarbeiten möchte.

Hat der Zeilenumbruch bei Euch auch einen Einfluss oder habt ihr nur eine Zeile in der fhem.cfg?

Ich editiere über "edit files" auf der Weboberfläche (attr WEB editConfig 1) - ist das falsch?


Es dürfte keine der Definitionen funktionieren, solange Du eine Raute vor die Definitionszeile setzt.

ZitatIch editiere über "edit files" auf der Weboberfläche (attr WEB editConfig 1) - ist das falsch?
Empfohlen wird die Nutzung des DEF-Editors, den Du in der Geräteübersicht (DeviceOverview) findest (auf DEF klicken), dann findet auch eine Syntaxprüfung statt. DOIF: Tips leichtere Bedienung Syntaxhervorhebung Klammerprüfung Suchen&Ersetzen, usw.
Laut Befehlsreferenz reichen zum Systemaufruf doppelte Anführungszeichen ", also nicht "", das würde dann für den DOIF-Befehlsteil so aussehen ("/home/pi/apps/AA_EG_Wohnen.js")

Zitatkann ich in der Webansicht abfragen welche Version von DOIF aktuell verwendet wird?
version

kumue

in der Webansicht

version 98_DOIF

wir haben die selbe Version und bei mir funktioniert es mit Zeilenumbruch...   ::)

korreander12


version 98_DOIF
gibt mir folgendes zurück:
98_DOIF.pm 11314 2016-04-26 18:29:24Z damian-s

Zitat von: Ellert am 21 September 2016, 12:41:50
Es dürfte keine der Definitionen funktionieren, solange Du eine Raute vor die Definitionszeile setzt.
die Raute war in der fhem.cfg nicht drinn.

Zitat von: Ellert am 21 September 2016, 12:41:50
Empfohlen wird die Nutzung des DEF-Editors, den Du in der Geräteübersicht (DeviceOverview) findest (auf DEF klicken), dann findet auch eine Syntaxprüfung statt. DOIF: Tips leichtere Bedienung Syntaxhervorhebung Klammerprüfung Suchen&Ersetzen, usw.
OK, das ist hilfreich, danke.
Ich muss also erst das define AA_EG_Wohnen_do DOIF in der fhem.cfg eintragen und dann  in der Geräteübersicht (DeviceOverview) auf DEF klicken, um die Bedingungen und Ausführungsanweisungen anzugeben, -richtig?

Zitat von: Ellert am 21 September 2016, 12:41:50
Laut Befehlsreferenz reichen zum Systemaufruf doppelte Anführungszeichen ", also nicht "", das würde dann für den DOIF-Befehlsteil so aussehen ("/home/pi/apps/AA_EG_Wohnen.js")
..Das habe ich gelesen, soweit bin ich noch nicht gekommen, werde ich einbauen.

Ellert

ZitatIch muss also erst das
Code: [Auswählen]

define AA_EG_Wohnen_do DOIF

in der fhem.cfg eintragen und dann  in der Geräteübersicht (DeviceOverview) auf DEF klicken, um die Bedingungen und Ausführungsanweisungen anzugeben, -richtig?
Nein.
Du gibst define AA_EG_Wohnen_do DOIF ([AA_BEW_EG_Wohnen]) in die Befehlszeile ein und drückst die Eingabetaste.
Dann öffnet sich die Geräteübersicht, dort klickst Du auf DEF, dann öffnet sich der Editor, darin ergänzt Du den Rest.

Wenn Du die fhem.cfg direkt editierst, dann musst Du alle Steuerzeichen per Hand eintragen und entsprechende Maskierungen selbst durchführen, wie Semikolon verdoppeln oder vervierfachen.

Damian

Zitat von: Korre am 21 September 2016, 12:58:10
version 98_DOIF
gibt mir folgendes zurück:
98_DOIF.pm 11314 2016-04-26 18:29:24Z damian-s

Dann liegt das wohl daran, dass du nicht über den Browser im DEF-Editor editierst, dann fehlt in der cfg-Datei das Backslash, welches zusammenhängede Zeilen auch zusammen hält.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

korreander12

vielen Dank euch Dreien,

es läuft seit heute nachmittag recht stabil und alles funktioniert wie es soll.
Nun ist mir die Vorgehensweise sowie die empfohlene Verwendung klar und geläufig.
Nochmals herzlichen Dank! :) :) :)