Frage DOIF und Perl mit Fhem Befehl mischen

Begonnen von Ma_Bo, 22 Juni 2015, 03:00:36

Vorheriges Thema - Nächstes Thema

Ma_Bo

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
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ma_Bo

Funktioniert nur teilweise, ich bekomme jetzt als Sprachausgabe gesagt " Dollar Sprachausgabe " , der Teil, der fhem ist, funktioniert.
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

flurin

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")})



Ma_Bo

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.
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

satprofi

so klappts bei mir

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


gruss
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Ma_Bo

@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
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

igami

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
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Ma_Bo

@igami : Weil ich mir sonst Fhem für die "sleep 2" jeweils 2 Sekunden "einfriere"
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

flurin

#9
@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.

igami

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
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Ma_Bo

@ 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
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Ma_Bo

@ igami : ich sehe gerade, du hast hinter dem sleep ein ; evtl. liegt es daran
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

igami

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.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED