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
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
Funktioniert nur teilweise, ich bekomme jetzt als Sprachausgabe gesagt " Dollar Sprachausgabe " , der Teil, der fhem ist, funktioniert.
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")})
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.
so klappts bei mir
([Leistung] < 5) (set OneTouch ttsSay Waschschmaschschine fertik)
gruss
@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
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
@igami : Weil ich mir sonst Fhem für die "sleep 2" jeweils 2 Sekunden "einfriere"
@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.
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
@ 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
@ igami : ich sehe gerade, du hast hinter dem sleep ein ; evtl. liegt es daran
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.