FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: djhans am 14 Februar 2014, 18:10:11

Titel: Verständnisfragen zur fhem und perl Syntax
Beitrag von: djhans am 14 Februar 2014, 18:10:11
Hallo,
ich bin jetzt seit gut einer Stunde dran den blöden Syntax-Fehler zu finden und kriege es nicht hin.
im DEF-Bereich:

Sonos_Schlafzimmer:SleepTimer.*off
{
if (Value("ReduceVolumeLater") ne "")
  {fhem ("delete ReduceVolumeLater")}
{fhem ("set Sonos_Schlafzimmer Stop")}
{fhem ("set Sonos_Schlafzimmer RemoveMember Sonos_Wohnzimmer")}


hat was mit dem perl Code zu tun. wenn ich dn perl-Code und die Abfrage auf delete ReduceVolumeLater weglasse, geht es. Wo zum Teufel steckt der Fehler!
Sinn soll sein, das ReduceVolumeLater zu löschen, wenn der SleepTimer abgebrochen wird, denn dann gibt es ein "Sonos_Schlafzimmer.SleepTimer.*off"- Notify
..ich habe schon alle Klammer und Semikolon.Varianten durch, es klappt einfach nicht!
djhans
Titel: Antw:Hilfe!
Beitrag von: Puschel74 am 14 Februar 2014, 18:12:30
Hallo,

wäre es vielleicht möglich einen etwas aussagekräftigeren Titel hinzubekommen?

Warum?
Hilfe! wird niemand als Suchbegriff verwenden.
siehe hier:
http://www.tty1.net/smart-questions_de.html#intro (http://www.tty1.net/smart-questions_de.html#intro)
oder auch hier:
http://forum.fhem.de/index.php/topic,16311.0.html (http://forum.fhem.de/index.php/topic,16311.0.html)

Danke

Grüße

Edith:
Zitates klappt einfach nicht!
ist auch eine ausführliche Beschreibung von dem WAS du willst und von dem WAS du versucht hast.
Aber ich versuch mal mein bestes  8) was ob der Frage schon etwas dürftig ausfallen dürfte  ;)
Titel: Antw:Hilfe! Syntax Problem mit perl
Beitrag von: Puschel74 am 14 Februar 2014, 18:17:33
Versuch mal
Sonos_Schlafzimmer:SleepTimer.*off {
  fhem ("delete ReduceVolumeLater") if (Value("ReduceVolumeLater") ne "");
  fhem ("set Sonos_Schlafzimmer Stop");
  fhem ("set Sonos_Schlafzimmer RemoveMember Sonos_Wohnzimmer");
}


Warum du im Code mit { und } um dich wirfst ist mir auch ein Rätsel - aber ich muss ja nicht alles wissen  :o
Titel: Antw:Hilfe! Syntax Problem mit perl
Beitrag von: djhans am 14 Februar 2014, 18:29:12
Hi Puschel,
danke, das geht!
Jetzt sagt mir doch mal bitte, wo der Unterschied ist. Wieso steht das if hinter dem "delete" Befehl. Wieso funzt das nicht mit der klassischen Art?
if <bedingung erfüllt>
lösche device

und das mit den Klammern habe ich mir von anderem Code abgeguckt.
z.B. funzt das hier ganz prima. Wenn ich Klammern lösche, klappt es wieder nicht... Ich habe die Perl-Syntax noch nicht wirklich gerafft!

*22:00:00
{fhem("set Sonos_Schlafzimmer Volume 2 1")}
{fhem("set Sonos_Bad Volume 7 1")}
{
if (($wday == 5) || 
     ($wday == 6) || 
     (fhem("get NRW tomorrow") !~ m/none/))
{
  {fhem ("define ReduceVolumeLater at +01:30:00 trigger ReduceVolume")}
  {fhem ("set Sonos_Schlafzimmer SleepTimer 02:30:00")}
}
else
{
  {fhem ("define ReduceVolumeLater at +01:00:00 trigger ReduceVolume")}
  {fhem ("set Sonos_Schlafzimmer SleepTimer 01:45:00")}
}
}


demnach kann man hier wahrscheinlich auch die Hälfte der Klammern weglassen :-( Und das mit den Leerzeichen ist auch nicht wirklich einfach.
Wenn man hinter das *22:00:00 das Leerzeichen vergisst, dann klappt es nicht. Ich glaube nun zu verstehen, warum die Profis die Klammer nun dahinter setzten. Also *22:00:00 { und nicht in die nächste Zeile...

djhans.
Titel: Antw:Hilfe! Syntax Problem mit perl
Beitrag von: Puschel74 am 14 Februar 2014, 18:55:29
Hallo,

ZitatJetzt sagt mir doch mal bitte, wo der Unterschied ist.
Würd ich gern - aber kann ich nicht.

Ich mach das immer schon so seitdem ich fhem verwende.

Grüße
Titel: Antw:Hilfe! Syntax Problem mit perl
Beitrag von: djhans am 14 Februar 2014, 19:02:26
Hi,
Hm! Das ist schade!
Djhans
Titel: Antw:Hilfe! Syntax Problem mit perl
Beitrag von: Puschel74 am 14 Februar 2014, 19:14:24
Hallo,

wobei der Titel immer noch etwas "dürftig" ist  ;D

Oder würdest du bei einer (DEINER) Frage als Suchbegriff Hilfe! Syntax Problem mit perl eingeben?
Ja ok, ein besserer Titel fällt mir auch nicht ein.

Wenn di Frage aber gelöst ist dann bitte den ersten Beitrag bearbeiten und ein (Gelöst) vor den Titel stellen.
Danke

Grüße
Titel: Antw:Verständnisfragen zur fhem und perl Syntax
Beitrag von: djhans am 14 Februar 2014, 19:54:48
...und was ist mit dem Titel?
---aber ich vestehe immer noch n icht den Unterschied und wann man wo welche Klammern und Semikolons setzt. die {-Klammer ist für perl Code, die ;; muss man im perl-Code verdoppeln, aber mehr habe ich noch nicht durchschaut....

Christian
Titel: Antw:Verständnisfragen zur fhem und perl Syntax
Beitrag von: Rince am 15 Februar 2014, 06:48:47
Dafür, dass du die ; doppelt schreiben willst, sind in dem Codebeispiel mit den vielen { } erstaunlich wenig ; drin, meinst du nicht? ;)
Titel: Antw:Verständnisfragen zur fhem und perl Syntax
Beitrag von: djhans am 15 Februar 2014, 09:18:03
Hi,
Ja,das stimmt! Aber ist erstaunlich, dass es auch ohne geht!
Ne, mal Spass bei Seite! Wie muss das denn richtig sein. konnte das Thema mal jemand aufgreifen und erklären, Irgendwie habe ich noch nicht den richtigen Link gefunden, wo das ausführlich beschrieben wird.... Das Perl-Buch habe ich mir zugelegt, aber der Def-Bereich ist halt fhem spezifisch. Das fhem-pdf geht sehr stark auf die Konfigurationen von Devices ein, aber die Syntax der Befehle wird nur am Rande beschrieben. Speziell vermisse ich die Regeln für die Satzzeichen in diesen Dokus.

Mal schreibt jemand fhem("set xxxx") und mal einfach nur fhem "set ....." mal kommt ein Komma, mal ein Semikolon , mal zwei Semikolons( auch in reinem fhem Code ) und mal steht es im Perl-Code vor der geschweiften Klammer und mal dahinter... das hat sicherlich irgendeinen Sinn, aber ich kann da keine eindeutige Regel ableiten......

DJ Hans

Titel: Antw:Verständnisfragen zur fhem und perl Syntax
Beitrag von: UliM am 15 Februar 2014, 10:12:08
Moin,
in perl gibt es zwei Syntax-Varianten für if:
1. if (Bedingung) {wenn wahr} [else {wenn falsch}];  #die eckigen Klammern nicht schreiben, sie sollen hier zeigen, dass dieser Teil optional ist
2. {wenn wahr} if (Bedingung);
Variante 2 geht nur für Einzeiler und hat keinen Else-Fall.

{} muss man für Codeblöcke setzen wie oben beschrieben um der Syntax des if-Befehls Genüge zu tun, also zu Beginn und Ende zB des {wenn wahr}. Innerhalb eines solchen codeblocks reichen ; um Befehle zu trennen.

=8-)
Titel: Antw:Verständnisfragen zur fhem und perl Syntax
Beitrag von: Damian am 15 Februar 2014, 10:13:43
Wenn ich sehe, wie du dich hier quälst und alle dir "gute" Tipps geben ohne dir den richtigen Code zu verraten, will ich dich von deiner Qual befreien (die Eingaben erfolgen im DEF-Editor):

entweder:
*22:00:00
set Sonos_Schlafzimmer Volume 2 1;
set Sonos_Bad Volume 7 1;
{
if (($wday == 5) || 
     ($wday == 6) || 
     (fhem("get NRW tomorrow") !~ m/none/))
{
   fhem ("define ReduceVolumeLater at +01:30:00 trigger ReduceVolume;;set Sonos_Schlafzimmer SleepTimer 02:30:00")
}
else
{
   fhem ("define ReduceVolumeLater at +01:00:00 trigger ReduceVolume;;set Sonos_Schlafzimmer SleepTimer 01:45:00")
}
}


oder:


*22:00:00
set Sonos_Schlafzimmer Volume 2 1;
set Sonos_Bad Volume 7 1;
IF (($wday == 5) || ($wday == 6) ||  (fhem("get NRW tomorrow") !~ m/none/))
  (define ReduceVolumeLater at +01:30:00 trigger ReduceVolume,set Sonos_Schlafzimmer SleepTimer 02:30:00)
ELSE
  (define ReduceVolumeLater at +01:00:00 trigger ReduceVolume,set Sonos_Schlafzimmer SleepTimer 01:45:00)


Das Thema mit IF hatten wir ja bereits. Komma als Trennzeichen darfst du nur in Verbindung mit IF benutzen.

Suche dir die für dich einfachere Lösung heraus.

Gruß

Damian

Titel: Antw:Verständnisfragen zur fhem und perl Syntax
Beitrag von: djhans am 15 Februar 2014, 10:30:12
Hallo an alle,
herlzichen Dank für die Ausführungen. Ich werde das jetzt mal studieren und dann alle Varianten austesten....

@ Damian
ja das hatten wir schon, aber ich wollte es halt auch mit der klassischen Lösung ausprobieren. Wenn man hier im Forum Code-Blöcke liest, dann wird i.d.R. der reine Perl-Code mit "if" verwendet.

Einfacher und verständlicher finde ich die Lösung mit "IF" und das ist mir persönlich auch sympatischer, aber wie gesagt, ich will erst einmal grundsätzlich  verstehen,  was da abgeht, bevor ich hier irgendetwas im haus automatisiere und dann plötzlich nix mehr geht. Deshalb spiele ich jetzt seit einigen Wochen mit fhem und Sonos rum, da kann man nix kaputt machen :-)

Danke und Gruß,
Christian
Titel: Antw:Verständnisfragen zur fhem und perl Syntax
Beitrag von: Rince am 15 Februar 2014, 13:56:56
Danke Damian und Uli,
jetzt weiß ich auch wie es richtig geht :)