Ankündigung

Einklappen
Keine Ankündigung bisher.

Logiken AND / OR

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

    Logiken AND / OR

    Hallo Zusammen,
    ich bin noch relativ neu hier mit dem OpenHAB-System und noch nicht so viel Ahnung mit den ganzen Verknüpfungen aber es wird.
    nun habe ich eine Frage:
    In den *.rules kann man doch and und or verwenden, wie schreibe ich aber diese befehlszeile hierfür ?
    momentan habe ich folgendes in Verwendung:

    when
    Item astro_sun_local_position_azimuth changed to < 29 and
    Item TVSamsung_Power changed from OFF to ON
    then
    Steckdosen_TV_Licht.sendCommand(ON)
    end

    aber es werden nicht beide werte betrachtet.
    das System nimmt immer das Astro Item und schaltet auch ein wenn wir die 29 bereis überschritten haben. (z.B. 29.66)

    vielen Dank für eure Hilfe
    Zuletzt geändert von MatthiasS; 06.05.2017, 08:50.

    #2
    Moin Matthias!

    Im "when"-Teil kannst Du nur "or", aber kein "and" verwenden.
    Der Trick besteht jetzt darin eine Bedingung im "when"-Teil zu definieren und die andere im "then"-Teil als "if".
    Also etwa so:

    Code:
    when
        Item TVSamsung_Power changed from OFF to ON
    then
        if ((astro_sun_local_position_azimuth.state as DecimalType).intValue <29) {
           Steckdosen_TV_Licht.sendCommand(ON)
        }
    end
    Wobei jetzt natürlich nichts passiert, wenn der Fernseher schon an ist, und dann der Azimuth auf unter 29 geht.
    Wenn Du das auch noch haben möchtest, dann kannst du beide Items im "when" mit "or" verknüpfen (dann löst das bei jeder Veränderung des Fernsehers _oder_ des Azimuth aus) und im "if" muss Du dann beides (azimuth<29 und SamsungPower==ON) mit "and" verknüpfen.

    Gruß
    Roland
    Zuletzt geändert von RoRo; 06.05.2017, 11:07.

    Kommentar


      #3
      da liegt ein Missverständnis vor

      Im when-Teil einer Rule gibt es ausschließlich eine or Verknüpfung. Begründung: Rules sind eventbasiert, das heißt, eine Rule wird durch Ereignisse getriggert. Im when-Teil der Rule stehen alle Trigger, die diese Rule auslösen können. Wenn Du nun eine and-Verknüpfung angeben könntest, müssten beide verknüpften Ergeignisse EXAKT zum selben Zeitpunkt eintreten (und wir reden hier vom Nanosekundenbereich!!!).

      Aber zum Glück möchtest Du ja ganz was anderes nämlich, dass eine Rule beim Eintreten eines Ereignisses ausgeführt wird, aber nur, wenn bestimmte Randbedingungen erfüllt sind. Im Beispiel möchtest Du, dass ein Licht eingeschaltet wird, wenn entweder
      Der Fernseher eingeschaltet wird und die Sonne vor 29° steht oder
      Die Sonne den Süden überschreitet (0°) und der Fernseher gerade eingeschaltet ist. Also:
      Code:
      rule "Fernsehlicht"
      when
          Item astro_sun_local_position_azimuth changed or
          Item TVSamsung_Power changed to ON
      then
          if(TVSamsung_Power.state == ON && (astro_sun_local_position_azimuth.state as DecimalType) < 29 && Steckdosen_TV_Licht.state != ON) {
              Steckdosen_TV_Licht.sendCommand(ON)
          }
      end
      Die Rule wird jetzt natürlich bei jedem Change des Azimut getriggert, das ist nicht so schön. Leider kann man nicht auf einen Grenzwert triggern. Geschickter wäre es also, ein Item zu definieren, welches mittags (Sonne im Süden) seinen Zustand ändert und dann auf dieses Item zu triggern. Eventuell willst Du auch auf die Elevation triggern, aber da ist es das selbe in grün Allerdings könntest Du dort z.B mit einem Sunset Event arbeiten. Die Abfrage des Sonnenstands innerhalb der Rule kann aber unverändert bleiben.

      Kommentar


        #4
        Hallo udo,
        Warum ist das nicht so toll mit dem triggern?

        Definiere ich dann das item so, dass es von dem astro ein On Signal bekommt wenn der eigestellte wert überschritten ist? Ist auch vorläufig eine übergangslösung bis ich mir später eine wetterstation zulege.

        Kommentar


          #5
          Naja, es sind halt jede Menge unnötige Trigger, die ja irgendwo auch Rechenzeit brauchen. Wo ich so drüber nachdenke, taucht aber das gleiche Problem wieder auf, wenn man ein Item setzen oder löschen will, das müsste ja auch regelmäßig geprüft werden. Sinnvolle Alternative wäre dann, z.B. auf sunset oder so zu triggern, das passiert nur einmal täglich. Auf der anderen Seite ist es jetzt auch nicht soooo wild, das Astro Binding wird ja auch nicht sekündlich aktualisiert, sondern eher alle paar Minuten.

          Kommentar


            #6
            Sunset klingt garnicht mal verkehrt. Ich benötige für die Steuerung eigentlich nur den wert das es eine bestimmte dunkelheit erreicht hat. Wie z.b die Astrouhren die dann einfach bei dem erreichten wert schalten und wieder abschalten wenn der wert wieder überschritten wird.
            Welchen Befehl der Astrouhr muss ich dann nutzen? Sunset ??

            Kommentar


              #7
              Je nachdem, wie dunkel es sein soll sunset ist Sonnenuntergang, civilDusk ist Abenddämmerung (Sonne steht 6° unter dem Horizont), nauticDusk ist dann die Abenddämmerung der Schifffahrt (-12°) und astroDusk ist die astronomische Dämmerung (-18°). Bei Sonnenuntergang ist es erfahrungsgemäß noch nicht allzu dunkel, entweder, man arbeitet dann mit einem Offset, oder man nimmt die Abenddämmerung als Schaltpunkt. Wenn Du OH2 in der Snapshot Version einsetzt, kannst Du jeden dieser Punkte direkt als Trigger verwenden, und zwar ohne ein Item dazu anzulegen (ist ausführlich in der Dokumentation erläutert) - es kommt ja jeweils nur ein Impuls, ein verknüpftes Item wäre also per Definition immer OFF, selbst wenn die Rule getriggert wird, ist das Item schon längst wieder OFF, wenn die Rule abgearbeitet wird. Diese Event Trigger sind ein nettes Feature. Man kann auch einen zeitlichen Offset definieren, mit Ober- und Untergrenze, also z.B. "7 Minuten vor Sonnenuntergang, nicht vor 17 Uhr, nicht nach 21 Uhr", das ist schon recht mächtig.
              Eine Einschränkung gibt es natürlich auch, da man hier mit den definierten Channeln arbeitet, kann man nicht beliebig viele Triggerpunkte definieren, sondern muss mit den vorhandenen auskommen Andererseits sind das immerhin vier für Sonnenaufgang, vier für Sonnenuntergang und je einer für Sonnenhöchststand und -tiefststand, jeder mit Offset und Grenzen.
              Falls das dann immer noch nicht reicht, kann man natürlich immer noch eine 2. Sonne nutzen also ein weiteres Astro Thing anlegen, welches bis auf die Offsetwerte identisch mit dem 1. Astro Thing ist.

              Meine Rollläden habe ich anfangs (2006) mit Wetterstation helligkeitsgesteuert gefahren, als der Außensensor nach einem Gewitter defekt war (~2010), bin ich auf Sonnenstandssteuerung umgestiegen, bisher habe ich keinen Bedarf, das wieder auf die Wetterstation umzubauen

              Kommentar


                #8
                Das ist mit dem Astro 2. Binding natürlich einfacher sich diese punkte zu nehmen und zu verwenden.
                Die Dokumentation ist sicherlich im Astro2 binding enthalten oder?

                Kommentar


                  #9
                  Zitat von TheDeathAngel Beitrag anzeigen
                  Das ist mit dem Astro 2. Binding natürlich einfacher sich diese punkte zu nehmen und zu verwenden.
                  Die Dokumentation ist sicherlich im Astro2 binding enthalten oder?
                  Im Binding nicht, aber im Wiki ;-)

                  Wichtig ist, dass Du den Snapshot nutzt, wenn Du mit Offset/Earliest usw arbeiten möchtest.
                  Ich habe dies just gestern hier in einem anderen Post als Sample gepostet, wie ich die mit verschiedenen Schaltpunkten (2x unterschiedliche Sunset Events) gelöst habe. Dazu musst Du dann eigene Things anlegen. Klappt prima und ist ohne weitere Item direkt in der Rule anwendbar.

                  Kommentar


                    #10
                    Was meinst du denn mit Snapshot??

                    Kommentar


                      #11
                      Was meinst du denn mit Snapshot??

                      Kommentar


                        #12
                        Zitat von TheDeathAngel Beitrag anzeigen
                        Was meinst du denn mit Snapshot??
                        Schau mal hier da findest Du einen Link und dort unter dem Punkt zur Installation gibt es einen Link zur Stable (2.0.0) und daneben einen Link zum letzten Snapshot (2.1.0), welcher die neuesten Funktionen enthält. Evtl. liest Du Dir mal den Threat aus dem Link durch. Ich habe - wie empfohlen - die Snapshot Version NEU installiert und die Konfiguration rüber kopiert. Läuft bei mir seit gestern Abend in Produktion, auch wenn OH2 noch an der einen oder anderen Stelle meckert.

                        Bei OH1 hatte ich auch meistens die letzten Snapshots und selten die offiziellen Releases und bin bisher gut damit gefahren.

                        Für die Funktionen "Offset" "earliest" usw. benötigst Du die Version 2.1.0, da diese erst dort implementiert wurden.

                        Kommentar

                        Lädt...
                        X