FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Manu1982 am 22 November 2017, 11:15:43

Titel: Notify mit If bedinung
Beitrag von: Manu1982 am 22 November 2017, 11:15:43
Moin ich wollte eine Notify schreiben die abfragt welchen Status der Receiver hat und dann unterschiedliche befehle abgibt.

mein versuch

Buero_BOB_80 if (Buero_Receiver "on" ) {fhem('set Buero_Receiver input netradio;sleep 5;sleep 5;set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock');}
else {if (Buero_Receiver "off" ) {fhem('set set Buero_Verstaerker on;sleep 15;set Buero_Receiver on;sleep 5;set Buero_Receiver volumeStraight -59;set Buero_Receiver input netradio;sleep 5;sleep 5;set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock');}}}

passiert aber nichts
Titel: Antw:Notify mit If bedinung
Beitrag von: Thorsten Pferdekaemper am 22 November 2017, 11:28:59
Hi,
es gibt im Prinzip zwei verschiedene IFs. Einmal das Perl if und dann das FHEM IF. Groß-/Kleinschreibung ist dabei wichtig!
Schau Dir am Besten mal das IF in der Commandref an. Außerdem fehlen Vergleichsoperatoren und eckige Klammern um die Readings/Devices. Das was Du versuchst, müsste ungefähr so gehen:

IF ([Buero_Receiver] eq "on" )
        (set Buero_Receiver input netradio, sleep 10, set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock)
  ELSE (IF ([Buero_Receiver] eq "off" )
         (set set Buero_Verstaerker on, sleep 15, set Buero_Receiver on, sleep 5, set Buero_Receiver volumeStraight -59, set Buero_Receiver input netradio, sleep 10, set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock))


Gruß,
   Thorsten
Titel: Antw:Notify mit If bedinung
Beitrag von: Beta-User am 22 November 2017, 11:31:05
(Überschneidet sich teilweise mit Thorstens Hinweisen, aber da fast fertig):

Moin,

bitte benutze zukünftig code-tags (# über den smilies).

Die perl-specials in der commandref und das Einsteiger-pdf (ca. ab S. 37) hast du durchgearbeitet?

Vielleicht postest du mal die ganze Definition (raw - unten beim Device). M.E. fehlt da noch der Trigger - notify's erstellt man am besten im Event-Monitor, siehe wiki dazu.

Und dann ist mind. noch die Klammersetzung nicht ok, versuch's mal (richtigen Trigger vorausgesetzt) in diese Richtung (ggf. muß noch escaped werden):
Buero_BOB_80
{
if (Buero_Receiver "on" )
{fhem('set Buero_Receiver input netradio;sleep 5;sleep 5;set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock');}

elsif (Buero_Receiver "off" )
{fhem('set set Buero_Verstaerker on;sleep 15;set Buero_Receiver on;sleep 5;
set Buero_Receiver volumeStraight -59;set Buero_Receiver input netradio;sleep 5;sleep 5;set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock');}}
Titel: Antw:Notify mit If bedinung
Beitrag von: Manu1982 am 22 November 2017, 12:22:03
bei
{
if (Buero_Receiver "on" )
{fhem('set Buero_Receiver input netradio;sleep 5;sleep 5;set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock');}

elsif (Buero_Receiver "off" )
{fhem('set set Buero_Verstaerker on;sleep 15;set Buero_Receiver on;sleep 5;
set Buero_Receiver volumeStraight -59;set Buero_Receiver input netradio;sleep 5;sleep 5;set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock');}}


kommt

syntax error at (eval 39938) line 2, near "Buero_Receiver "on""
syntax error at (eval 39938) line 5, near "}

elsif"
syntax error at (eval 39938) line 7, near "}}"
  (Might be a runaway multi-line '' string starting on line 6)

als Meldung
Titel: Antw:Notify mit If bedinung
Beitrag von: Beta-User am 22 November 2017, 12:27:21
OK, da fehlen tatsächlich diverse "eq". Bitte passend einsetzen...

Zitat von: Beta-User am 22 November 2017, 11:31:05
Vielleicht postest du mal die ganze Definition (raw - unten beim Device). M.E. fehlt da noch der Trigger
Das trigger-Thema ist geklärt?
Titel: Antw:Notify mit If bedinung
Beitrag von: Manu1982 am 22 November 2017, 12:42:19
defmod Buero_BOB_80_Dummy_on notify Buero_BOB_80_Dummy:on if (Buero_Receiver "on" ) {fhem('set Buero_Receiver input netradio;;sleep 5;;sleep 5;;set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock');;}\
else {if (Buero_Receiver "absent" ) {fhem('set set Buero_Verstaerker on;;sleep 15;;set Buero_Receiver on;;sleep 5;;set Buero_Receiver volumeStraight -59;;set Buero_Receiver input netradio;;sleep 5;;sleep 5;;set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock');;}}}
attr Buero_BOB_80_Dummy_on alias BOB 80
attr Buero_BOB_80_Dummy_on cmdIcon active:icoPfeil
attr Buero_BOB_80_Dummy_on group Büro
attr Buero_BOB_80_Dummy_on icon it_radio
attr Buero_BOB_80_Dummy_on room Büro
attr Buero_BOB_80_Dummy_on webCmd active

setstate Buero_BOB_80_Dummy_on active
setstate Buero_BOB_80_Dummy_on 2017-11-22 12:40:36 state active

Titel: Antw:Notify mit If bedinung
Beitrag von: Beta-User am 22 November 2017, 12:47:48
Was ist jetzt mit den "eq"?

etwa so (ungetestet):
defmod Buero_BOB_80_Dummy_on notify Buero_BOB_80_Dummy:on {
if (Buero_Receiver eq "on" )
    {fhem('set Buero_Receiver input netradio;;sleep 5;;sleep 5;;set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock');;}
elsif (Buero_Receiver eq "absent" )
    {fhem('set set Buero_Verstaerker on;;sleep 15;;set Buero_Receiver on;;sleep 5;;set Buero_Receiver volumeStraight -59;;
    set Buero_Receiver input netradio;;sleep 5;;sleep 5;;set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock');;}
}
Titel: Antw:Notify mit If bedinung
Beitrag von: t1me2die am 22 November 2017, 12:53:14
Also hier stimmen noch eine Klammern und Befehle nicht.
Rück am besten die Klammern mal ein wenig ein, damit man einen kleinen Überblick bekommt.


defmod Buero_BOB_80_Dummy_on notify Buero_BOB_80_Dummy:state:on
{
if (ReadingsVal("Buero_Receiver","state","") eq "on" )
{
   fhem("set Buero_Receiver input netradio ;; sleep 10 ;; set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock" )
}
else
{
  if (ReadingsVal("Buero_Receiver","state","") eq "absent" )
  {
    fhem("set Buero_Verstaerker on ;; sleep 15 ;; set Buero_Receiver on ;; sleep 5 ;; set Buero_Receiver volumeStraight -59 ;; set Buero_Receiver input netradio ;; sleep 10 ;; set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock")
  }
}
}


Beim zweiten ReadingsVal, denke ich aber, dass dort kaum "absent" drin steht. Dazu kenne ich die Readings von deinem "Buero_Receiver" nicht.
Am besten gibst du uns auch einmal ein:
list Buero_Receiver

Gruß
Mathze
Titel: Antw:Notify mit If bedinung
Beitrag von: Beta-User am 22 November 2017, 12:56:44
btw.: da fehlen noch diverse Klammern bzw. ReadingsVal(), wie Thorsten P. ja bereits angemerkt hatte...

Etwa in der Art:

[Buero_Receiver:state]

Bitte mal das Einsteiger-pdf zu Rate ziehen, da gibt es entsprechende Beispiele.
Titel: Antw:Notify mit If bedinung
Beitrag von: CoolTux am 22 November 2017, 13:25:40
Zitat von: t1me2die am 22 November 2017, 12:53:14
Also hier stimmen noch eine Klammern und Befehle nicht.
Rück am besten die Klammern mal ein wenig ein, damit man einen kleinen Überblick bekommt.


defmod Buero_BOB_80_Dummy_on notify Buero_BOB_80_Dummy:state:on
{
if (ReadingsVal("Buero_Receiver","state","") eq "on" )
{
   fhem("set Buero_Receiver input netradio ;; sleep 10 ;; set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock" )
}
else
{
  if (ReadingsVal("Buero_Receiver","state","") eq "absent" )
  {
    fhem("set Buero_Verstaerker on ;; sleep 15 ;; set Buero_Receiver on ;; sleep 5 ;; set Buero_Receiver volumeStraight -59 ;; set Buero_Receiver input netradio ;; sleep 10 ;; set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock")
  }
}
}


Beim zweiten ReadingsVal, denke ich aber, dass dort kaum "absent" drin steht. Dazu kenne ich die Readings von deinem "Buero_Receiver" nicht.
Am besten gibst du uns auch einmal ein:
list Buero_Receiver

Gruß
Mathze

Bisschen viel des Guten wie ich finde.


defmod Buero_BOB_80_Dummy_on notify Buero_BOB_80_Dummy:state:on {

         if(ReadingsVal("Buero_Receiver","state","") eq "on" ) {
                     fhem("set Buero_Receiver input netradio ; sleep 10 ; set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock" )

         } elsif(ReadingsVal("Buero_Receiver","state","") eq "absent" ) {
                     fhem("set Buero_Verstaerker on ;; sleep 15 ;; set Buero_Receiver on ; sleep 5 ; set Buero_Receiver volumeStraight -59 ; set Buero_Receiver input netradio ; sleep 10 ; set Buero_Receiver navigateListMenu Lesezeichen/Manu/80er Rock")
        }
}


Code ist für die DEF geschrieben nicht für fhem.cfg