FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Ma_Bo am 22 Juni 2015, 03:00:36

Titel: Frage DOIF und Perl mit Fhem Befehl mischen
Beitrag von: Ma_Bo am 22 Juni 2015, 03:00:36
Hallo Leute, ich habe folgendes in einer Notify DEF stehen :

WhatsApp_Sendehilfe:Sprachausgabe_Marcel {my $sprachausgabe=ReadingsVal("Marcel_iPhone_WhatsApp","message","0");fhem("set IonikTablet ttsSay $sprachausgabe ");fhem("set Marcel_iPhone_WhatsApp send ## $sprachausgabe ## wird per Sprachausgabe gesprochen;sleep 2;setreading Marcel_iPhone_WhatsApp chatstate warten;setreading Sarah_iPhone_WhatsApp chatstate warten;setreading AutoVoice_WhatsApp state warten;sleep 2;set IonikTablet toastMessage Tonunterbindung")}

jetzt möchte ich das in ein DOIF packen, aber komme nicht weiter, wenn ich den Code ins DOIF packe :

([WhatsApp_Sendehilfe] eq "Sprachausgabe_Marcel") ({my $sprachausgabe=ReadingsVal("Marcel_iPhone_WhatsApp","message","0");fhem("set IonikTablet ttsSay $sprachausgabe ");fhem("set Marcel_iPhone_WhatsApp send ## $sprachausgabe ## wird per Sprachausgabe gesprochen;sleep 2;setreading Marcel_iPhone_WhatsApp chatstate warten;setreading Sarah_iPhone_WhatsApp chatstate warten;setreading AutoVoice_WhatsApp state warten;sleep 2;set IonikTablet toastMessage Tonunterbindung")})

bekomme ich folgenden Error

{my $sprachausgabe=ReadingsVal("Marcel_iPhone_WhatsApp","message","0");fhem("set IonikTablet ttsSay $sprachausgabe ");fhem("set Marcel_iPhone_WhatsApp send ## $sprachausgabe ## wird per Sprachausgabe gesprochen;sleep 2;setreading Marcel_iPhone_WhatsApp chatstate warten;setreading Sarah_iPhone_WhatsApp chatstate warten;setreading AutoVoice_WhatsApp state warten;sleep 2;set IonikTablet toastMessage Tonunterbindung")}: Unknown command {my, try help. Unknown command fhem("set, try help. Unknown command fhem("set, try help.

Wo muss ich welche " oder ; setzen ?

Verzweifel ein wenig, hab schon einige Sachen ausprobiert.

Grüß Marcel
Titel: Antw:Frage DOIF und Perl mit Fhem Befehl mischen
Beitrag von: Otto123 am 22 Juni 2015, 09:03:33
Moin,
ZitatAngaben im Ausführungsteil:

Der Ausführungsteil wird immer wie die Bedingung in runden Klammern angegeben. Es werden standardmäßig FHEM-Befehle angegeben, wie z. B.: ...(set lamp on)

Sollen mehrere FHEM-Befehle ausgeführt werden, so werden sie mit Komma statt mit Semikolon angegeben ... (set lamp1 on, set lamp2 off)

Falls ein Komma nicht als Trennzeichen zwischen FHEM-Befehlen gelten soll, so muss der FHEM-Ausdruck zusätzlich in runde Klammern gesetzt werden: ...((set lamp1,lamp2 on),set switch on)

Perlbefehle müssen zusätzlich in geschweifte Klammern gesetzt werden: ... ({system ("wmail Peter is at home")})

Mehrere Perlbefehle hintereinander werden im DEF-Editor mit zwei Semikolons angegeben: ...({system ("wmail Peter is at home");;system ("wmail Marry is at home")})

FHEM-Befehle lassen sich mit Perl-Befehlen kombinieren: ... ({system ("wmail Peter is at home")}, set lamp on)
([WhatsApp_Sendehilfe] eq "Sprachausgabe_Marcel") ({my $sprachausgabe=ReadingsVal("Marcel_iPhone_WhatsApp","message","0")},set IonikTablet ttsSay $sprachausgabe , set Marcel_iPhone_WhatsApp send ## $sprachausgabe ## wird per Sprachausgabe gesprochen , sleep 2 , setreading Marcel_iPhone_WhatsApp chatstate warten , setreading Sarah_iPhone_WhatsApp chatstate warten , setreading AutoVoice_WhatsApp state warten , sleep 2 , set IonikTablet toastMessage Tonunterbindung)
Wäreein Versuch von mir.

Bei dem {my ...} bin ich unsicher.

Gruß Otto
Titel: Antw:Frage DOIF und Perl mit Fhem Befehl mischen
Beitrag von: Ma_Bo am 22 Juni 2015, 11:16:02
Funktioniert nur teilweise, ich bekomme jetzt als Sprachausgabe gesagt " Dollar Sprachausgabe " , der Teil, der fhem ist, funktioniert.
Titel: Antw:Frage DOIF und Perl mit Fhem Befehl mischen
Beitrag von: flurin am 22 Juni 2015, 11:54:52
Versuchs mit zwei ;;

DEF-Editor:

([WhatsApp_Sendehilfe] eq "Sprachausgabe_Marcel") ({my $sprachausgabe=ReadingsVal("Marcel_iPhone_WhatsApp","message","0");;
fhem("set IonikTablet ttsSay $sprachausgabe ");;
fhem("set Marcel_iPhone_WhatsApp send ## $sprachausgabe ## wird per Sprachausgabe gesprochen;sleep 2;setreading Marcel_iPhone_WhatsApp chatstate warten;setreading Sarah_iPhone_WhatsApp chatstate warten;setreading AutoVoice_WhatsApp state warten;sleep 2;set IonikTablet toastMessage Tonunterbindung")})


Titel: Antw:Frage DOIF und Perl mit Fhem Befehl mischen
Beitrag von: Ma_Bo am 22 Juni 2015, 12:00:35
Danke flurin, aber da bekomme ich folgende Fehlermeldung :

Zitat{my $sprachausgabe=ReadingsVal("Marcel_iPhone_WhatsApp","message","0");;fhem("set IonikTablet ttsSay $sprachausgabe ");;fhem("set Marcel_iPhone_WhatsApp send ## $sprachausgabe ## wird per Sprachausgabe gesprochen;sleep 2;setreading Marcel_iPhone_WhatsApp chatstate warten;setreading Sarah_iPhone_WhatsApp chatstate warten;setreading AutoVoice_WhatsApp state warten;sleep 2;set IonikTablet toastMessage Tonunterbindung")}: Unknown command {my, try help.
Titel: Antw:Frage DOIF und Perl mit Fhem Befehl mischen
Beitrag von: satprofi am 22 Juni 2015, 12:17:52
so klappts bei mir

([Leistung] < 5) (set OneTouch ttsSay Waschschmaschschine fertik)


gruss
Titel: Antw:Frage DOIF und Perl mit Fhem Befehl mischen
Beitrag von: Ma_Bo am 22 Juni 2015, 12:23:51
@Satprofi, das funktioniert bei mir auch, das Problem ist die Variable.

@ flurin, habe es jetzt so gelöst, funktioniert wunderbar so. Und ich erspare mir den weg, den wert in eine variable zu übergeben :

Zitat([WhatsApp_Sendehilfe] eq "Sprachausgabe_Marcel") ({fhem ("set IonikTablet ttsSay [Marcel_iPhone_WhatsApp:message];;set Marcel_iPhone_WhatsApp send ## [Marcel_iPhone_WhatsApp:message] ## wird per Sprachausgabe gesprochen;;sleep 2;;setreading Marcel_iPhone_WhatsApp chatstate warten;;setreading Sarah_iPhone_WhatsApp chatstate warten;;setreading AutoVoice_WhatsApp chatstate warten;;sleep 2;;set IonikTablet toastMessage Tonunterbindung;;set WhatsApp_Sendehilfe warten")}) DOELSE
Titel: Antw:Frage DOIF und Perl mit Fhem Befehl mischen
Beitrag von: igami am 22 Juni 2015, 12:36:33
Warum wechselst du in Perl und dann wieder in fhem?

Ein

([WhatsApp_Sendehilfe] eq "Sprachausgabe_Marcel")
  (
    set IonikTablet ttsSay [Marcel_iPhone_WhatsApp:message],
    set Marcel_iPhone_WhatsApp send ## [Marcel_iPhone_WhatsApp:message] ## wird per Sprachausgabe gesprochen,
    sleep 2;
    setreading Marcel_iPhone_WhatsApp chatstate warten,
    setreading Sarah_iPhone_WhatsApp chatstate warten,
    setreading AutoVoice_WhatsApp state warten,
    sleep 2;
    set IonikTablet toastMessage Tonunterbindung
  )

sollte auch funktionieren.

Grüße
igami
Titel: Antw:Frage DOIF und Perl mit Fhem Befehl mischen
Beitrag von: Ma_Bo am 22 Juni 2015, 12:46:29
@igami : Weil ich mir sonst Fhem für die "sleep 2" jeweils 2 Sekunden "einfriere"
Titel: Antw:Frage DOIF und Perl mit Fhem Befehl mischen
Beitrag von: flurin am 22 Juni 2015, 12:55:59
@Ma_Bo

Beim DOIF versuche ich at, sleep usw. zu vermeiden.
Mein Vorschlag mit einer reinen DOIF-Lösung:


define du_count dummy



([WhatsApp_Sendehilfe] eq "Sprachausgabe_Marcel")
  (set IonikTablet ttsSay [Marcel_iPhone_WhatsApp:message],
  set Marcel_iPhone_WhatsApp send ## [Marcel_iPhone_WhatsApp:message] ## wird per Sprachausgabe gesprochen,
  setreading du_count state 1)
DOELSEIF ([du_count] == 1)
  (setreading Marcel_iPhone_WhatsApp chatstate warten,
  setreading Sarah_iPhone_WhatsApp chatstate warten,
  setreading AutoVoice_WhatsApp chatstate warten,
  setreading du_count state 2)
DOELSEIF [du_count] == 2)
  (set IonikTablet toastMessage Tonunterbindung,
  set WhatsApp_Sendehilfe warten,
  setreading du_count state 0)
attr <name> wait 1,2,2


Es braucht zwar ein Dummy aber IMHO ist es besser zu warten und erweitern.
Titel: Antw:Frage DOIF und Perl mit Fhem Befehl mischen
Beitrag von: igami am 22 Juni 2015, 12:56:40
Zitat von: Ma_Bo am 22 Juni 2015, 12:46:29
@igami : Weil ich mir sonst Fhem für die "sleep 2" jeweils 2 Sekunden "einfriere"
Nicht, wenn dahinter wieder ein Kommando steht.
Zitat
Note: sleep followed by another command is not blocking FHEM, and is comparable to a nameless at
Habe bei mir auch ein sleep im DOIF und es wird dadurch nichts blockiert.

Grüße
igami
Titel: Antw:Frage DOIF und Perl mit Fhem Befehl mischen
Beitrag von: Ma_Bo am 22 Juni 2015, 13:21:09
@ igami : ok, das kann sein, habe aber im DOIF, wenn ich sleep eingebaut habe, (set test on,sleep 22,set test off) 22 Sekunden mein fhem blockiert.
@ flurin : sleep im DOIF habe ich jetzt komplett raus, führe nur noch befehle ohne sleep durch, damit das ganze flexibler für mich bleibt

Jetzt funktioniert es wie es soll
Titel: Antw:Frage DOIF und Perl mit Fhem Befehl mischen
Beitrag von: Ma_Bo am 22 Juni 2015, 13:23:19
@ igami : ich sehe gerade, du hast hinter dem sleep ein ; evtl. liegt es daran
Titel: Antw:Frage DOIF und Perl mit Fhem Befehl mischen
Beitrag von: igami am 22 Juni 2015, 15:07:21
Zitat von: Ma_Bo am 22 Juni 2015, 13:23:19
@ igami : ich sehe gerade, du hast hinter dem sleep ein ; evtl. liegt es daran
Ja, daran liegt es.