Finde den Fehler

Begonnen von NehCoy, 12 Dezember 2017, 11:20:07

Vorheriges Thema - Nächstes Thema

CoolTux

Und wozu die doppelten Semikolons? Eines reicht völlig. Zeig doch mal dein ganzes Notify jetzt.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

NehCoy

Sieht genau so aus:
KNX_0403019 {
  my $wohnzimmer  = Value("dy.Weihnachtsbeleuchtung.Automatik.Wohnzimmer ");;
  my $kueche = Value("dy.Weihnachtsbeleuchtung.Automatik.Kueche");;
  my $garten = Value("dy.Weihnachtsbeleuchtung.Automatik.Garten");;
  my $vorgarten = Value("dy.Weihnachtsbeleuchtung.Automatik.Vorgarten");;
  if($EVENT eq "true" && $hour gt 16)
  {
    if($wohnzimmer  eq "on" )
    {
      fhem "set KNX_0502000 on";;
  fhem "define Weihnachtsbeleuchtung.Automatik.Wohnzimmer .Off_Active at 22:00:00 set KNX_0502000 off";;
    }
    if($kueche eq "on" )
    {
      fhem "set KNX_0501004 on";;
  fhem "define Weihnachtsbeleuchtung.Automatik.Kueche.Off_Active at 22:00:00 set KNX_0501004 off";;
    }
    if($garten eq "on" )
    {
      fhem "set KNX_0502004 on";;
  fhem "define Weihnachtsbeleuchtung.Automatik.Garten.Off_Active at 23:00:00 set KNX_0502004 off";;
    }
    if($vorgarten eq "on" )
    {
      fhem "set KNX_0503000 on";;
  fhem "define Weihnachtsbeleuchtung.Automatik.Vorgarten.Off_Active at 23:00:00 set KNX_0503000 off";;
    }
  }
}


Die Doppelsemikolon kommen daher:
https://wiki.fhem.de/wiki/Trick_der_Woche#Struktur_von_.22else_if.22_Verzweigungen

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Frank_Huber

am besten NICHT in der cfg rumpinseln... dann können solche Fehler nicht passieren.

CoolTux

Empfehlung ist komplett über das FHEMWEB Frontend zu arbeiten.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

NehCoy

Zitat von: CoolTux am 12 Dezember 2017, 21:04:01
Geht nun also sagst?
Das zeigt sich morgen Abend!
Anstelle KNX_0403019 einen Dummy zu verwenden hat funktioniert. Bei der Verwendung von KNX_0403019 kam die Ausführung über die erfolgreiche Prüfung von if($EVENT eq "true" && $hour gt 16) hinaus.

Zitat von: Frank_Huber am 12 Dezember 2017, 22:03:00
am besten NICHT in der cfg rumpinseln... dann können solche Fehler nicht passieren.
Habe das notify mit dem Webfront-End editiert.

Frank_Huber

Zitat von: NehCoy am 12 Dezember 2017, 22:09:42
Habe das notify mit dem Webfront-End editiert.
Dann hätte das mit der Leerstelle aber nicht passieren dürfen. das WebIF meckert bei sowas.

NehCoy

#22
Zitat von: Frank_Huber am 12 Dezember 2017, 22:13:33
... das WebIF meckert bei sowas.

Das Web Front End hat auf jeden Fall bei falsch gesetzten Klammern und/oder Anführungszeichen gemeckert.

Beim testen hatte ich auch andere merkwürdiges Verhalten, was ich in diesem Post angesprochen hatte, bevor ich diesen eröffnet habe.
Zitat    if($test eq "on" )
    {
      fhem ("set dy.test on;; define Weihnachtsbeleuchtung.Automatik.Off_Active at +00:00:20 set dy.test off")
    }


Das Dummy-Gerät dy.test hat den Wert/Status
on; define Weihnachtsbeleuchtung.Automatik.Off_Active at +00:00:20 set dy.test off
Und nicht "on"!

Das "at" wird jedoch richtig angelegt, so dass nach 20 Sekunden Dummy-Gerät dy.test auf "off" gesetzt wird.

Für mich noch alles sehr komisch ...

Auch die Unterschiede (mit Klammern, oder ohne; ein Semikolon, oder zwei; Zwei FHEM-Befehle in einem Aufruf, oder zwei,...)

Grüße
NehCoy

nils_

https://fhem.de/commandref_DE.html#perl


sorry, aber aus deinen fehlerbeschreibungen werd ich echt nicht schlau.

das list vom notify biste auch noch schuldig geblieben (CoolTux scheint zumindest damit richtig geraten zu haben :) )
viele Wege in FHEM es gibt!

Prof. Dr. Peter Henning

Möglicherweise bin ich ja ungeduldiger, als Andere - aber das hier setzt doch dem Fass die Krone auf.

Der zweimal von Experten gegebenen Tipp, das doch bitte mit einem ordentlichen Perl-Code in einer Programmdatei statt mit einer Mischung aus FHEM-Befehlen und Perl-Code in der Konfiguration zu machen, wird einfach ignoriert.
Stattdessen schreibt er dann weiter von "merkwürdigem Verhalten", und wie "komisch" das doch alles sei - aber liefert keine klaren Informationen.

Meine Güte ...

pah

NehCoy

#25
Moin zusammen!

Erstmal danke, dass ihr euch dennoch bemüht mir zu helfen!

Zu euren Anmerkungen:
Also wenn man als Noob daher kommt und sich in der FHEM-Wiki umschaut, findet man zunächst erstmal Beispiele die rein auf notfiy und at fundieren.
An diesen habe ich mich eben orientiert. Weniger hilfreich ist hierbei, dass auch hier die Syntax von Bsp. zu Bsp. divergiert. FHEM-Befehl in Klammer, mal nicht.
Trennung mit Doppel-Semikolon, mal mit einem ...
Auch wenn Perl, wie ihr es darstellt, der bessere Weg ist, muss
a) at und notify prinzipiell auch funktionieren, oder nicht?
b) ich erst mal Perl programmieren können; ich wüsste gerade nicht mal ansatzweise, wie ich den Code des notify in Perl umsetzen müsste!

Zitat von: nils_ am 13 Dezember 2017, 08:10:57
https://fhem.de/commandref_DE.html#perl
Selbst in dem Kapitel zu Perl in in der Referenz steht "Wenn Sie einige Aufgaben automatisieren wollen, dann sollten Sie die Befehle at oder notify nutzen.".

Zitat von: nils_ am 13 Dezember 2017, 08:10:57
sorry, aber aus deinen fehlerbeschreibungen werd ich echt nicht schlau.
Was ist denn unklar?

Zitat von: nils_ am 13 Dezember 2017, 08:10:57
das list vom notify biste auch noch schuldig geblieben (CoolTux scheint zumindest damit richtig geraten zu haben :) )
Habe doch die Definition des "notify" erneut gepostet.

Zitat von: nils_ am 13 Dezember 2017, 08:10:57
(CoolTux scheint zumindest damit richtig geraten zu haben :) )
Was denn?

Zitat von: Prof. Dr. Peter Henning am 13 Dezember 2017, 08:30:23
Der zweimal von Experten gegebenen Tipp, das doch bitte mit einem ordentlichen Perl-Code in einer Programmdatei statt mit einer Mischung aus FHEM-Befehlen und Perl-Code in der Konfiguration zu machen, wird einfach ignoriert.
siehe a) und insbesondere b)

Zitat von: Prof. Dr. Peter Henning am 13 Dezember 2017, 08:30:23
Stattdessen schreibt er dann weiter von "merkwürdigem Verhalten", und wie "komisch" das doch alles sei - aber liefert keine klaren Informationen.
Ist es auch meines Erachtens noch immer. Wenn ein klare Syntax definiert ist, dann sollte der Code auch mit notify und at funktionieren.
Die Vielzahl von Optionen machen es da aber einem nicht leicht:

Zitat von: nils_ am 12 Dezember 2017, 16:00:05
(auf den threadtitel will ich mal gar nicht eingehen....)
Ich ging eben von einer klaren Syntax und daher davon aus, dass jemand der schon ein paar "notify" und "at" verwendet/programmiert/angelegt hat einen Fehler sieht und sagt, du musst es nach Schema XY machen.

Danke & Grüße
NehCoy


Prof. Dr. Peter Henning


herrmannj

Zitat von: NehCoy am 13 Dezember 2017, 09:44:20
Habe doch die Definition des "notify" erneut gepostet.
Deine Hausaufgaben musst schon Du machen.

Wonach hat CoolTux gefragt (genau lesen!) ?

CoolTux

Eine Möglichkeit

KNX_0403019.true {

  my $wohnzimmer  = Value("dy.Weihnachtsbeleuchtung.Automatik.Wohnzimmer ");;
  my $kueche = Value("dy.Weihnachtsbeleuchtung.Automatik.Kueche");;
  my $garten = Value("dy.Weihnachtsbeleuchtung.Automatik.Garten");;
  my $vorgarten = Value("dy.Weihnachtsbeleuchtung.Automatik.Vorgarten");;
  if($hour > 16)
  {

    if($wohnzimmer  eq "on" )
    {
          fhem "set KNX_0502000 on";
  fhem "define Weihnachtsbeleuchtung.Automatik.Wohnzimmer .Off_Active at 22:00:00 set KNX_0502000 off";
    }

    if($kueche eq "on" )
    {
          fhem "set KNX_0501004 on";
  fhem "define Weihnachtsbeleuchtung.Automatik.Kueche.Off_Active at 22:00:00 set KNX_0501004 off";
    }

    if($garten eq "on" )
    {
          fhem "set KNX_0502004 on";
  fhem "define Weihnachtsbeleuchtung.Automatik.Garten.Off_Active at 23:00:00 set KNX_0502004 off";
    }

    if($vorgarten eq "on" )
    {
          fhem "set KNX_0503000 on";
  fhem "define Weihnachtsbeleuchtung.Automatik.Vorgarten.Off_Active at 23:00:00 set KNX_0503000 off";
    }
  }
}


Geht auch

KNX_0403019.true {

  my $wohnzimmer  = Value("dy.Weihnachtsbeleuchtung.Automatik.Wohnzimmer ");;
  my $kueche = Value("dy.Weihnachtsbeleuchtung.Automatik.Kueche");;
  my $garten = Value("dy.Weihnachtsbeleuchtung.Automatik.Garten");;
  my $vorgarten = Value("dy.Weihnachtsbeleuchtung.Automatik.Vorgarten");;
  if($hour > 16)
  {

    if($wohnzimmer  eq "on" )
    {
          fhem("set KNX_0502000 on");
  fhem("define Weihnachtsbeleuchtung.Automatik.Wohnzimmer .Off_Active at 22:00:00 set KNX_0502000 off");
    }

    if($kueche eq "on" )
    {
          fhem("set KNX_0501004 on");
  fhem("define Weihnachtsbeleuchtung.Automatik.Kueche.Off_Active at 22:00:00 set KNX_0501004 off");
    }

    if($garten eq "on" )
    {
          fhem("set KNX_0502004 on");
  fhem("define Weihnachtsbeleuchtung.Automatik.Garten.Off_Active at 23:00:00 set KNX_0502004 off");
    }

    if($vorgarten eq "on" )
    {
          fhem("set KNX_0503000 on");
  fhem("define Weihnachtsbeleuchtung.Automatik.Vorgarten.Off_Active at 23:00:00 set KNX_0503000 off");
    }
  }
}




Und noch tausend andere Möglichkeiten. In Perl kann man viel machen. Das doppelte Semikolon hingegen brauchst Du so gut wie gar nicht wenn Du über das Webfrontend arbeitest. Warum/Wann man ein doppeltes Semikolon oder @ braucht findest Du im verlinkten Text von pah.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net