/OFM-TouchDisplay

Primary LanguageCGNU General Public License v3.0GPL-3.0

OFM-TouchDisplay

Diese Modul stellt die Anbindung an ein Touch Display zur Verfügung. Das Modul benötigt die OFM-SmartHomeBridge für die Gerätedefinitionen.

Release Notes

  • 0.3.1 Firmware Versionsanzeige auf Prog-Seite korrigiert
  • 0.3 Seitenfreigabe Auswertung bei der jeweiligen Seite invertierbar
  • 0.3 Bei Alarm Bildschirmen kann man eine Benutzerspezifischen Statustext hinterlegen
  • 0.3 Alarm Bildschirme haben bei aktiven Alarm einen roten Hintergrund
  • 0.2 Neues Stil "Weiß"
  • 0.2 Hinweise zum USB-Bild Upload in Applikationsberschreibung
  • 0.2 Neue Bilder für geöffnete Jalousien, Rolladen, Markise, Fenster, Türe, Gargagentor
  • 0.2 Neue Schrift "NotoSans-Regular"
  • 0.2 Größere Schriften
  • 0.2 Einstellung ob Telegramme zu "Gehe zur Seite" und "Standardseite" die Anzeige einschalten
  • 0.2 Thermostat: Haupticon zeigt den aktuellen Heizung und Kühlstatus an
  • 0.2 Libary aktualisierung auf LVGL Version 9.3
  • 0.2 Bugfix: Kurze Anzeige der alten Seite beim Seitenumschalten über Telegramme
  • 0.2 Bugfix: Fehlende Icons bei manchen Gerätetypen

Features

  • Unterstützung alle Gerätetypen der OFM-SmartHomeBridge
    • Anzeige von Detailseiten je nach Gerätetype
    • Anzeige von Hauptfunktionsseiten zur Basissteuerung des Gerätes
  • Anzeige von Uhrzeit und Datum
  • Seite mit mehreren Felden, beliebig mit folgenden Funktionen programmierbar:
    • Uhrzeit
    • Datum
    • Geräte-Hauptfunktion
    • Absprung auf andere Seite
  • Seite zum aktivieren des Programmiermodus

Fertige Firmewares

Anwenderdokumentation

Die Anwenderdokumentation ist hier zu finden.

Hardware Unterstützung

Prozessor Status Anmerkung
RP2040 Beta
RP3050 Beta
ESP32 Untested

Getestete Hardware:

Einbindung in die Anwendung

Das OAM muss die OFM-SmartHomeBridge einbinden

In das Anwendungs XML müssen folgend config Werte und die OFM-SmartHomeBridge und OFM-TouchRound aufgenommen werden:

    <op:config name="%BRI_TabName%" value="Geräte" />
    <op:config name="%BRI_TabIcon%" value="home-edit-outline" />
    <op:config name="%BRI_DisplaySettings%" value="1" />
    <op:config name="%BRI_BridgeSettings%" value="0" />
    <op:config name="%BRI_HomeKitSupport%" value="0" />
    <op:config name="%BRI_HueSupport%" value="0" />
    <op:config name="%BRI_NumChannelsDefault%" value="0" />
    <op:config name="%BRI_DefaultType%" value="0" />
    
    <op:config name="%BRI_NumChannels%" value="50" />


    <op:define prefix="BRI" 
              ModuleType="2"
              share="../lib/OFM-SmartHomeBridge/src/SmartHomeBridge.share.xml"
              template="../lib/OFM-SmartHomeBridge/src/SmartHomeBridge.templ.xml"
              NumChannels="%BRI_NumChannels%" 
              KoOffset="600" >
        <op:verify File="../lib/OFM-SmartHomeBridge/library.json" ModuleVersion="%BRI_VerifyVersion%" /> 
    </op:define>

    <op:define prefix="TCH"
        share="../lib/OFM-TouchDisplay/src/TouchDisplay.share.xml"
        template="../lib/OFM-TouchDisplay/src/TouchDisplay.templ.xml"
        ModuleType="14"
        KoSingleOffset="500"
        KoOffset="520"
        NumChannels="50" >
      <op:verify File="../lib/OFM-TouchDisplay/library.json" ModuleVersion="%TCH_VerifyVersion%" />
    </op:define>

In main.cpp muss die OFM-SmartHomeBridge und das OFM-TouchDispay hinzugefügt werden:

[...]
#include "SmartHomeBridgeModule.h"
#include "TouchDisplayModule.h"
[...]

void setup()
{
    [...]
    openknx.addModule(7, openknxSmartHomeBridgeModule);
    openknx.addModule(1, openknxTouchDisplayModule);
    [...]
}

Zur Integration der Display Hardware müssen folgende Funktionen implementiert werden:

  • bool touchIsPressed()
  • void displayInit(uint8_t screenRotation)
  • void touchInit()
  • void backgroundLight(bool on)

Beispiel:

bool touchIsPressed()
{
    return chsc6x_is_pressed();
}

void displayInit(uint8_t screenRotation)
{
    lv_xiao_disp_init(screenRotation);
}

void touchInit()
{
    lv_xiao_touch_init();
}

void backgroundLight(bool on)
{
    digitalWrite(XIAO_BL, on ? HIGH : LOW);
}

Anpassung des Displaydrivers:

Das OFM-TouchDisplay Modul muss zwischen der Touch Erkennung des Displays geschalten werden. Dazu wird die Touch Erkennung in der oben genannten Funktion touchIsPressed dem OFM-TouchDisplay zur Verfügung gestellt. Der Aufruf der Touch Erkennung im Display Modul muss durch den Aufruf touchIsPressedForLgvl() der im OFM-TouchDisplay zur Verügung gestellt wird, aufgerufen werden.

Beispiel lv_xiao_round_screen.h:

extern bool touchIsPressedForLgvl();

#include <Arduino.h>
#include <lvgl.h>
#include <SPI.h>
#include <Wire.h>
[...]

void chsc6x_read( lv_indev_t * indev_driver, lv_indev_data_t * data )
{
    lv_coord_t touchX, touchY;
    if( !touchIsPressedForLgvl() )
    {
        data->state = LV_INDEV_STATE_RELEASED;
    } else {
        data->state = LV_INDEV_STATE_PRESSED;
        touchX = data->point.x;
        touchY = data->point.y;
        chsc6x_get_xy(&touchX, &touchY);
        /*Set the coordinates*/
        if (touchX >= SCREEN_WIDTH) touchX = SCREEN_WIDTH - 1;
        if (touchY >= SCREEN_HEIGHT) touchY = SCREEN_HEIGHT - 1;        
        data->point.x = touchX;
        data->point.y = touchY;
    }
}

Architektur

  • KnxChannel* (z.b. KnxChannelDimmer): KO Behandlung, KNX Businesslogik, ETS Konfiguration
  • *DeviceBridge (z.b. DimmerDeviceBridge): Verbindung zwischen dem KnxChannel und dem Screen (Z.b. KnxChannelDimmer und DimmerScreen)
  • *Pages: Das sind die eigentlichen Seiten die im Display dargestellt werden und entsprechen der Seitenkonfiguration in der ETS. Diese verwenden Screens, das sind die unterschiedlichen Layouts für die Darstellung. Für eine seitenfüllende gerätespezifische Darstellung ist die DetailDevicePage zuständig. Diese verwendet eine Factory um die Verbindung KnxChannel <--> Screen herzustellen.
  • *Screen: Grafisches Layout einer Seite.

Lizenz

GNU GPL v3