Syntaxproblem bei mehreren if-Abfragen

Begonnen von Michi240281, 23 Februar 2014, 17:29:07

Vorheriges Thema - Nächstes Thema

Michi240281

Hallo zusammen,

ich möchte gerne meinen Abfallkalendar per Sprachausgabe umsetzen. Habe das bislang mit Mailbenachrichtigung gemacht bzw. mit Nachrichten über das ENIGMA2-Modul.

Ich möchte nun jedoch, dass bei Müll x die entsprechende MP3 abgespielt wird. Irgendwo habe ich wohl noch einen Fehler drin, den ich aber nicht sehen kann.

Mit einer if-Abfrage funktioniert es:

define events holiday
attr events group Events
attr events room Haus
define CheckEventHeute at *17:22:00 {\
my $Eventname;;\
my $EventHeute;;\
$EventHeute = fhem("get events today");;\
print $EventHeute;;\
if ($EventHeute == "Gelber Sack") {fhem("set Funk_Gong_Ton playTone 001");;\
}\
}


doch mit folgenden if-Abfragen will es nicht hinhauen.

define events holiday
attr events group Events
attr events room Haus
define CheckEventHeute at *17:22:00 {\
my $Eventname;;\
my $EventHeute;;\
$EventHeute = fhem("get events today");;\
print $EventHeute;;\
if ($EventHeute == "Gelber Sack") {fhem("set Funk_Gong_Ton playTone 001");;\
if ($EventHeute == "Restmüll") {fhem("set Funk_Gong_Ton playTone 002");;\
if ($EventHeute == "Altpapier") {fhem("set Funk_Gong_Ton playTone 003");;\
f ($EventHeute == "Biomüll") {fhem("set Funk_Gong_Ton playTone 004");;\
}\
}


Könnte hier vllt mal jmd schauen, wo ich den Fehler habe?

Besten Dank und schönen Restsonntag allen!

FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Puschel74

Hallo,

ein einfaches copy&paste nach Notepad++ zeigt mir schon mindestens 3 fehlende }

Das sollte aber eigentlich auch eine Fehlermeldung im Logfile erzeugen.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Michi240281

Ok danke!

Jetzt habe ich es so:

define events holiday
attr events group Events
attr events room Haus
define CheckEventHeute at *17:52:00 {\
my $Eventname;;\
my $EventHeute;;\
$EventHeute = fhem("get events today");;\
print $EventHeute;;\
if ($EventHeute == "Gelber Sack") {fhem("set Funk_Gong_Ton playTone 001")};;\
if ($EventHeute == "Restmuell") {fhem("set Funk_Gong_Ton playTone 002")};;\
if ($EventHeute == "Altpapier") {fhem("set Funk_Gong_Ton playTone 003")};;\
if ($EventHeute == "Biomuell") {fhem("set Funk_Gong_Ton playTone 004")}}


Jetzt geht es, allerdings werden alle Töne abgespielt, also alle 4 "set" werden ausgeführt, obwohl die Prüfung nur bei "Gelber Sack" zutreffen müsste.

??
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Puschel74

Hallo,

== wird mMn bei Zahlen verwendet
eq sollte das sein was du suchst.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Michi240281

So:

define events holiday
attr events group Events
attr events room Haus
define CheckEventHeute at *18:59:00 {\
my $Eventname;;\
my $EventHeute;;\
$EventHeute = fhem("get events today");;\
print $EventHeute;;\
if ($EventHeute eq "Gelber Sack") {fhem("set Funk_Gong_Ton playTone 001")};;\
if ($EventHeute eq "Restmuell") {fhem("set Funk_Gong_Ton playTone 002")};;\
if ($EventHeute eq "Altpapier") {fhem("set Funk_Gong_Ton playTone 003")};;\
if ($EventHeute eq "Biomuell") {fhem("set Funk_Gong_Ton playTone 004")}}


tut sich garnix! :(
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Puschel74

Hallo,

dann lass dir mal einen Logfileeintrag erzeugen mit dem Inhalt von $EventHeute und schau mal was tatsächlich in der Variable steht.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

UliM

Hi,
bau doch mal ein
Debug "$EventHeute";
ein und schau, was drin steht. Offenbar passt Dein eq nicht zu dem entahltenen Text.
Mglw musst Du umstellen von "equals" auf "contains":
if ($EventHeute =~ m/Gelber Sack/)
=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Michi240281

2014.02.23 19:56:00 1: DEBUG>Gelber Sack   
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Rince

Blöde Frage:
set Funk_Gong_Ton playTone 001



direkt in der fhem Befehlszeile funktioniert?
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Michi240281

Zitat von: Rince am 23 Februar 2014, 21:07:15
Blöde Frage:
set Funk_Gong_Ton playTone 001



direkt in der fhem Befehlszeile funktioniert?

KLar, das geht natürlich!
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Rince

Sorry, war nur ne Frage.
Dann wäre jetzt imho der Code schlau, der deine Mülltüten feststellt ;)
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Michi240281

Moin,

mit folgendem Code hat es gestern, als $Eventheute "Gelber Sack" war, funktioniert:

define CheckEventHeute at *08:18:00 {\
my $Eventname;;\
my $EventHeute;;\
$EventHeute = fhem("get events today");;\
print $EventHeute;;\
if ($EventHeute =~ m/Gelber Sack/) {fhem("set Funk_Gong_Ton playTone 001")};;\
if ($EventHeute =~ m/Restmuell/) {fhem("set Funk_Gong_Ton playTone 002")};;\
if ($EventHeute =~ m/Altpapier/) {fhem("set Funk_Gong_Ton playTone 003")};;\
if ($EventHeute =~ m/Biomuell/) {fhem("set Funk_Gong_Ton playTone 004")}}


Heute zeigt $Eventheute "Biomuell", doch nun bleibt der Gong stumm.

Also irgendwas scheint an der Syntax noch nicht zu stimmen.
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Michi240281

#12
Was macht eigentlich immer das "\" am Ende der Zeilen? Ist das dafür da, um einen Zeilenumbruch einzuleiten?

Habe den Code jetzt nämlich folgendermaßen umgestellt, und jetzt klappt alles!

define CheckEventHeute at *08:52:00 {\
my $Eventname;;\
my $EventHeute;;\
$EventHeute = fhem("get events today");;\
print $EventHeute;;\
if ($EventHeute =~ m/Gelber Sack/) {fhem("set Funk_Gong_Ton playTone 001")};; if ($EventHeute =~ m/Restmuell/) {fhem("set Funk_Gong_Ton playTone 002")};; if ($EventHeute =~ m/Altpapier/) {fhem("set Funk_Gong_Ton playTone 003")};; if ($EventHeute =~ m/Biomuell/) {fhem("set Funk_Gong_Ton playTone 004")}}


EDIT: Nachdem nun die Ansteuerung des Gongs funktioniert wollte ich mal versuchen, 2 Befehle ausführen zu lassen, und zwar einmal den Gong und dann noch eine Anzeige auf der Dreambox. Folgenden Code habe ich dazu erstellt:

define CheckEventHeute at *08:52:00 {\
my $Eventname;;\
my $EventHeute;;\
$EventHeute = fhem("get events today");;\
print $EventHeute;;\
if ($EventHeute =~ m/Gelber Sack/) {fhem("set Funk_Gong_Ton playTone 001")};; if ($EventHeute =~ m/Restmuell/) {fhem("set Funk_Gong_Ton playTone 002")};; if ($EventHeute =~ m/Altpapier/) {fhem("set Funk_Gong_Ton playTone 003")};; if ($EventHeute =~ m/Biomuell/) {fhem("set Funk_Gong_Ton playTone 004 [b];; set DM500HD msg message 60 $EventHeute[/b]")}}


Seltsamerweise wird nun NUR noch die Nachricht auf der DM500HD angezeigt und der Gong bleibt stumm. Jmd ne Idee? Gibts da irgendeine Art Priorisierung? Normalerweise müsste doch beides ausgeführt werden oder nicht? Ist da vllt die FB überfordert?
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Rince

Das \ am Zeilenende ist genau dann nötig, wenn du den Code direkt in der fhem.cfg bastelst. So wie auch die ;;

Um das etwas übersichtlicher zu machen, würde ich dringend empfehlen das at NICHT über die cfg zu bearbeiten,  sondern über das DEF.
Da sieht man dann auch vernünftig, welche if jetzt welche Befehle ausführen. Und man muss nicht dauernd umdenken mit den Klammern etc.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Damian

Wenn ich sehe, wie du dich hier quälst - probier mal:

define CheckEventHeute at *08:18:00
IF (fhem("get events today") =~ m/Gelber Sack/) (set Funk_Gong_Ton playTone 001);
IF (fhem("get events today") =~ m/Restmmuell/) (set Funk_Gong_Ton playTone 002);
IF (fhem("get events today") =~ m/Altpapier/) (set Funk_Gong_Ton playTone 003);
IF (fhem("get events today") =~ m/Biomuell/) (set Funk_Gong_Ton playTone 004)


Wenn man weniger tippen muss, kann man auch weniger falsch machen.  :)

siehe: http://forum.fhem.de/index.php/topic,17895.msg118503.html#msg118503

Gruß

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