Hi zusammen,
ich ärgere mich gerade mal wieder mit einem notify herum und bekomme es einfach nicht hin.
define notify_HA_Alarm_Wohnzimmer notify WZ_Fenster:open {
if ( ([HomeStatus] eq "1" ) ) {
fhem ("set FLU_Lampe on" )}
}
liefert den Fehler
notify_HA_Alarm_Wohnzimmer return value: Bareword "HomeStatus" not allowed while "strict subs"
Bei einem DOIF hat es mit den eckigen Klammern geklappt, vorher hatte ich den gleichen Fehler.
Folgendes klappt tadellos:
define doif_HA_Anwesenheitcheck DOIF ([Handy1] eq "absent" and [Handy2] eq "absent" and [HomeStatus] ne "1") (set HA_Anwesenheit absent,set FLU_Camera on,{system("sudo /Data/gigaset/set_away.sh")},set pushmsg msg 'Gigaset Elements' 'Alarmanlage: Scharf geschaltet!') DOELSE ([Handy1] eq "present" or [Handy2] eq "present" or [HomeStatus] eq "1")(set HA_Anwesenheit present, set FLU_Camera off,{system("sudo /Data/gigaset/set_home.sh")},set pushmsg msg 'Gigaset Elements' 'Alarmanlage: Ausgeschaltet!')
Wo ist mein Denkfehler?
LG Sille
Du befindests dich im Perl Teil, erkennbar an den geschweiften Klammern. Perl kennt die eckigen Klammern nicht. Du wirst mit Readingsval arbeiten müssen oder IF verwenden.
Ah, jetzt habe ich den Unterschied verstanden! Danke dafür!
Was meinst du mit "du wirst IF verwenden müssen"? Meinst du DOIF? IF ist ja schon mit dabei...
if ( ([HomeStatus] eq "1" ) )
IF und DOIF ist nicht das gleiche (siehe commandref).
Vielleicht sollte kurz erwähnt werden das es ein FHEM IF gibt und natürlich ein Perl if
Grüße
Wieder etwas gelernt! IF <> if
"Beim IF-Befehl (IF in Großbuchstaben) handelt es sich um einen FHEM-Befehl. Der Befehl kann überall dort genutzt werden, wo FHEM-Befehle vorkommen dürfen. Im Gegensatz zu Perl-if (if in Kleinbuchstaben) bleibt man auf der FHEM-Ebene und muss nicht auf die Perl-Ebene, um FHEM-Befehle mit Hilfe der fhem-Funktion auszuführen."
Danke für die Infos. Da muss ich erst wieder lesen und lernen... und probieren!
LG Sille
Zitat von: CoolTux am 14 Februar 2016, 21:09:51
Vielleicht sollte kurz erwähnt werden das es ein FHEM IF gibt und natürlich ein Perl if
Im Grunde war das durch meinen Verweis auf die commandref klar.
Hi Marvin,
für mich war das - auch mit dem Hinweis auf die Commandref - nicht klar, das es ein FHEM IF und ein Perl if gibt.
An dieser Stelle entscheidend für das Verständnis war genau dieser Hinweis "das es ein FHEM IF gibt und natürlich ein Perl if". Jetzt habe ich verstanden, dass es eine FHEM-Umgebung und einen Perl-Bereich gibt und demnach auch verschiedene Syntax/Befehle. Anfänger halt. ;)
Besten Dank dafür!
LG Sille
Bitte die Grundlagen lernen. Ich empfehle das Anfänger PDF. Mit durch fragen wirst du nicht weit kommen.
Mea Culpa. Ich bin soo ungeduldig beim Realisieren meiner Ideen, da habe ich beim Querlesen offensichtlich geschlampt!
Wer hier mitliest, richtig ist:
define notify_HA_Alarm_Wohnzimmer notify WZ_Fenster:open {
if ( Value("HomeStatus") eq "1" ) {
fhem ("set FLU_Lampe on" )}
}
LG
Sille
Hallo Sille,
Bitte verwende Codetags, macht das lesen von Code einfacher.
Deweiteren ist es wohl so, man möge mic bitte korrigieren wenn ich irre, das Value absolete ist. Sprich es wird in kommenden Versionen wohl verschwinden.
Daher meine Empfehlung
define notify_HA_Alarm_Wohnzimmer notify WZ_Fenster:open {
if ( ReadingsVal("HomeStatus", "state", "") == 1 ) {
fhem "set FLU_Lampe on";
}
}
Man kann das auch kürzen
define notify_HA_Alarm_Wohnzimmer notify WZ_Fenster:open {
fhem "set FLU_Lampe on" if( ReadingsVal("HomeStatus", "state", "") == 1 );
}
Zahlen werden immer mathematisch verglichen.
Grüße