Ankündigung

Einklappen
Keine Ankündigung bisher.

Licht per Bewegungsmelder schalter aber nur wenn es Dunkel ist

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Licht per Bewegungsmelder schalter aber nur wenn es Dunkel ist

    Hallo,

    ich verzweifle langsam weil es nicht funktioniert.
    Mein Vorhaben ist:
    Wenn Bewegungsmelder auslöst UND es nach Sonnenuntergang ist, soll das Flurlicht geschalten werden.

    Dafür habe ich deklariert:

    Items:
    Code:
    Switch Astro_Sonnenuntergang "Astro Sonnenuntergang"
    Switch Astro_Sonnenaufgang "Astro Sonnenaufgang"
    Switch Licht_Flur_Eingang "Flurlicht Eingang" *Channel passt, schaltet ja als normaler Switch*
    Diese werden per Rule:
    Code:
    rule "Sonnenaufgang Trigger"
    when Channel 'astro:sun:local:rise#event' triggered START
    then Astro_Sonnenaufgang.sendCommand(ON)
    end
    rule "Sonnenuntergang Trigger"
    when Channel 'astro:sun:local:set#event' triggered START
    then Astro_Sonnenuntergang.sendCommand(ON)
    end
    rule "Sonnenaufgang (Astro_Sonnenaufgang) schaltet Sonnenuntergang (Astro_Sonnenuntergang) aus"
    when Item Astro_Sonnenaufgang changed to ON
    then Astro_Sonnenuntergang.sendCommand(OFF)
    end
    rule "Sonnenuntergang (Astro_Sonnenuntergang) schaltet Sonnenaufgang (Astro_Sonnenaufgang) aus"
    when Item Astro_Sonnenuntergang changed to ON
    then Astro_Sonnenaufgang.sendCommand(OFF)
    end
    geschalten, sodass immer nur eines aktiv ist, Sonnenuntergang (Dunkel) oder Sonnenaufgang (Hell)

    das eigentliche Schalten wollte ich somit so machen:
    Code:
    rule "Flurlicht (Licht_Flur_Eingang) geht an bei Bewegung (Bewegung_2)"
    when Item Bewegung_2 changed to ON AND Item Astro_Sonnenuntergang.state == ON
    then Licht_Flur_Eingang.sendCommand(ON)
    end
    Aber auch wenn ich zum testen die jeweilen Switche auf "ON" setze kommt im Log der Fehler:

    Configuration model 'Licht.rules' has errors, therefore ignoring it: [58,36]: missing 'then' at 'AND'
    [59,1]: no viable alternative at input 'then'

    warum?

    #2
    Bei when gibt es kein AND. Das liegt daran, dass mit when ein Event abgefragt, also eine Zustandsänderung. Wenn man nun eine AND-Verknüpfung verwenden würde, müssten beide Events zugleich passieren – was so gut wie unmöglich ist. In deinem Fall müsste also (wenn AND überhaupt möglich wäre), gleichzeitig eine Bewegung erkannt werden und in dem Moment gerade die Sonne untergehen. :-)

    Das Event ist die Bewegungserkennung, während die Sonne ja schon eine Weile untergegangen ist, also handelt es sich dabei um einen Zustand. Die Abfrage müsste also so aussehen:

    Code:
    rule "Flurlicht (Licht_Flur_Eingang) geht an bei Bewegung (Bewegung_2)"
    when Item Bewegung_2 changed to ON
    then
      if Item Astro_Sonnenuntergang.state == ON {
        Licht_Flur_Eingang.sendCommand(ON)
      }
    end
    Zuletzt geändert von broccoli; 07.01.2019, 22:17.

    Kommentar


      #3
      Von hier noch ein Tipp, wie man die Abfrage vereinfachen kann, ob die Sonne untergegangen ist oder nicht:

      Item
      Code:
      Number Sun_Elevation "Sun Elevation" { channel="astro:sun:local:position#elevation" }


      Rule
      Code:
      rule "Flurlicht" when Item Bewegung_2 changed to ON
      then
        if(Sun_Elevation.state < 0) {
          // Sonne ist untergegangen - es ist Nacht
        } else {
          // Sonne ist am Himmel - es ist Tag
        }
      end
      Zuletzt geändert von broccoli; 07.01.2019, 22:14. Grund: Formatierung

      Kommentar


        #4
        Zitat von broccoli Beitrag anzeigen
        Bei when gibt es kein AND. Das liegt daran, dass mit when ein Event abgefragt, also eine Zustandsänderung. Wenn man nun eine AND-Verknüpfung verwenden würde, müssten beide Events zugleich passieren – was so gut wie unmöglich ist. In deinem Fall müsste also (wenn AND überhaupt möglich wäre), gleichzeitig eine Bewegung erkannt werden und in dem Moment gerade die Sonne untergehen. :-)

        [/CODE]
        Danke für die Aufklärung mit dem AND! (ich habe or schon in einer Rule, daher dachte ich es geht.)
        Aber zur Erklärung: es wird ja bei Sonnenuntergang der Switch Astro_Sonnenuntergang auf ON geschaltet und "verharrt" ja auf ON, bis Astro_Sonnenaufgang ON geht und somit den Astro_Sonnenuntergang Switch auf OFF setzt. Somit wäre ja die ganze Nacht bis Sonnenaufgang die 2. When Bedingung erfüllt und es würde halt nur die Bewegung fehlen um die then-Schleife zu starten...
        Aber hätte, hätte Fahrradkette, das AND gibts halt nicht und die Lösung gucke ich mir jetzt so an wie von dir geschrieben!

        Vielen Dank dafür!

        Habe den Code jetzt eingebaut und funktioniert so, nur eine kleine Änderung, es fehlten ( + )

        Code:
        rule "Flurlicht (Licht_Flur_Eingang) geht an bei Bewegung (Bewegung_2)"
        when Item Bewegung_2 changed to ON
        then
        if [B]([/B]Astro_Sonnenuntergang.state == ON[B])[/B]
        {
        Licht_Flur_Eingang.sendCommand(ON)
        }
        end
        funktioniert jetzt wunderbar!
        Zuletzt geändert von desidia; 08.01.2019, 00:19. Grund: Korrektur Code

        Kommentar


          #5
          Nochmal zur Erklärung, warum es im when Teil einer Rule kein and gibt (nur, weil das Thema regelmäßig wieder hoch kommt):

          Eine Rule hat zwei Definitionsbereiche, der erste ist der when Teil, der zweite ist der then Teil.
          • Der when Teil zählt alle Trigger auf, die eine Rule auslösen. Es geht um Trigger, nicht um Bedingungen.
          • Der then Teil enthält den auszuführenden Code.
          Die Rule wird also getriggert, anschließend kann man im Code Teil prüfen, ob alle Bedingungen erfüllt sind.

          Ein Gutteil der Verwirrung dürfte daher kommen, dass THEN ein Schlüsselwort in BASIC ist, welches mit IF verbunden ist. Es gibt vermutlich nur sehr wenige Zeitgenossen, die sich mit Computern beschäftigen und nie mit BASIC in Berührung gekommen sind...

          Kommentar

          Lädt...
          X