Ankündigung

Einklappen
Keine Ankündigung bisher.

Mehrere OpenHAB items-Dateien: wie Gruppen und Abhängigkeiten ablegen?

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

    Mehrere OpenHAB items-Dateien: wie Gruppen und Abhängigkeiten ablegen?

    Hallo,

    derzeit sortiere ich meine etwas groß gewordene default.items außeinander. Die rules habe ich schon thematisch getrennt, bei den items bin ich angefangen.

    Wie ist denn das Vorgehen bei übergreifenden Gruppen/Items bzw. bei Abhängigkeiten?

    Ich könnte z.B. eine items-Datei nur mit überall genutzten Gruppen definieren (Räume, Etagen, ...) und die dann überall referenzieren. Wie sollte ich die dann benennen, so dass die als erstes geladen wird? Oder ist das egal (dem Anschein nach bisher ja)?

    Was ist denn da best practice, auch mit Ausblick auf OpenHAB 2?

    Ich möchte gerne Funktionalitäten (Jalousien, Temperatursensoren, ...) in separaten Dateien trennen und Logik sowie sonstige Meta-Funktionen (z.B. bestimmte COUNT-, OR- und MAX-Gruppen) dann darauf aufbauend ebenfalls separat ablegen.

    Bei der defaults.sitemap ist so eine Zerteilung ja vermutlich nicht möglich (solange ich alles hinterher in einer Visualisierung haben will).

    Gruß
    stb

    #2
    Wenn Du ein Item einer Gruppe zuordnen willst, muss diese Gruppe schon existieren, also vor dem Item definiert sein. Da man die Reihenfolge, in denen die Dateien von openHAB geladen werden nicht zuverlässig beeinflussen kann (und die Reihenfolge ist dynamisch, kann also von Start zu Start unterschiedlich sein) ist es obligatorisch, Gruppen und alle zugehörigen Items innerhalb einer Datei anzulegen.
    Abgesehen davon verstehe ich nicht, warum Du die Konfiguration in viele kleine Dateien auflöst. Bei den Rules kann ich das noch nachvollziehen, aber auch da ergeben sch schnell "lustige" Effekte, wenn Rule-Dateien zum falschen Zeitpunkt geladen werden. Ich habe mir angewöhnt, Rules temporär in eine eigene Rule-datei auszulagern, wenn ich daran entwickle, grundsätzlich aber alles möglichst in einer Datei aufzubewahren. Die Auslagerung mache ich auch nur, damit die Fehleranzeige und die Kontext-Funktionen in erträglicher Geschwindigkeit laufen.
    Die Sitemaps schließlich müssen zwingend jeweils in genau einer Datei angelegt sein, dort ist jede eigene Datei auch eine eigene Sitemap, so dass man eben unterschiedliche Sitemaps zur Verfügung stellen kann, z.B. eine für das Smartphone, eine für das Tablet, eine für den PC, eine für Gäste ohne besondere Rechte usw...

    Kommentar


      #3
      Ich möchte die items aufteilen, da die default.items bei mir schon ziemlich groß und dadurch unübersichtlich geworden ist. Auch sind da Fehler schwerer zu debuggen. Derzeit sind das mehr als 300 Definitionen (Items inkl. Gruppen) und da kommen noch jede Menge dazu...

      Dazu kann ich mir vorstellen, z.B. mit einem Präprozessor einzelne Dateien (auch items) generieren zu lassen. Das ist bei "alles in einer Datei" eher nicht so toll.

      Aber wenn OpenHAB das wie geschrieben handhabt, werde ich wohl mit der Lösung in einer Datei leben. Mich wundert nur etwas, dass OpenHAB dann überhaupt mehrere item-Dateien erlaubt -- gibt ja eher selten Anwendungsfälle, wo das in einer Installation komplett disjunkt ist.

      Kommentar


        #4
        Ich denke grundsätzlich gibt es schon Items, die komplett ohne Bezug zueinander und vor allem ohne gemeinsame Gruppen sind, dann ist das ja kein Problem und man kann die Items in verschiedene Dateien packen. Abgesehen davon werden die Mechanismen im Hintergrund sicher für alle Dateien gleich sein, so dass die Aufteilung in mehrere Dateien vielleicht auch ein Stück weit "Abfallprodukt" ist.

        Kommentar


          #5
          Hallo,

          also das Problem der Aufteilung habe ich jetzt mit m4 gelöst (siehe https://knx-user-forum.de/forum/supp...lates-generics). Ein Präprozessor nimmt meine einzelnen items-Dateien und fügt die dann zu einer default.items zusammen. Die Input-Dateien haben bei mir Nummern, um eine Reihenfolge zu haben (1_gruppen_global, 2_gruppen_raeume, 4_licht ...).

          Bei den rules habe ich das jetzt genauso gelöst. Allerdings hat das Zusammenfassen der einzelnen rules in eine gemeinsame default.rules den Nachteil, dass ich auch die Variablen-Deklarationen und die import-Kommandos nach vorn stellen muss. Bei den imports ist das jetzt nicht tragisch, eine gemeinsame Datei zu haben. Bei den Variablen ist das aber ungünstig. Daher eine Frage an udo1toni:

          Was ist denn das Problem beim Ladens der Regeln aus mehreren Dateien?

          Überlege gerade, die rules doch einzeln zu lassen.

          Grüße
          Stefan

          Kommentar


            #6
            Was ist denn das Problem beim Ladens der Regeln aus mehreren Dateien?
            Es gibt einen Bug der dafür sorgt, dass manche .rules Dateien beim Start nicht gelesen werden. Tritt wohl insbesondere bei Dateien auf, die umfangreiche Regeln beim Systemstart ausführen, aber wohl nicht ausschließlich. Je mehr Dateien um so größer ist natürlich die Wahrscheinlichkeit, dass der Fehler auftritt.

            Es gibt einen Workarround: Nach dem Start ein touch auf die betroffenen Dateien, nervig ist es aber allemal.

            Kommentar


              #7
              Zitat von udo1toni Beitrag anzeigen
              Wenn Du ein Item einer Gruppe zuordnen willst, muss diese Gruppe schon existieren, also vor dem Item definiert sein. Da man die Reihenfolge, in denen die Dateien von openHAB geladen werden nicht zuverlässig beeinflussen kann (und die Reihenfolge ist dynamisch, kann also von Start zu Start unterschiedlich sein) ist es obligatorisch, Gruppen und alle zugehörigen Items innerhalb einer Datei anzulegen.
              .
              Das kann ich nicht nachvollziehen. Hatte lange Zeit auch alles in einer Datei. Habe die dann aufgesplittet. Das Aufsplitten hat auch den Vorteil, dass bei einer Änderung nicht alle Items neu eingelesen werden, sondern nur die Items der Datei, die geändert wurde. Mich hat genervt, dass bei jeder kleinen Änderung der ganze KNX-Bus mit allen Aktoren/Sensoren neu eingelesen wurde, obwohl ich was ganz anderes geändert habe. Mit der Abhängigkeit des Group-/Items-Einlesen habe ich bisher überhaupt keine Probleme gehabt (und ich habe einige Gruppen - siehe unten). Bei mir schaut das Ganze so aus:

              Code:
              ls -1
              alarmanlage.items
              enocean.items
              group.items
              hoerndle.items
              README
              rollo.items
              speedtest.items
              test.items
              waermepumpe.items
              xbmc.items
              Wobei group.items alle Gruppen enthält:
              Code:
              Group All
              
              Group Jalousien                 (All)
              Group Rollos                    (All)
              Group RolloZentralfunktion      (All)
              Group DG                (All)
              Group EG                (All)
              Group KG                (All)
              Group Aussen            (All)
              Group Netzwerk          (All)
              Group Zugang            (All)
              Group Waermepumpe       (All)
              Group IPWE
              Group Stocks
              Group Abfall            (All)
              
              
              Group Bewegung          (All)
              Group Cameras           (All)
              Group Alarmanlage       (All)
              
              Group DG_Gang           "Gang"                  <corridor>      (DG)
              Group DG_Bad            "Bathroom"              <bath>          (DG)
              Group DG_Schlafen       "Schlafzimmer"          <bedroom>       (DG)
              Group DG_Buero          "Buero"                 <office>        (DG)
              
              Group EG_Flur           "Flur"                  <corridor>      (EG)
              Group EG_Speis          "Speis"                 <pie>           (EG)
              Group EG_Bad            "Bad"                   <bath>          (EG)
              Group EG_Wohnzimmer     "Wohnzimmer"            <video>         (EG)
              Group EG_Wintergarten   "Wintergarten"          <garden>        (EG)
              Group EG_Esszimmer      "Esszimmer"             <pie>           (EG)
              Group EG_Kueche         "Kueche"                <kitchen>       (EG)
              
              Group KG_Flur           "Flur"                  <corridor>      (KG)
              Group KG_Waschhaus      "Waschhaus"             <bath>          (KG)
              Group KG_Hobbyraum      "Hobbyraum"             <smiley>        (KG)
              Group KG_Wintergarten   "Wintergarten"          <garden>        (KG)
              Group KG_Duschraum      "Duschraum"             <bath>          (KG)
              Group KG_Werkstatt      "Werkstatt"             <clock>         (KG)
              
              Group System            "System"
              
              Group WPTemperaturen    "Temperaturen"          <temperature>   (Waermepumpe)
              Group WPEingaenge       "Eingänge"              <sani_earth_source_heat_pump>   (Waermepumpe)
              Group WPAusgaenge       "Ausgänge"              <sani_earth_source_heat_pump>   (Waermepumpe)
              Group WPAblaufzeiten    "Ablaufzeiten"          <clock> (Waermepumpe)
              Group WPBetriebsstunden "Betriebsstunden"       <clock> (Waermepumpe)
              Group WPAnlagenstatus   "Anlagenstatus"         <sani_earth_source_heat_pump>   (Waermepumpe)
              Group WPFehlerspeicher  "Fehlerspeicher"        <pie>   (Waermepumpe)
              Group WPAbschaltungen   "Abschaltungen"         <pie>   (Waermepumpe)
              
              Group Enocean           (All)
              Group EnoceanRaw        (All)
              
              /* active groups */
              Group:Switch:OR(ON, OFF)                Beleuchtung             "Beleuchtung[(%d)]"                     (All)
              Group:Switch:OR(ON, OFF)                Steckdosen              "Steckdosen [(%d)]"                     (All)
              Group:Switch:OR(ON, OFF)                FBH                     "FBH [(%d)]"                            (All)
              Group:Switch:OR(ON, OFF)                Zirkulation             "Zirkulation [(%d)]"                    (All)
              Group:Switch:OR(ON, OFF)                Heizung                 "Heizung [(%d)]"                        (All)
              Zuletzt geändert von thoern; 09.07.2015, 20:18.

              Kommentar


                #8
                Vielleicht ist mein Wissensstand da auch überholt wäre ja umso besser, wenn das kein Problem mehr wäre. Was passiert, wenn Du bei laufendem System was an der group.items-Datei änderst?

                Kommentar

                Lädt...
                X