Ankündigung

Einklappen
Keine Ankündigung bisher.

Trådfri lampen abfragen und Status feststellen

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

    Trådfri lampen abfragen und Status feststellen

    Hallo Zusammen,

    ich habe einige Trådfri Lampen und das Gateway mit OH2 verbrunden.
    Soweit funktioniert alles gut.
    Allerdings, wenn ich die Lampen mit dem normalen Schalter ausschalte, bekommt OH2 das nicht mit und zeigt
    noch den Dimmwert an.

    hat jemand eine Idee, wie ich abfragen könnte, ob die Lampe erreichbar ist und wenn dies nicht der Fall ist,
    den Status des Icon entsprechend auf aus setzt?

    Danke
    Gruß Jens

    #2
    Du musst eine Rule basteln, die triggert, wenn das entsprechende Thing offline geht. Ich bin mir aber nicht sicher, ob das Trådfri Binding das schon beherrscht. Die Rule muss dann per myTadfriItem.postUpdate(0) den Lampenstatus auf OFF setzen.

    Die Dokumentation ist noch nicht aktuell, aber der entsprechende Commit wurde schon gemerged, es sollte also mit dem aktuellen Build funktionieren. Der Pull-Request zur Dokumentation: https://github.com/openhab/openhab-docs/pull/463

    Kommentar


      #3
      ok, danke für den Tipp, so ganz steige ich durch die Doku noch nicht durch, aber muss man wahrscheinlich erst mal probieren.

      Allerdings, befürchte ich, dass es nicht so ganz funktionieren wird, da das Thing ja das Gateway ist, welches online bleibt.
      gibt es das gleiche auch auf Item ebene, als Beispiel, wenn das item nicht ansprechbar/offline ist, dann myTadfriItem.postUpdate(0)

      Ich meine das Gateway merkt wenn eine Lampe nicht angemeldet ist, aber wie man das trigger?!?!?
      Zumal es sicherlich ja nicht empfehlenswert wäre, beispielsweise alle 10sec abzufragen sind alle lampen da?
      wäre ziemlich viel traffic...

      Danke

      Gruß jens

      Kommentar


        #4
        Ah. Ne, dann geht das nicht. Ich ging davon aus, dass das Gateway als Bridge angelegt ist. Ich hab kein Trådfri...
        Bekommst Du den Status in openHAB, wenn Du die Lampe von extern steuerst (also nur Helligkeit, nicht Aus)? Oder kannst Du das Gateway nach dem Status fragen?

        Kommentar


          #5
          also wenn ich mit der Fernbedienung von Trådfri die Helligkeit steuere, bekommt openhab ebenfalls eine statusänderung und passt den
          wert und Symbol entsprechend an.
          Direkt Status frage ist ne gute Frage, wüste nicht genau wie ich das abfragen könnte?

          Kommentar


            #6
            Man könnte versuchen, eine Rule zu entwerfen, die zyklisch die Lampen um 1% ab- und wieder aufdimmt. Wenn dann vom Bus keine Bestätigung kommt, ist die Lampe nicht erreichbar und per Definition aus. Allerdings dürfte es schon etwas aufwändiger sein, das sauber zu lösen, und ein regelmäßiges (wenn auch nur leichtes) Flackern ist ja auch nicht das Gelbe vom Ei.

            Kommentar


              #7
              ja, da hast Du recht.

              es gibt ja leider keine officielle API für die tradfri, aber dresdenElektronik hat ja auch eine universal gateway software,
              da müsste ich mal schauen, ob es da möglich ist, nur den aktuellen Status abzufragen, evtl. würde das auch beim tradfri gateway
              funktionieren.
              oder sicherlich noch aufwendiger, man schreibt den gleichen wert noch mal und keine Antwort bedeutet aus?
              aber wie oft will man das triggern.
              Ich denke mal das wird ganz schön getüftel.

              Ergänzung:
              Ich versuche auch mal in der englischen openHab community bezogen auf dem Binding nachzufragen,
              ob es möglich ist, quasi nur den Status abzufragen oder evtl. ja auch zu implementieren, dass bei aus
              mit Schalter auch der Status im OH auf aus geht?
              Könnte natürlich zur folge haben, dass beim einschalten die Lampe dann aus bleibt, da sie gleich über OH
              0% mitgeteilt bekomme ....
              Zuletzt geändert von AingTii; 21.09.2017, 05:44. Grund: ergänzt

              Kommentar


                #8
                Ha! den gleichen Wert schreiben wäre ja kein Problem, die Frage ist halt, ob es dann eine Rückmeldung gibt. Das einfachste wäre eine Rule wie diese:
                Code:
                rule
                when
                    Time cron "11 * * * * ?"
                then
                    alleTradfri.members.filter[l|(l.state as DecimalType).intValue > 0].forEach(l|
                        l.sendCommand(l.state.toString)
                        Thread::sleep(100)
                        if(l.lastUpdate < now.minusMillis(100))
                            l.postUpdate(0)
                    )
                end
                Voraussetzung wäre eine Gruppe alleTradfri in der alle Trådfri Lampen sind. Die Gruppenmember müssen persistiert werdfen, damit es den Zeitstempel gibt. Die Items müssen mit autoupdate="false" verbunden sein.
                Und natürlich ist der Code nur so dahin geschrieben, vermutlich fehlt noch die eine oderandere Finesse, aber grundsätzlich sollte das funktionieren, falls es dann ein Update zum sendCommand gibt.

                Kommentar


                  #9
                  Okay,

                  da bin ich in einigen Dingen noch nicht so fit.

                  Mit Gruppe meinst Du einfach wie eine Gruppe Obergeschoss usw. eine Gruppe "alleTradfri" erstellen, in der die Tradfri lampen stecken, zumindest
                  die die mit einem Schalter geschaltet werden....
                  Was meinst Du mit dem persistiert werden und autoupdate="false" wie und wo mache ich das?

                  Danke

                  Gruß Jens

                  Kommentar


                    #10
                    Also, im .items-File:
                    Code:
                    Group:Dimmer alleTradfri
                    Dimmer myTradfri01 "Leuchte 1 [%s]" (alleTradfri) {...}
                    Dimmer myTradfri02 "Leuchte 2 [%s]" (alleTradfri) {...}
                    Dimmer myTradfri03 "Leuchte 3 [%s]" (alleTradfri) {...}
                    Einen Persistence Service aktivieren, mapdb reicht, oder rrd4j:

                    mapdb.persist:
                    Code:
                    Strategies {
                            everyHour : "0 0 * * * ?"
                            default = everyChange
                    }
                    Items {
                            alleTradfri* : strategy = everyUpdate
                    }
                    Damit werden alle Member der Gruppe alleTradfri persistiert (die Gruppe selbst jedoch nicht!)

                    Wie schon erwähnt wird der Code oben vermutlich nicht so ohne Weiteres funktionieren.

                    Eine Sache ist die Laufzeit, wenn Du echt viele Lampen hast, da ja pro Schleifendurchgang mindestens 100ms drauf gehen - das ist dann auch die Zeit, die openHAB hat, um die Antwort in der Datenbank abzuspeichern. Eventuell reichen die 100ms nicht aus, dann muss der Wert noch erhöht werden. Wenn dir Rule insgesamt aber nahe an die 60 Sekunden ran kommt, könnte es sein, dass die Rule mehrfach läuft (ok, ich gehe nicht davon aus, dass Du hunderte Tradfri im Einsatz hast - das ist eher theoretischer Natur.)

                    Ein weiteres Problem wird sein, dass Thread::sleep() innerhalb der Schleife besonderen Regeln folgen muss. Es muss eine Exception definiert sein, das hab ich aber grad nicht im Kopf.

                    Wenn openHAB startet, haben die Items tendenziell keinen gültigen Status, dann wird die Rule einen Fehler verursachen (bla-bla-bla on NULL, wobei NULL der nicht gültige Status ist.) Das müsste man eigentlich noch abfangen, eventuell reicht aber ein weiterer Filter:
                    Code:
                    alleTradfri.members[COLOR=#FF0000].filter[l|l.state instanceof DecimalType][/COLOR].filter[l|(l.state as DecimalType).intValue > 0].forEach...
                    Besser wäre es, wenn sich das Binding selbst um das Problem kümmert. Vielleicht magst Du im englischen Forum mal nachfragen, ob der Programmierer des Bindings (Kai Kreuzer) dazu eine Idee hat?

                    Kommentar

                    Lädt...
                    X