Zugriffzeit openHab/Docker über Netzwerk Raspberry

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

Antworten
alex_2112
Beiträge: 6
Registriert: 23. Feb 2023 11:03
Answers: 0

Zugriffzeit openHab/Docker über Netzwerk Raspberry

Beitrag von alex_2112 »

Hallo,
kurz zu mir... habe openHab 4.1.1 in einem Docker auf einer Synology 220+ (10GB RAM, 2 Netzwerkports), weiterhin in jeweils einem Docker Grafana, InfluxDB, Mosquitto an laufen.
Im openHab sind ~1600 Items, 35 Pages, 18 Rules und diverse Widgets... (glaube gibt schlimmeres ... :D )
Der Zugriff läuft über einen Touchscreen mit einem Raspberry 4 (8GB RAM, aktive Kühlung)...
Das "Problem" sind die Ladezeiten über den Raspberry. Teilweise braucht es ungelogen 20 Sekunden bis sich eine Seite aufbaut. Mit Laptop im Netzwerk dauert die gleiche Seite ca. 3 Sekunden (was für die Anzahl an eingebundenen Items absolut in Ordnung wäre).
Netzwerkeinstellungen am Raspberry, WLAN oder LAN (das anderes jeweils deaktiviert) habe ich alles überprüft. Auch den Raspi neu aufgesetzt mit dem aktuellsten Raspberry Pi OS und neuer SD Karte.
Sind die Layout Seiten im openHab so speicherintensiv?
Wie greift ihr auf eure openHab Installationen zu wenn Sie als Haussteuerung dienen? Hilft ein Umstieg auf einen Raspi5? Oder braucht es sogar einen "normalen" mini PC mit z.B. I5 oder I7 Prozessor und dementsprechend RAM? Wäre schade, denn der Energieverbrauch des Raspi ist halt doch schön...

Vielen Dank euch...
LG ALEX

Benutzeravatar
udo1toni
Beiträge: 15243
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Zugriffzeit openHab/Docker über Netzwerk Raspberry

Beitrag von udo1toni »

Ich habe keinen Pi als Client, aber ehrlich gesagt kann ich mir nicht vorstellen, dass das ein grundsätzliches Problem ist. Mein openHAB enthält nur wenige Pages, meist nutze ich die Sitemap, aber mehr aus Gewohnheit als um Zeit zu sparen.
Mein System hat 147 Things, 1454 Items, 8 Pages, 65 Rules und ca. 40 installierte Addons. Mein openHAB System läuft in einem LX-Container (LXC), in etwa vergleichbar mit Docker, aber etwas andere Umsetzung.
Der Container hat 3 GByte RAM zur Verfügung (weil ich es habe...) und kann 4 Cores nutzen, wobei das System selbst unter Last meist unterhalb 10% CPU-Last ist und nie wesentlich über 2 GByte RAM Bedarf hat.
Auf meinem Desktop dauert das Öffnen der Main UI Übersicht jederzeit weniger als eine Sekunde, auf dem Smartphone ebenso, auch wenn ich von Unterwegs über Wireguard zugreife (mein Upload ist auf 30 MBit/s begrenzt).
Ich habe nur wenige Widgets auf meiner Übersichtsseite (wie gesagt, ich nutze meist die Sitemap), aber ich hatte auch schon testweise "größere" Übersichtsseiten gebaut, ohne dass mir da Probleme mit dem Seitenaufbau untergekommen wären.

Wie ist der Pi angebunden? Kann es sein, dass der Pi über WLAN läuft? Es gibt meines Wissens spezielle Images für den Kiosk Modus (also bestens geeignet als Grundlage für Touchscreens) bei denen der Browser sehr leichtgewichtig ist, das wäre evtl. eine bessere Grundlage.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

alex_2112
Beiträge: 6
Registriert: 23. Feb 2023 11:03
Answers: 0

Re: Zugriffzeit openHab/Docker über Netzwerk Raspberry

Beitrag von alex_2112 »

Guten Morgen Udo, vielen Dank für deine Einschätzung...
eben weil ich die Unterschiede zwischen lokalem Zugriff (Touch/ Raspi) und Zugriff PC (Windows-lokal oder VPN) so krass finde bin ich am Suchen was der Fehler sein kann.
Der PI ist mit WLAN eingebunden, habe aber zum Testen das ganze nach der Neuinstallation mit Kabel verbunden und das WLAN deaktiviert. Ergebnis ist das gleiche - LAAANGSAAM... :shock:
Momentan ist es ein normales PI OS (m.E. ein abgespecktes Ubuntu) welches ich halt im Kiosk Modus im Chromium betreibe. Alles eigentlich kein Hexenwerk... Sitemaps sind da (aus momentaner Sicht ) eher böhmische Dörfer... habe ich mich bis jetzt gar nicht damit beschäftigt.
Hab schon meine Widgets im Verdacht gehabt, ob ich da irgendeinen Mist drin stehen habe... aber das kann ja eigentlich auch nicht sein. :?:

Benutzeravatar
udo1toni
Beiträge: 15243
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Zugriffzeit openHab/Docker über Netzwerk Raspberry

Beitrag von udo1toni »

alex_2112 hat geschrieben: 7. Aug 2024 08:04 Sitemaps sind da (aus momentaner Sicht ) eher böhmische Dörfer... habe ich mich bis jetzt gar nicht damit beschäftigt.
Das stammt halt noch aus "Nur-Text-Zeiten" :) - damals noch mit der Classic UI (wobei ich unter openHAB 1 gerne GreenT verwendet hab, leider wurde das gar nicht mehr weiter entwickelt).
Die Basic UI (Sitemaps) bietet halt nur eine einfache Ansicht, dennoch ist sie sehr leistungsfähig. Aber wie gesagt, das ist sicherlich nicht Dein Problem.
alex_2112 hat geschrieben: 7. Aug 2024 08:04 Hab schon meine Widgets im Verdacht gehabt, ob ich da irgendeinen Mist drin stehen habe... aber das kann ja eigentlich auch nicht sein.
Sind es selbst entwickelte Widgets, oder solche "von der Stange"? Bei selbst entwickelten musst Du halt schauen, was die Widgets machen.

Ich bin mir nicht sicher, aber hat Chromium nicht auch ein Monitoring für Web Entwickler implementiert? Im Menü unter "Weitere Tools" und dann Entwicklertools. Damit kann man auch den Verlauf einer Session "aufnehmen" um im Anschluss zu schauen, wie viel Zeit für welchen Teil des Seitenaufrufs drauf geht.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

alex_2112
Beiträge: 6
Registriert: 23. Feb 2023 11:03
Answers: 0

Re: Zugriffzeit openHab/Docker über Netzwerk Raspberry

Beitrag von alex_2112 »

Sind es selbst entwickelte Widgets, oder solche "von der Stange"?
Ich würde sagen selbst entwickelt - natürlich zu Beginn gesucht kopiert/ ausprobiert, das behalten und verändert was gefallen und funktioniert hat. Inzwischen denke ich, ich weiß so ungefähr was ich tue... :mrgreen: aber mehr auch nicht. Habe dir unten mal das letzte Widget angehängt... wenn du Lust hat schau es dir mal an... Kritik erwünscht...
Chromium nicht auch ein Monitoring für Web Entwickler
Das ist ein guter Hinweis, werde ich in den nächsten Abenden mal machen und berichten...

Code: Alles auswählen

uid: label_bewaesserung_test
tags: []
props:
  parameters:
    - context: item
      description: item zonenname
      label: item_zone
      name: item_zone
      required: true
      type: TEXT
    - context: item
      description: item run
      label: item_run
      name: item_run
      required: true
      type: TEXT
    - label: Item Command run
      name: item_command_run
      required: false
      type: TEXT
    - label: Item Command Alternativ run
      name: item_command_alt_run
      required: false
      type: TEXT
    - context: item
      description: item nextruntime
      label: item_nextruntime
      name: item_nextruntime
      required: true
      type: TEXT
    - context: item
      description: item aussetzen
      label: item_aussetzen
      name: item_aussetzen
      required: true
      type: TEXT
    - label: Item Command aussetzen
      name: item_command_aussetzen
      required: false
      type: TEXT
    - label: Item Command Alternativ aussetzen
      name: item_command_alt_aussetzen
      required: false
      type: TEXT
    - context: item
      description: item ausgesetzt bis
      label: item_aussetzen_bis
      name: item_aussetzen_bis
      required: true
      type: TEXT
    - context: item
      description: item restzeit
      label: item_restzeit
      name: item_restzeit
      required: true
      type: TEXT
    - context: item
      description: item summery
      label: item_summery
      name: item_summery
      required: true
      type: TEXT
  parameterGroups: []
timestamp: Aug 6, 2024, 8:41:07 AM
component: f7-card
config:
  outline: false
  style:
    background: transparent
    border: 3px solid
    border-color: rgba(255, 255, 255, 0.5)
    border-radius: 15px
    margin-bottom: 10px
    margin-left: 10px
    margin-right: 10px
    margin-top: 10px
slots:
  default:
    - component: f7-row
      config:
        class:
          - margin-top-half
          - margin-left-half
          - margin-right-half
          - margin-bottom half
      slots:
        default:
          - component: f7-col
            slots:
              default:
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                    style:
                      --f7-button-bg-color: rgba(0,191,255, 0.4)
                      --f7-button-border-color: rgba(255, 255, 255, 0.5)
                      --f7-button-border-radius: 15px
                      --f7-button-border-width: 3px
                      --f7-button-fill-bg-color: rgba(173, 255, 47, 0.30)
                      --f7-button-fill-hover-bg-color: transparent
                      --f7-button-fill-pressed-bg-color: rgba(173, 255, 47, 0.30)
                      --f7-button-hover-bg-color: rgba(0,191,255, 0.4)
                      --f7-button-padding-horizontal: 0px
                      --f7-button-padding-vertical: 0px
                      --f7-button-pressed-bg-color: rgba(0,191,255, 0.4)
                      --f7-button-text-color: white
                      font-size: 20px
                      height: 80px
                      padding-bottom: 10px
                      padding-top: 10px
                    text: =(items[props.item_zone].state)
    - component: f7-row
      config:
        class:
          - margin-top-half
          - margin-left-half
          - margin-right-half
          - margin-bottom half
        style:
          border: 3px solid
          border-color: rgba(255, 255, 255, 0.5)
          border-radius: 15px
      slots:
        default:
          - component: f7-col
            slots:
              default:
                - component: oh-button
                  config:
                    action: toggle
                    actionCommand: =props.item_command_run
                    actionCommandAlt: =props.item_command_alt_run
                    actionItem: =props.item_run
                    class:
                      - display-flex
                      - flex-direction-column
                    icon-f7: '=(items[props.item_run].state == "ON") ? "drop_fill" : "drop"'
                    iconColor: '=(items[props.item_run].state == "ON") ? "yellow" : "white"'
                    iconSize: 30px
                    style:
                      --f7-button-border-color: transparent
                      --f7-button-border-radius: 15px
                      --f7-button-border-width: 3px
                      --f7-button-fill-hover-bg-color: transparent
                      --f7-button-hover-bg-color: transparent
                      --f7-button-padding-horizontal: 0px
                      --f7-button-padding-vertical: 0px
                      --f7-button-pressed-bg-color: transparent
                      --f7-button-text-color: white
                      font-size: =(props.fontsize + "px")
                      height: 45px
                      padding-bottom: 20px
                      padding-top: 20px
                - component: oh-button
                  config:
                    action: toggle
                    actionCommand: =props.item_command_run
                    actionCommandAlt: =props.item_command_alt_run
                    actionItem: =props.item_run
                    class:
                      - display-flex
                      - flex-direction-column
                    fill: '=(items[props.item_run].state == "ON") ? true : false'
                    style:
                      --f7-button-border-color: rgba(255, 255, 255, 0.5)
                      --f7-button-border-radius: 15px
                      --f7-button-border-width: 3px
                      --f7-button-fill-bg-color: rgba(173, 255, 47, 0.30)
                      --f7-button-fill-hover-bg-color: transparent
                      --f7-button-fill-pressed-bg-color: rgba(173, 255, 47, 0.30)
                      --f7-button-hover-bg-color: transparent
                      --f7-button-padding-horizontal: 0px
                      --f7-button-padding-vertical: 0px
                      --f7-button-text-color: white
                      font-size: 30px
                      height: 50px
                      margin-bottom: 10px
                      margin-left: 10px
                      margin-right: 10px
                      margin-top: 10ßx
                      padding-bottom: 10px
                      padding-top: 10px
                    text: RUN
                - component: oh-button
                  config:
                    visible: '=items[props.item_restzeit].displayState == "0" ? false : true'
                    action: toggle
                    actionCommand: =props.item_command_run
                    actionCommandAlt: =props.item_command_alt_run
                    actionItem: =props.item_run
                    class:
                      - display-flex
                      - flex-direction-column
                    style:
                      --f7-button-border-color: transparent
                      --f7-button-border-radius: 15px
                      --f7-button-border-width: 3px
                      --f7-button-fill-hover-bg-color: transparent
                      --f7-button-hover-bg-color: transparent
                      --f7-button-padding-horizontal: 0px
                      --f7-button-padding-vertical: 0px
                      --f7-button-pressed-bg-color: transparent
                      --f7-button-text-color: white
                      font-size: 20px
                      height: 30px
                      padding-bottom: 10px
                      padding-top: 0px
                    text: =(items[props.item_restzeit].state)
    - component: f7-row
      config:
        class:
          - margin-top-half
          - margin-left-half
          - margin-right-half
          - margin-bottom half
        style:
          border: 3px solid
          border-color: rgba(255, 255, 255, 0.5)
          border-radius: 15px
      slots:
        default:
          - component: f7-col
            slots:
              default:
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                    icon-f7: alarm_fill
                    iconColor: green
                    iconSize: 30px
                    style:
                      --f7-button-border-color: transparent
                      --f7-button-border-radius: 15px
                      --f7-button-border-width: 3px
                      --f7-button-fill-hover-bg-color: transparent
                      --f7-button-hover-bg-color: transparent
                      --f7-button-padding-horizontal: 0px
                      --f7-button-padding-vertical: 0px
                      --f7-button-pressed-bg-color: transparent
                      --f7-button-text-color: white
                      font-size: =(props.fontsize + "px")
                      height: 40px
                      padding-bottom: 10px
                      padding-top: 20px
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                    style:
                      --f7-button-border-color: transparent
                      --f7-button-border-radius: 15px
                      --f7-button-border-width: 3px
                      --f7-button-fill-hover-bg-color: transparent
                      --f7-button-hover-bg-color: transparent
                      --f7-button-padding-horizontal: 0px
                      --f7-button-padding-vertical: 0px
                      --f7-button-pressed-bg-color: transparent
                      --f7-button-text-color: white
                      font-size: 20px
                      height: 50px
                      padding-bottom: 10px
                      padding-top: 0px
                    text: =(items[props.item_nextruntime].displayState)
    - component: f7-row
      config:
        class:
          - margin-top-half
          - margin-left-half
          - margin-right-half
          - margin-bottom half
        style:
          border: 3px solid
          border-color: rgba(255, 255, 255, 0.5)
          border-radius: 15px
      slots:
        default:
          - component: f7-col
            slots:
              default:
                - component: oh-button
                  config:
                    action: toggle
                    actionCommand: =props.item_command_aussetzen
                    actionCommandAlt: =props.item_command_alt_aussetzen
                    actionItem: =props.item_aussetzen
                    class:
                      - display-flex
                      - flex-direction-column
                    fill: '=(items[props.item_aussetzen].state == "ON") ? true : false'
                    icon-f7: '=(items[props.item_aussetzen].state == "ON") ? "clear_fill" : "clear"'
                    iconColor: '=(items[props.item_aussetzen].state == "ON") ? "red" : "green"'
                    iconSize: 30px
                    style:
                      --f7-button-border-color: rgba(255, 255, 255, 0.5)
                      --f7-button-border-radius: 15px
                      --f7-button-border-width: 3px
                      --f7-button-fill-bg-color: rgba(173, 255, 47, 0.30)
                      --f7-button-fill-hover-bg-color: transparent
                      --f7-button-fill-pressed-bg-color: rgba(173, 255, 47, 0.30)
                      --f7-button-hover-bg-color: transparent
                      --f7-button-padding-horizontal: 0px
                      --f7-button-padding-vertical: 0px
                      --f7-button-text-color: white
                      font-size: 20px
                      height: auto
                      margin-left: 10px
                      margin-right: 10px
                      margin-top: 10px
                      margin-bottom: 10px
                      padding-bottom: 10px
                      padding-top: 10px
                    text: aussetzen
                - component: oh-button
                  config:
                    visible: '=items[props.item_aussetzen_bis].state == "UNDEF" ? false : true'
                    class:
                      - display-flex
                      - flex-direction-column
                    style:
                      --f7-button-border-color: transparent
                      --f7-button-border-radius: 15px
                      --f7-button-border-width: 3px
                      --f7-button-fill-hover-bg-color: transparent
                      --f7-button-hover-bg-color: transparent
                      --f7-button-padding-horizontal: 0px
                      --f7-button-padding-vertical: 0px
                      --f7-button-pressed-bg-color: transparent
                      --f7-button-text-color: white
                      font-size: 20px
                      height: 40px
                      padding-bottom: 10px
                      padding-top: 10px
                    text: bis
                - component: oh-button
                  config:
                    visible: '=items[props.item_aussetzen_bis].state == "UNDEF" ? false : true'
                    class:
                      - display-flex
                      - flex-direction-column
                    style:
                      --f7-button-border-color: transparent
                      --f7-button-border-radius: 15px
                      --f7-button-border-width: 3px
                      --f7-button-fill-hover-bg-color: transparent
                      --f7-button-hover-bg-color: transparent
                      --f7-button-padding-horizontal: 0px
                      --f7-button-padding-vertical: 0px
                      --f7-button-pressed-bg-color: transparent
                      --f7-button-text-color: white
                      font-size: 20px
                      height: 50px
                      padding-bottom: 10px
                      padding-top: 0px
                    text: =(items[props.item_aussetzen_bis].displayState)
    - component: f7-row
      config:
        class:
          - margin-top-half
          - margin-left-half
          - margin-right-half
          - margin-bottom half
      slots:
        default:
          - component: f7-col
            slots:
              default:
                - component: oh-button
                  config:
                    class:
                      - display-flex
                      - flex-direction-column
                    style:
                      --f7-button-border-color: transparent
                      --f7-button-border-radius: 15px
                      --f7-button-border-width: 3px
                      --f7-button-fill-hover-bg-color: transparent
                      --f7-button-hover-bg-color: transparent
                      --f7-button-padding-horizontal: 0px
                      --f7-button-padding-vertical: 0px
                      --f7-button-pressed-bg-color: transparent
                      --f7-button-text-color: white
                      font-size: 20px
                      height: 200px
                      padding-bottom: 10px
                      padding-top: 10px
                      text-align: justify
                      white-space: wrap
                    text: =(items[props.item_summery].state)

alex_2112
Beiträge: 6
Registriert: 23. Feb 2023 11:03
Answers: 0

Re: Zugriffzeit openHab/Docker über Netzwerk Raspberry

Beitrag von alex_2112 »

Was mir gerade noch einfällt/ auffällt, ich habe in mehreren Widgets einen Refreshtimer eingebaut, damit sich die Ansicht aktualisiert...

Code: Alles auswählen

timestamp: Apr 29, 2024, 11:58:04 AM
component: f7-card
config:
  key: =Math.random() + items.UI_Refresh_Timer.state
Dazu gehört natürlich auch eine Rule, die alle 5 Minuten läuft.
Du hattest mal in einem anderen Thread etwas zum Thema Performance und zeitgesteuerte Rules geschrieben... man sollte das vermeiden... Aber sollte es an so etwas liegen, müsste doch die Zugriffzeit von jedem Client aus lange dauern?

Benutzeravatar
udo1toni
Beiträge: 15243
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Zugriffzeit openHab/Docker über Netzwerk Raspberry

Beitrag von udo1toni »

Eigentlich sollte ein manueller Refresh (also manuell im Sinne, dass Du extra dafür eine Rule brauchst) unnötig sein. Ich habe ja nur wenige Standard Widgets im Einsatz, aber die aktualisieren ihre Ansicht zuverlässig, ohne dass es dazu einer eigenen Rule bedarf.

Grundsätzlich kann man mit Timer-gesteuerten Rules arbeiten, es ist halt in vielen Fällen unsinnig.
Beispiel: Ich habe eine kombinierte Anzeige von Azimuth und Elevation in einem Item, dessen Daten ich aus dem Astro Binding erhalte.
Ich könnte nun eine Rule schreiben, die diese Werte alle paar Sekunden auffrischt. Aber was nutzt das? Ich muss die Werte ja nur auffrischen, wenn sie sich verändert haben, also abhängig vom im Thing eingestellten Wert (default 5 Minuten).
Wenn meine Rule nun ebenfalls alle 5 Minuten über einen Timer getriggert wird, hat das immer noch den Nachteil, dass der angezeigte Wert unnötig ungenau ist, denn im Schnitt wird der Zeitraum zwischen Änderung des Itemwerts und Triggern der Rule etwa 2,5 Minuten betragen, abhängig davon, wann openHAB gestartet wurde (der Refresh geschieht dynamisch ab dem Zeitpunkt der Aktivierung des Things).
Da sich aber bei jedem Refresh die Werte ohnehin ändern, kann ich die Rule auch auf changed triggern lassen. Damit habe ich dann auch exakt eine Stelle, an der ich die "Refresh Rate" einstellen kann, und zwar im Astro Binding bzw. im zugehörigen Thing, und die Rule löst immer unmittelbar mit der Änderung der Werte aus.

openHAB ist "event driven", das heißt, die Regeln werden durch Ereignisse ausgelöst. Man sollte immer versuchen, die auslösenden Ereignisse so zu wählen, dass die Ausführung der Rules optimiert wird.

Ein Gegenbeispiel: Ich lasse meine Rollläden automatisch auf eine Beschattungsposition fahren, wenn die erwartete Höchsttemperatur des Tages über 23 °C liegt. Die Vorhersage liegt am Vortag vor, aber naturgemäß ist die Vorhersage am gleichen Tag morgens genauer, also prüfe ich um 6 Uhr die Vorhersagen und errechne den Höchstwert. Abhängig davon setze ich die Sollwerte aller betroffenen Rollläden, die dann ab 08:30 Uhr ihre jeweilige Position anfahren. Es wäre Quatsch, den Höchstwert bei jeder Änderung neu zu berechnen, schließlich brauche ich den Wert nur einmal täglich, entsprechend ist ein simpler Timer hier die beste Wahl.

Unabhängig von diesen Beispielen führt eine einzelne Rule, die alle fünf Minuten läuft, sicherlich nicht zu einem Problem im Web Client.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten