Diese Modul stellt die Anbindung an ein Touch Display zur Verfügung. Das Modul benötigt die OFM-SmartHomeBridge für die Gerätedefinitionen.
- 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
- 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
Die Anwenderdokumentation ist hier zu finden.
| Prozessor | Status | Anmerkung |
|---|---|---|
| RP2040 | Beta | |
| RP3050 | Beta | |
| ESP32 | Untested |
Getestete Hardware:
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;
}
}- 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.