[Modul] openHASP

openHASP
Einbindung von openHASP-Displays in IP-Symcon

1. Voraussetzungen

  • mindestens IPS Version 6.0 (Getestet mit 7.1)
  • MQTT Server
  • openHASP Display Version 0.7.0

2. Enthaltene Module

3. Installation

  • über den IP-Symcon Module Store.
  • über Github.

(Changelog im nächsten Beitrag)

4. Hardware
Eine mögliche Hardware wurde hier behandelt:
Hervorragendes und günstiges Mini Touch Display
:information_source:Grundsätzliche Fragen zur Hardware bitte dort und nicht Hier.

5. Screenshots

6. Feedback
Feedback in Form von Bugreports und Verbesserungsvorschlägen ist gerne willkommen.

5 „Gefällt mir“

Version im Store:
BETA: V 0.8
Stable: V 0.6

Changelog
V 0.8

  • Direktes Mapping von Strings, Buttons und Variablen an Hand der Page und ID bei manuellem Anlegen eines Designs.
    Aktuell ist beim Mapping noch nicht alles implementiert und noch nicht ausgiebig getestet.

V 0.7

  • String kann durch verwenden von „$$“ als Platzhalter die formatierte Variable darstellen.
  • Bugfix: Schalten von „Im Ruhezustand auf Seite1 wechseln“ funktioniert jetzt nur wenn ausgewählt.

V 0.6

  • Beschriftung von LineMeter kann Variablen nutzen (z.B. „%d W“ um einen Wert in Watt anzuzeigen)
  • Option „Im Ruhezustand auf Seite 1 Wechseln“ implementiert

V 0.5

  • Beschriftung von LineMeter wird nun angezeigt
  • Symbol in String wird nun direkt angezeigt
  • Skript zum Abfangen von Events eigener Elemente

V 0.4
Implementierung von:

  • Dropdown (Achtung die Variable muss für alle Werte Assoziationen enthalten)
  • Arc
  • LED Indicator
  • Line Meter
  • Switch

V 0.3
Parameter wie Displaygröße einstellbar gemacht.
Parameter in der Instanz in Expansion Panel untergebracht um Übersichtlichkeit zu verbessern.

V 0.2
Anlagen von UI-Elementen (Display Inhalt) aus Symcon heraus.
Unterstütze Elemente:

  • Buttons /Toggle-Buttons
  • Label
  • Slider
    (Die Objekttypen können händisch überschrieben werden.

V 0.2
Anlagen von UI-Elementen (Display Inhalt) aus Symcon heraus.
Unterstütze Elemente:

  • Buttons /Toggle-Buttons
  • Label
  • Slider
    (Die Objekttypen können händisch überschrieben werden.

V 0.1
Anlegen von Variablen, die durch Aktionen der im Display vordefinierten UI-Elemente aufgerufen werden.

1 „Gefällt mir“

Ich baue gerade mein manuell konfiguriertes Display auf dein Modul um. Ich verwende bisher auch noch das LED Element. Hast du geplant das mit einzubauen?

Wenn der Bedarf besteht gerne :wink:
Du kannst solange einfach einen Slider nehmen und ihm mit Parameter überschrieben en {"obj":"led"} mitgeben.
als Objekt kannst du dann die Variable mit 0…255 mit geben.

nutzt du Helligkeiten oder einfach nur An/Aus?

Hallo,

würde gerne auch die Helligkeit nutzen.

Version 0.4 als BETA verfügbar. :slight_smile:

Moin,

hab ich ne Chance die Seite 1 fest zu hinterlegen? Dort hab ich meine Übersicht, da sehe ich gerade noch nicht so recht wie ich das im Modul nachbauen soll.

Zudem fände ich es leichter, wenn ich einfach eine Page mitgeben könnte, statt dies über die Größe der Objekte zu berechnen?

Anbei mal meine erste Seite:

{"page":1,"comment":"---------- Page 1 480x480px ----------"}
{"page":1,"id":1,"obj":"label","x":5,"y":5,"h":50,"w":200,"text":"\uE0ED 01.01.2024","align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":1,"id":10,"obj":"arc","x":5,"y":68,"w":130,"h":130,"min":0,"max":100,"border_side":0,"type":0,"rotation":0,"start_angle":135,"end_angle":45,"start_angle10":135,"end_angle10":45,"adjustable":false,"bg_grad_color":"#000000"}
{"page":1,"id":11,"obj":"label","x":42,"y":125,"h":50,"w":55,"text":"0","align":1,"bg_color":"#2C3E50","text_color":"#FFFFFF", "text_font":16}
{"page":1,"id":84,"obj":"label","x":42,"y":100,"h":50,"w":55,"text":"-100w","align":1,"bg_color":"#2C3E50","text_color":"#FFFFFF", "text_font":16}
{"page":1,"id":12,"obj":"label","x":55,"y":150,"h":50,"w":55,"text":"\uF2A3","align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":1,"id":13,"obj":"linemeter","x":5,"y":205,"w":130,"h":130,"value_str":"15000","val":15000,"line_count":11,"line_rounded":1,"min":0,"max":18000, "value_font":16,"bg_color":"#000000","border_color":"#000000","bg_grad_color":"#000000","line_color":"#008080","scale_grad_color":"#008000"}
{"page":1,"id":14,"obj":"label","x":55,"y":280,"h":50,"w":55,"text":"\uE5A8","align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":1,"id":15,"obj":"label","x":5,"y":330,"h":50,"w":130,"text":"\uE0ED 105kWh","align":1,"bg_color":"#2C3E50","text_color":"#FFFFFF", "text_font":20}
{"page":1,"id":16,"obj":"linemeter","x":145,"y":205,"w":130,"h":130,"value_str":"5000","val":5000,"line_count":11,"line_rounded":1,"min":0,"max":18000, "value_font":16,"bg_color":"#000000","border_color":"#000000","bg_grad_color":"#000000"}
{"page":1,"id":17,"obj":"label","x":195,"y":280,"h":50,"w":55,"text":"\uE2DC","align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":1,"id":18,"obj":"label","x":145,"y":330,"h":50,"w":130,"text":"\uE0ED 105kWh","align":1,"bg_color":"#2C3E50","text_color":"#FFFFFF", "text_font":20}
{"page":1,"id":80,"obj":"linemeter","x":145,"y":68,"w":130,"h":130,"value_str":"-500","val":-5000,"line_count":6,"line_rounded":1,"min":0,"max":18000, "value_font":16,"bg_color":"#000000","border_color":"#000000","bg_grad_color":"#000000","type":1,"angle":120,"rotation":-60,"line_color":"#008080" ,"scale_grad_color":"#008000"}
{"page":1,"id":83,"obj":"linemeter","x":145,"y":68,"w":130,"h":130,"value_str":"0","val":0,"line_count":6,"line_rounded":1,"min":0,"max":18000, "value_font":16,"bg_color":"#000000","border_color":"#000000","bg_grad_color":"#000000","type":0,"angle":120,"rotation":60,"bg_opa":0,"value_opa":0,"line_color":"#B00000","scale_grad_color":"#B00000" }
{"page":1,"id":81,"obj":"label","x":195,"y":143,"h":50,"w":55,"text":"\uF40B","align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":1,"id":82,"obj":"label","x":145,"y":187,"h":50,"w":130,"text":"\uE0ED 105kWh","align":1,"bg_color":"#2C3E50","text_color":"#FFFFFF", "text_font":20}
{"page":1,"id":20,"obj":"label","x":5,"y":365,"h":50,"w":50,"text":"\uE322","align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":1,"id":21,"obj":"label","x":60,"y":365,"h":50,"w":50,"text":"\uE438","align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":1,"id":30,"obj":"label","x":350,"y":5,"h":50,"w":150,"text":"\uE150 11:11","align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":1,"id":50,"obj":"obj","x":300,"y":55,"w":160,"h":120,"click":0}
{"page":1,"id":40,"obj":"label","x":310,"y":100,"h":60,"w":60,"text":"\uEA7A","align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF", "text_font":64 }
{"page":1,"id":41,"obj":"label","x":385,"y":100,"h":60,"w":60,"text":"\uEA7A","align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF", "text_font":64}
{"page":1,"id":42,"obj":"label","x":305,"y":60,"h":50,"w":150,"text":"","align":1,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":1,"id":60,"obj":"obj","x":300,"y":185,"w":160,"h":110,"click":0}
{"page":1,"id":61,"obj":"label","x":385,"y":200,"h":100,"w":150,"text":"\uE917","align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF", "text_font":64}
{"page":1,"id":62,"obj":"label","x":310,"y":200,"h":100,"w":150,"text":"\uE72A","align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF", "text_font":64}
{"page":1,"id":63,"obj":"label","x":312,"y":270,"h":50,"w":60,"text":"Ein","align":1,"bg_color":"#2C3E50","text_color":"#FFFFFF", "text_font":20}
{"page":1,"id":64,"obj":"label","x":387,"y":270,"h":50,"w":60,"text":"Aus","align":1,"bg_color":"#2C3E50","text_color":"#FFFFFF", "text_font":20}
{"page":1,"id":70,"obj":"obj","x":300,"y":305,"w":160,"h":110,"click":0}
{"page":1,"id":72,"obj":"label","x":312,"y":315,"h":50,"w":150,"text":"\uE50F 15°C","align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF", "text_font":32}
{"page":1,"id":73,"obj":"label","x":312,"y":355,"h":50,"w":150,"text":"\uE58E 55%","align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF", "text_font":32}

Hier mal ein Beispiel mit statischer Menüseite.
Hierfür muss natürlich die Seitennavigation ausgeblendet und selbst erstellt werden.
An der Stelle noch nicht mit dem „Neue Seite“ Element erstellt.



Das Modul soll einem die Arbeit erleichtern und auch für jeden Bedienbar sein.
Ich habe mich am Anfang auch Hingestellt und die Positionen berechnet. Darauf habe ich ehrlich gesagt keine Lust mehr.
Ich konnte bis jetzt mit dieser Struktur alles abbilden, was ich wollte.

Für „Poweruser“ die alle Funktionen bis aufs letzte ausreizen wollen ist es vielleicht nicht das richtige. Hier will ich noch die Möglichkeit geben die Elemente händisch zu setzten und auszuwerten. Ist dann halt nicht mehr so komfortabel aber wenn es anders nicht machbar ist die einzige Möglichkeit.

Bin zufrieden mit dem automatischen Seitenumbruch und ändere eigentlich nur den Style für die Buttons, Slider senkrecht etc.

Danke für das Modul

1 „Gefällt mir“

Die LED und noch weitere Elemente sind jetzt ja schon drin.

Du bist ja echt fix.

Mir ist jetzt noch aufgefallen, dass bei mir aus irgend einem Grund nur eine Variable erstellt wurde.

Habe die Option Variablen erstellen aber an.

Kann man die noch generieren lassen?

Wie findet man die Nummerierung am einfachsten raus?

Ich denke die werden beim Erstellen numeriert. Ich habe sie dann aber anschließend noch in der Reihenfolge Verschoben und so den Überblick verloren welche Nummer zu welchem Knopf gehört .

Wenn du dir die UI-Elemente automatisch erstellen lässt brauchst du die Variablen nicht mal, da du die Skripte und Variablen direkt verlinken kannst :sunglasses:

Die automatische Generierungen ist eher für Buttons und Variablen die man in der jsonl Datei selbst anlegt.
In dem Fall kennt man auch die IDs.
Sobald eine Aktion ausgeführt wird (z.b. Druck auf Button oder Änderung eines Sliders) werden die dazugehörigen Variablen erstellt.
Wenn man ggf. nur einen bestimmten Button auswerten möchte kann man die automatische Erstellung an machen und schaltet sie nach dem Drücken auf den Button wieder aus.
Nicht benötigte Variablen können dann auch einfach wieder gelöscht werden :wink:

1 „Gefällt mir“

Die Nummerierung erfolgt mit fortlaufender ID.
Wenn sich die Reihenfolge ändert, ändert sich auch die ID :warning:.
Daher sollte die Funktion nur benutzt werden, wenn man die Objekte händisch erstellt.
(Die Funktion hatte ich als erstes implementiert. Die Funktion ist aber schon fast nicht mehr nötig, da es mit der Verlinkung von Objekten bei den UI-Elementen sehr gut funktioniert)

Hi,

hab eine String Variable mit Text „\uE08E“ angelegt, sollte eigentlich ein Akku Symbol sein.
Im Display wird aber der Text angezeigt, nicht das Symbol.
Beim neu Schreiben der Variable wird es richtig angezeigt. Scheinbar nur beim Displayinhalt schreiben falsch?

Und beim Line Meter wird der value_str nicht beschrieben? Wäre das auch noch möglich?

Edit: Hab da noch was. habe ein Linemeter und ein Label, die liegen eigentlich übereinenander.
Es wird aber immer nur das angezeigt, welches in der Liste oben steht…

Edit2: War auf der zweiten Seite, hab es mit page=1 in den Parametern hinbekommen.

Edit3: Kann es sein, das durch dass übersteuern der page, die Aktualisierung nicht mehr funktioniert?

Mein erstes Display ist fertig und funktioniert echt gut.
Wollte jetzt bei einem weiteren auch mal ein Dropdown testen.

Bekomme aber eine Fehlermeldung.

Fehler beim Übernehmen der Änderungen

Warning: Profil mit dem Namen # existiert nicht in /mnt/data/symcon/modules/.store/firebuster.openhasp/openHASP/module.php on line 127 Warning: Trying to access array offset on value of type bool in /mnt/data/symcon/modules/.store/firebuster.openhasp/openHASP/module.php on line 128 Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in /mnt/data/symcon/modules/.store/firebuster.openhasp/openHASP/module.php:128 Stack trace: #0 /mnt/data/symcon/modules/.store/firebuster.openhasp/openHASP/module.php(43): openHASP->UpdateElements() #1 /-(3): openHASP->ApplyChanges() #2 {main} thrown in /mnt/data/symcon/modules/.store/firebuster.openhasp/openHASP/module.php on line 128 (Code: -32603)

Das Property habe ich noch gar nicht gesehen :slight_smile:
Ich schaue mal was sich da machen lässt.

Du kannst als erstes das Label angeben und wenn das LineMeter zu weit unten ist kannst du dem Label einen negativen Abstand geben und dann rückt das LineMeter nach oben.
Wenn das LineMeter zu früh auf die nächste Seite umbricht kannst du diesem auch einen kleineren oder sogar negativen Abstand geben. Der Seitenumbruch berechnet sich aus dem verbleibenden Platz, dem Abstand und der Standard-Elementgröße. Wenn die Größe in der Liste bei „Parameter überschreiben“ geändert wurde geht das NICHT in die Berechnung ein. Das kann man durch vergrößern oder verkleinern des Abstands aber ausgleichen.

Ja!
Die Elemente kann man nur durch die Page und ID adressieren. Wird das überschrieben, kann das Modul die Variablenänderungen (in beide Richtungen) nicht verknüpfen.
Daher NICHT die Page und ID ändern.
Über den „Abstand“ und „Seitenumbruch“ könnt ihr die Elemente auf der Seite frei bewegen oder auf die nächste Seite bringen. Damit ist eigentlich alles möglich :wink:

1 „Gefällt mir“

Hierbei scheint es noch Fehlermeldungen zu geben.
Hier ist es wichtig, dass jeder Wert auch seine Assoziation hat.
Da ich dem Display für einen Namen leider keinen Wert mitgeben kann muss ich alle Assoziationen von 0 startend aufzählen und diese dann wieder bei einer Wertänderung dem Wahren Wert zuordnen.
Ich hatte das bei mit mit einem Sonos Radionsender erfolgreich versucht.
Gerne mal sagen wie deine Variable aufgebaut ist, bei der der Fehler auftritt. :information_source:

Da ich aber aktuell mal ne Woche im Urlaub bin (und auch kein Display dabei habe :sweat_smile:) kann es sein, dass die Lösung, sofern es dafür eine gibt, noch etwas dauert :wink:

Ja hier besteht ein Unterschied ob die Variable initial oder über ein Event geschrieben wird. Ich schaue mir das mal an :slight_smile:

1 „Gefällt mir“

Habe es z.B. mit einer Integer Variablen und folgendem Profil versucht:

1 „Gefällt mir“

Mit dem Abstand hat es nun super geklappt. Startseite sieht nun fast aus wie vorher (fehlt nur noch der value_str :slight_smile: )und ab Seite zwei kann ich einfach Buttons usw. übers Modul einbauen! :slight_smile:
Danke!

Bei mir steht das Datum aber noch auf 01.01.1970 und Uhrzeit auf 04:30?! Die Settings im Display hab ich kontrolliert und auch mal einen anderen NTP Server hinterlegt.
Woher kommt das Datum denn? Aus Symcon oder aus dem Display selber?

Die Uhrzeit holt sich das Display via NTP
Hat er nach dem Booten auch binnen weniger Sekunden.
Ggf mal die NTP Einstellungen im Display prüfen.