FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Decki am 29 Oktober 2017, 15:13:02

Titel: Notify mit Unwetterwarung Syntax Problem
Beitrag von: Decki am 29 Oktober 2017, 15:13:02
Hallo zusammen,

ich versuche mit einem Notify eine Sprachausgabe des Unwetter Module UWZ an AMAD auf dem Tablet zu übergeben bzw. auszugeben.

Meine Anleitung ist von : https://waschto.eu/unwetterwarnungen-per-sprachausgabe-ausgeben/#Unwetterwarnungen_abrufen

Habe zuerst mit:
Unwetterzentrale:.* {
my $Zeit = sprintf("%%02d:%%02d",$hour,$min);;
my $warncounter = (ReadingsVal('Unwetterzentrale','WarnCount',""));;
my $warntext = (ReadingsVal('Unwetterzentrale','Warn_0_LongText',""));;

if(($warncounter > 0) && ($Zeit gt "08:00") && ($Zeit lt "22:00")) {fhem ("set Tablet ttsMsg Wetterwarnung für Eppingen. $warntext ")};;}

es versucht.

Wollte dieses nun erweitern, da es heute mehrere (3) Warnungen gab. Möchte alle Warnungen nacheinander ansagen lassen.
Meine Idee:
Unwetterwarnung:.* {
my ($Zeit1) = @_;;
my ($warntext) = @_;;
$Zeit1 = sprintf("%02d:%02d",$hour,$min);;
$warntext = (Value("Warn_0_LongText"));;

if((Value("WarnCount") ge 1) && ($Zeit1 gt "08:00") && ($Zeit1 lt "22:00")) $warntext =(Value("Warn_0_LongText") {fhem ("set TabletWohnzimmer ttsMsg Wetterwarnung fuer Eppingen. $warntext ")}

elsif((Value("WarnCount") ge 2) && ($Zeit1 gt "08:00") && ($Zeit1 lt "22:00")) $warntext =(Value("Warn_1_LongText") {fhem ("set TabletWohnzimmer ttsMsg Wetterwarnung fuer Eppingen. $warntext ")}

elsif((Value("WarnCount") ge 3) && ($Zeit1 gt "08:00") && ($Zeit1 lt "22:00")) $warntext =(Value("Warn_2_LongText") {fhem ("set TabletWohnzimmer ttsMsg Wetterwarnung fuer Eppingen. $warntext ")}
}


Als Fehler im Web-editor von Fhem bekommen ich:
syntax error at (eval 26496) line 7, near ") $warntext "
Global symbol "$Zeit1" requires explicit package name at (eval 26496) line 9.
Global symbol "$Zeit1" requires explicit package name at (eval 26496) line 9.
Global symbol "$warntext" requires explicit package name at (eval 26496) line 9.
Global symbol "$Zeit1" requires explicit package name at (eval 26496) line 11.
Global symbol "$Zeit1" requires explicit package name at (eval 26496) line 11.
Global symbol "$warntext" requires explicit package name at (eval 26496) line 11.

Ich weis, dass das auch mit einem Zähler in der Schleife geht, aber als Perl Anfänger erst mal mit dem obigen Beispiel.
Was mache ich falsch?
Warncount ist eine Zahl als Reading und gibt die Anzahl der Warnungen an. Die Text-Warnmeldung beginnt bei 0.
Die Text-Sprachausausgabe am Tablet funktioniert.

Andy
Titel: Antw:Notify mit Unwetterwarung Syntax Problem
Beitrag von: amenomade am 29 Oktober 2017, 18:24:51
Warum my ($Zeit1) = @_;;
my ($warntext) = @_;;

wenn Du sofort
$Zeit1 = sprintf("%02d:%02d",$hour,$min);;
$warntext = (Value("Warn_0_LongText"));;

machst???

Die Syntax, die Du am Anfang nutzt, ist (fast) um die Variablen mit Parametern vom Aufruf der Funktion zu befüllen.
Mach einfach:
my $Zeit1 = sprintf("%02d:%02d",$hour,$min);;
my $warntext = ReadingsVal('Unwetterzentrale','Warn_0_LongText',"");;

und die Zeilen mit @_weg.
ZitatWarncount ist eine Zahl als Reading
Wenn das ein Reading vom Device Umwetterzentrale ist, musst Du so schreiben:
ReadingsVal('Unwetterzentrale','WarnCount',"")stattValue("WarnCount")
Value("WarnCount") bedeutet "Status (STATE) des Devices WarnCount"
Das gleiche gilt für Warn_0_LongText: das ist ein Reading vom Device Umwetterzentrale, kein Device per se. Und auch für Warn_1_Longtext usw.
Titel: Antw:Notify mit Unwetterwarung Syntax Problem
Beitrag von: CoolTux am 29 Oktober 2017, 19:31:33
Es gibt Beispiele im UWZ Thread. Dort wird sowas mit einer 99_myUtils gelöst
Titel: Antw:Notify mit Unwetterwarung Syntax Problem
Beitrag von: Decki am 29 Oktober 2017, 20:14:54
Hallo Cooltux,

habe ich gelesen, das ist aber nur ; soweit ich das verstanden habe; wenn der MP3 Player auch auf dem Raspi ist, bei mir spielt aber das Tablet dies  mit AMAD ab.


amenomade,
hatte ich anfangs so, aber nach dem vielen lesen und probieren kam dann der erste Versuch heraus. Habe es nun gelöst mit deinem Hinweis:
Unwetterwarnung:.* {
my $Zeit1 = sprintf("%02d:%02d",$hour,$min);;
my $warntext = (ReadingsVal('Unwetterwarnung','Warn_0_LongText',""));;

if(ReadingsVal('Unwetterwarnung','WarnCount',"") ge 1 && $Zeit1 gt "08:00" && $Zeit1 lt "22:00") {{$warntext =(ReadingsVal('Unwetterwarnung','Warn_0_LongText',""))}
{fhem ("set TabletWohnzimmer ttsMsg Wetterwarnung fuer Eppingen. $warntext ")}}

elsif(ReadingsVal('Unwetterwarnung','WarnCount',"") ge "2" && $Zeit1 gt "08:00" && $Zeit1 lt "22:00") {{$warntext =(ReadingsVal('Unwetterwarnung','Warn_1_LongText',""))}
{fhem ("set TabletWohnzimmer ttsMsg Wetterwarnung fuer Eppingen. $warntext ")}}

elsif(ReadingsVal('Unwetterwarnung','WarnCount',"") ge "3" && $Zeit1 gt "08:00" && $Zeit1 lt "22:00") {{$warntext =(ReadingsVal('Unwetterwarnung','Warn_2_LongText',""))}
{fhem ("set TabletWohnzimmer ttsMsg Wetterwarnung fuer Eppingen. $warntext ")}}
}


Nochmals Danke für Eure Hilfe
Andy