Ankündigung

Einklappen
Keine Ankündigung bisher.

Statusobjekte

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

    Statusobjekte

    Hallo zusammen,

    ich habe in Openhab aus dem KNX und im KNX aus Openhab Items bzw. GAs, die nicht regelmäßig Ihren Status zyklisch setzen oder regelmäßig geschaltet werden, sodass Openhab von diesen Objekten keinen Status mitbekommt und der Bus ebenfalls nicht.

    Beispielsweise ein Schalter für eine Szene. Dieser bekommt erst einen Status wenn er einmal An und Aus geschaltet wird.

    Es ist dann immer etwas unschön, wenn in der Visu dann manche Items keinen Status haben, obwohl einer existiert.

    Wie habt ihr das gelöst?

    Viele Grüße
    Sascha

    #2
    Hallo Sascha,

    wan verlieren diese Objekte ihren Status? Nach einem Reboot?
    dann könntest Du diese persistieren und nach einem Restart einlesen. Dann dürfen die nur in der Zeit nach Shutdown und Restart von OpenHAB nicht geändert werden. Was bei Objekte, welche nur in OH sind aber auch schwer wäre

    Kommentar


      #3
      Ja zum Beispiel. Es gibt ja Objekte die senden nur Ihren Status wenn Sie geschaltet werden oder haben nur eine GA für das schalten, weil sie keine Status GA haben.
      Wie kann ich openhab denn dazu bringen aus dem Bus aktiv auszulesen?

      Kommentar


        #4
        Zitat von SaschaQ Beitrag anzeigen
        Ja zum Beispiel. Es gibt ja Objekte die senden nur Ihren Status wenn Sie geschaltet werden oder haben nur eine GA für das schalten, weil sie keine Status GA haben.
        Wie kann ich openhab denn dazu bringen aus dem Bus aktiv auszulesen?
        Zum auslesen gehört ja ein Status Objekt des entsprechenden Aktors, welches dann im Item/Thing mit angegeben wird.

        Code:
        // SA/S8.16.5S; Schaltaktor,8fach,16A (---)
        Thing device ABB_0_0_200 "Schaltaktoren" @ "KNX" [
        fetch=false,
        readInterval=0
        ] {
        Type switch : ch3 "Kaminwächter" [ ga="0/8/47+<0/8/15" ]
        }
        0/8/47 hier wird gesachaltet
        <0/8/15 Status wird gelesen

        Zusätzlich habe ich wichtige oder nur in OH existierende Items/Things persistiert. Damit wird der letzte Status in eine DB geschrieben und beim Neustart wieder eingelesen.

        Kommentar


          #5
          Hallo Jörg,

          kannst du mir mal zeigen wie du das persistiert hast und wie du das wieder einliest?

          Wie ist das mit GAs die im KNX einen Status haben und Openhab diese aber nicht automatisch einliest?

          Kann man das irgendwie festlegen, dass er die lesen soll auch wenn sie sich nicht verändern?

          Kommentar


            #6
            Hallo Sascha
            1. Persitence AddOn in Paper UI installieren (ich nutze hier die MapDB)
            2. entsprechend .persist anlegen, bzw die Dummy anpassen
            Beispielhaft aus meiner mapdb.persist

            Code:
            // MapDB persistence service
            // persistence strategies have a name and a definition and are referred to in the "Items" section
            Strategies {
            everyHour : "0 0 * * * ?"
            everyDay : "0 0 0 * * ?"
            
            // if no strategy is specified for an item entry below, the default list will be used
            default = everyChange
            }
            
            /*
            * Each line in this section defines for which item(s) which strategy(ies) should be applied.
            * You can list single items, use "*" for all items or "groupitem*" for all members of a group
            * item (excl. the group item itself).
            */
            Items {
            // DEMO Temperature*, Weather* : strategy = everyChange, everyHour
            // Helligkeit*, Weather* : strategy = everyChange, everyHour
            
            Lampe_OG_Schlafz_Decke : strategy = everyChange,restoreOnStartup
            Lampe_OG_Schlafz_Bett_links : strategy = everyChange,restoreOnStartup
            Lampe_OG_Schlafz_Bett_rechts : strategy = everyChange,restoreOnStartup
            
            Night : strategy = everyChange,restoreOnStartup
            Sw_Bewaesserung : strategy = everyChange,restoreOnStartup
            }

            Zitat von SaschaQ Beitrag anzeigen
            Wie ist das mit GAs die im KNX einen Status haben und Openhab diese aber nicht automatisch einliest?
            Kann man das irgendwie festlegen, dass er die lesen soll auch wenn sie sich nicht verändern?
            Du könntest den Status zyklisch senden, oder eben persistieren. Evtl. liegt aber auch ein Fehler in der Programierung, was sicher schwer per Chat zu finden ist.
            Ich würde empfehlen mit den genannten Option zu "experimentieren" und schauen, ob Du welche ans laufen bekommst und dann schauen, wo die Unterschiede sind.

            Kommentar


              #7
              Vielen lieben Dank. Ich habe die Items, die ein Statusobjekt vom Aktor bekommen im KNX verknüpft und die bekommen auch einen Status.

              Wo ich keinen Status automatisch bekomme ist bei selbst gebauten Items in Openhab.

              Ich habe mir z. B. in Openhab Szenen gebaut, die ich über ein Item triggere. Wenn ich Openhab nun neu starte, dann haben die Items keinen Status, bis ich die Szene erstmals triggere.

              Der Präsenzstatus sieht ebenfalls ähnlich aus. Ich habe ein Item An/Abwesenheit in Openhab und das hat beim Start von Openhab keinen Status bis mein Handy das erste Mal in der Fritzbox online geht.

              Dann habe ich noch sperrobjekte meiner Fassadensteuerung die sendet aus dem Aktor auch nur den Status, wenn es geschaltet wird.

              Dann habe ich GAs, die haben noch den Zustand an oder aus im Bus aber openhab liest sie nicht beim hochfahren.Muss man hier noch etwas am Item konfigurieren damit dieses vom Bus liest?

              Kommentar


                #8
                Zitat von SaschaQ Beitrag anzeigen
                Vielen lieben Dank. Ich habe die Items, die ein Statusobjekt vom Aktor bekommen im KNX verknüpft und die bekommen auch einen Status.
                Prima

                Zitat von SaschaQ Beitrag anzeigen
                Wo ich keinen Status automatisch bekomme ist bei selbst gebauten Items in Openhab.

                Ich habe mir z. B. in Openhab Szenen gebaut, die ich über ein Item triggere. Wenn ich Openhab nun neu starte, dann haben die Items keinen Status, bis ich die Szene erstmals triggere.

                Der Präsenzstatus sieht ebenfalls ähnlich aus. Ich habe ein Item An/Abwesenheit in Openhab und das hat beim Start von Openhab keinen Status bis mein Handy das erste Mal in der Fritzbox online geht.

                Dann habe ich noch sperrobjekte meiner Fassadensteuerung die sendet aus dem Aktor auch nur den Status, wenn es geschaltet wird.

                Dann habe ich GAs, die haben noch den Zustand an oder aus im Bus aber openhab liest sie nicht beim hochfahren.Muss man hier noch etwas am Item konfigurieren damit dieses vom Bus liest?
                Hier hilf nur das beschriebene persistieren und ich nutze dies für ähnliche Funktionen (Präsenz, Szenen, etc.)
                Da ich diese ja auch nicht schalten kann, wenn ich OH neu starte, ist dies für ich eine gute Lösung.

                Worst Case
                Ich starte OH neu und hatte persistiert, das z.B. meine Tochter zu Hause ist, sie aber mittlerweile nicht mehr da ist.
                Da dauert es dann eine Weile, bis das Fritzbox Binding aktiviert wird und dieser meldet dann den richtigen Status.

                Kommentar


                  #9
                  Ach cool, danke dir.

                  So kann ich es machen.

                  Noch eine Frage:

                  Wenn ich eine Gruppe mit Lampen habe.

                  Wie lautet die Syntax wenn ich diese Gruppe schalten möchte?

                  Kommentar


                    #10
                    Zitat von SaschaQ Beitrag anzeigen
                    Wenn ich eine Gruppe mit Lampen habe.

                    Wie lautet die Syntax wenn ich diese Gruppe schalten möchte?
                    Also, machen wir einmal den einfachen Weg.
                    Dieser steht und fällt mit der Definition der Gruppe

                    Ich habe z.B. für alle meine Lampen eine Gruppe definiert
                    Code:
                    Group:Switch:OR(ON, OFF) Lampen "Alle Lampen [(%d)]" (All)
                    
                    und eine Lampe als Beispiel
                    Dimmer Lampe_Wohnzimmer_Tisch    "Wohnzimmer Tisch[%d %%]"    <light>    (EG_Wohnen, Lampen)                {channel="knx:device:bridge:eibSOLO_0_0_30:ch1"}
                    In der Sitemap habe ich Eintrag der anzeigt, wie viele Lampen eingeschaltet sind und dann einen Button, alle Lampen ausschalten kann.
                    Code:
                    Switch item=Lampen mappings=[OFF="All Off"]
                    bzw. einen Eintrag der anzeigt, wie viele Lampen eingeschaltet sind und dann in eine nächste Ebene wechselt, in der all Lampen aufgeführt sind und einzeln geschaltet werden können.
                    Code:
                    Group item=Lampen icon="switch"
                    Nun könntest Du z.B. mit Lampen.sendCommand(OFF) alle ausschalten oder eben auch mit ON einschalten.

                    So weit, so einfach und bei mir auch noch zu ändern.

                    Nachteil:
                    Es bekommen IMMER ALL Items den entsprechenden Befehl, unabhängig vom Status. Dies mag "vertretbar" sein, aber fand ich speziell beim Rollladen fahren nachteilig, weil dann der Aktor und auch die Motoren unnötig Strom erhalten, obwohl bereits angeschaltet.

                    Daher wäre es aus meiner Sicht sinnvoller, nur die zu schalten, die geschaltet werden müssen.

                    Neues Items
                    Code:
                    Group                gLights_all
                    Switch vSw_AllLight "Alle Lampen aus"
                    Und alle Lampen in diese Gruppe packen. Dann bedarf es jedoch eines zusätzlichen Items und einer Regel

                    Code:
                    rule "Alle Lampen ausschalten"
                    when
                    vSw_AllLight received Command
                    then
                    gLights_auto.members.filter(f|f.state!==receivedCo mmand.state).forEach[ m|
                    Thread::sleep((2000 + Math::random * 1000.0).intValue)
                    m.sendCommand(receivedCommand.state)
                    logInfo("Lights","Schalte {} {}",m.name, receivedCommand.state.toString)
                    ]
                    end
                    Nicht getestest, basierend auf der Hilfe von udo1toni

                    Kommentar


                      #11
                      Dankeschön an alle

                      Kommentar


                        #12
                        Zitat von SaschaQ Beitrag anzeigen
                        Dankeschön an alle
                        Klappt es denn? Wie hast Du es denn nun umgesetzt? Hilft dann evtl. noch weiteren ;-)

                        Kommentar


                          #13
                          Das Schalten der Groups habe ich wie oben umgesetzt und den Status habe ich nun persistiert. Funktioniert super.

                          Vielen lieben Dank

                          Kommentar

                          Lädt...
                          X