Zitat von SteffenRi
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
OpenKNX ShutterController: Jalousiensteuerung - Schatten, du machen sollst!
Einklappen
X
-
Dann bin ich evtl falsch abgebogen und habe etwas übersehen.Hab gerade nochmal die Applikationsbeschreibung gelesen und für mich klingt es so als wäre das nur ein Wert und nicht mehrere Werte. Vielleicht kann mich jemand aufklären. Ich wäre euch sehr dankbar.Zitat von Fidelis Beitrag anzeigenWenn ich gedanklich nicht gerade komplett falsch abgebogen bin, dann ist das alles in dem Gerät vorhanden. Von "extern" benötigst du rein gar nichts.
image.png
Kommentar
-
Da passt was grob nicht zueinander. S ist bei mir aufn Kompass bei 180°Zitat von SteffenRi Beitrag anzeigenHimmelsrichtung Azimut-Bereich Osten 30° – 150° Südosten 75° – 195° Süden 120° – 140° Südwesten 165° – 285° Westen 210° – 330° ----------------------------------------------------------------------------------
"Der Hauptgrund für Stress ist der tägliche Kontakt mit Idioten."
Albert Einstein
Kommentar
-
Ich geb dir recht.... ich habe die Himmelsausrichtungen blind aus der Applikationsbeschreibung des ShutterController auf GitHub übernommen. Siehe GitHub im Kapitel Beschattungsmodus N unter Himmelsrichtung (Azimut).Zitat von gbglace Beitrag anzeigen
Da passt was grob nicht zueinander. S ist bei mir aufn Kompass bei 180°
Kann ja problemlos angepasst werden aber ändert an der Berechnung wenig.Zuletzt geändert von SteffenRi; 30.01.2026, 17:41.
Kommentar
-
Du kannst auch direkt auf Abschnitt verlinken, wenn Du mit der Maus links neben der Überschrift auf der Kette das Ziel übers Kontextmenü kopierst.Zitat von SteffenRi Beitrag anzeigenIch geb dir recht.... ich habe die Himmelsausrichtungen blind aus der Applikationsbeschreibung des ShutterController auf GitHub übernommen. Siehe GitHub im Kapitel Beschattungsmodus N unter Himmelsrichtung (Azimut).
Ich gehe davon es sollte 120°-240° (Himmelsrichtung +/- 60°) heißen mgeramb ?Zitat von gbglace Beitrag anzeigenDa passt was grob nicht zueinander. S ist bei mir aufn Kompass bei 180°
Kommentar
-
Danke für den Hinweis.Zitat von coko Beitrag anzeigenDu kannst auch direkt auf Abschnitt verlinken, wenn Du mit der Maus links neben der Überschrift auf der Kette das Ziel übers Kontextmenü kopierst.
Kommentar
-
Ja, sorry sollte so aussehen:Zitat von gbglace Beitrag anzeigenDa passt was grob nicht zueinander. S ist bei mir aufn Kompass bei 180°
- Osten von 30° bis 150°
- Südosten von 75° bis 195°
- Süden von 120° bis 240°
- Südwesten von 165° bis 285°
- Westen von 210° bis 330°
Zitat von coko Beitrag anzeigench gehe davon es sollte 120°-240° (Himmelsrichtung +/- 60°) heißen
Ja, genau
- Likes 1
Kommentar
-
Ich hatte mir gestern auch mal den Aufbau des OFM per VS Code angeschaut und scheinbar wird tatsächlich nur ein globales KO für die Helligkeit herangezogen und verschiedene Fassaden sind nicht vorgesehen. Ist hier für die Zukunft etwas geplant mgeramb ?Zitat von henfri Beitrag anzeigenIch habe in der Dokumentation nichts zu Fassaden gefunden.
Hab ich was übersehen?
Kommentar
-
Was würde es brauchen? 4 global KO von denen man im Kanal eines auswählen kann oder müsste es wirklich pro Kanal ein eigenes KO für die Helligkeit sein?Zitat von SteffenRi Beitrag anzeigenIst hier für die Zukunft etwas geplan
Kommentar
-
Ich hatte mich die letzten Tage mit der OAM-ShutterController näher beschäftigt und mir die Beschattung näher angeschaut. Kurzum habe ich mich dann am Wochenende entschlossen das OAM um meine gewünschte Funktion zu erweitern. Was dabei raus gekommen ist, seht selbst :-) Die Beta-Version der .knxprod habe ich auf Github hochgeladen. Jegliche Anmerkungen, Verbesserungen und auch Kritik ist willkommen.
Leider habe ich es noch nicht geschafft ein FW-Build (da merkt man das ich eigentlich doch kein Software Entwickler bin 😏) zu erstellen. Evtl. kann mir einer aus dem OpenKNX Team einen kleinen Crashkurs dazu geben dann würde ich nach release das build für alle zur Verfügung stellen. Natürlich nur mit dem Einverständnis des eigentlichen Entwicklers mgeramb.
Was dann noch fehlt ist eigentlich nur die Hardware aus meiner Bestellung bei Ing-Dom und dann kann es auch schon ans testen gehen.
Damit ihr einen Überblick bekommt was ich umgesetzt habe findet ihr hier in einer kleinen Beschreibung.
# Multi-Sensor Helligkeitssteuerung mit Himmelsrichtungen - ShutterController 1.5.0 BETA
### Ausgangssituation
Die bisherige Implementierung der Jalousiesteuerung unterstützt nur einen einzigen Helligkeitssensor für die Beschattungsautomatik. In der Praxis hatte das für mich folgende Nachteile:
- Ein Sensor an der Wetterstation misst zwar mehrere Werte, aber diese müssten über eine externe Logik zu einem globalen Wert zusammengefasst werden.
- Fenster mit unterschiedlichen Ausrichtungen (Nord, Ost, Süd, West) benötigen unterschiedliche Helligkeitsschwellen
- Ein Sensor kann nicht die tatsächliche Sonneneinstrahlung pro Fenster abbilden
### Anforderungen
Mein Konzept sollte folgende Punkte abdecken:
1. Bis zu 4 Helligkeitssensoren unterstützen (Hauptsensor + 3 zusätzliche)
2. Jedem Sensor eine Himmelsrichtung zuordnen (Nord, Ost, Süd, West)
3. Pro Kanal die Behangausrichtung konfigurierbar machen (N, NO, O, SO, S, SW, W, NW)
4. Automatisch den passenden Sensor basierend auf der Behangausrichtung auswählen
5. Bei Zwischenrichtungen (NO, SO, SW, NW) den Maximalwert der beiden benachbarten Sensoren verwenden
### Anwendungsbeispiel:
Ein Haus mit 4 Helligkeitssensoren:
- Sensor 1 (KO 404): Wetterstation Dach → Nord (Referenz)
- Sensor 2 (KO 409): Ostfassade → Ost
- Sensor 3 (KO 410): Südfassade → Süd
- Sensor 4 (KO 411): Westfassade → West
Ein Fenster mit Ausrichtung Südwestprüft automatisch die Sensoren Süd und West und verwendet den höheren Wertfür die Beschattungsentscheidung.
## Konfiguration in der ETS
### 1. Globale Sensor-Konfiguration
ETS_1.jpg
Im Bereich Allgemein wird zunächst die Anzahl der zusätzlichen Sensoren festgelegt:
- 0 = nur Hauptsensor (KO 404) - bisheriges Verhalten
- 1 = Hauptsensor + 1 zusätzlicher Sensor (KO 409)
- 2 = Hauptsensor + 2 zusätzliche Sensoren (KO 409, 410)
- 3 = Hauptsensor + 3 zusätzliche Sensoren (KO 409, 410, 411)
### 2. Himmelsrichtung pro Sensor
ETS_2.jpg
Für jeden aktiven Sensor wird die Himmelsrichtung festgelegt:
- Nord (0°)
- Ost (90°)
- Süd (180°)
- West (270°)
Diese Zuordnung ermöglicht die automatische Sensorauswahl basierend auf der Fensterausrichtung.
### 3. Fenster-/Behangausrichtung pro Kanal
ETS_3.jpg
In jedem Kanal wird die Ausrichtung des Fensters/Behangs konfiguriert:
- **N** (Nord) = 0°
- **NO** (Nordost) = 45°
- **O** (Ost) = 90°
- **SO** (Südost) = 135°
- **S** (Süd) = 180°
- **SW** (Südwest) = 225°
- **W** (West) = 270°
- **NW** (Nordwest) = 315°
Dieser Parameter ist nur sichtbar, wenn:
- Die Auswertung „Helligkeit“ aktiv ist UND
- Mindestens 2 Helligkeitssensoren konfiguriert sind
## Ergänzte Kommunikationsobjekte
| KO-Nr. | Name | DPT | Funktion |
|--------|------|-----|----------|
| 404 | Helligkeitseingang 1 | 9.004 | Hauptsensor|
| 409 | Helligkeitseingang 2 | 9.004 | Zusatzsensor 1 (optional) |
| 410 | Helligkeitseingang 3 | 9.004 | Zusatzsensor 2 (optional) |
| 411 | Helligkeitseingang 4 | 9.004 | Zusatzsensor 3 (optional) |
Die KOs 409-411 werden nur angezeigt,wenn die entsprechende Anzahl Sensoren konfiguriert ist.
## Technische Umsetzung
### 1. XML-Definition (ETS-Applikation)
**ShutterControllerModule.share.xml**
- Neue ParameterTypes: `BrightnessSensorCount`, `BrightnessSensorDirection`, `WindowOrientation`
- Neue ComObjects: KO 409, 410, 411 (Typ: 2 Bytes Float, DPT 9.004)
- Konditionale UI-Logik mit `<choose>/<when>`-Konstrukten
**ShutterControllerModule.templ.xml**
- Kanalparameter `WindowOrientation` mit konditionaler Sichtbarkeit
- Nur angezeigt, wenn: Beschattung aktiv UND ≥2 Sensoren konfiguriert
### 2. C++-Implementierung
**ShutterControllerModule.h**
```cpp
protected:
MeasurementWatchdog _measurementBrightness[4] = {
MeasurementWatchdog(),
MeasurementWatchdog(),
MeasurementWatchdog(),
MeasurementWatchdog()
};
private:
float getBrightnessForOrientation(uint8_t orientation);
```
**ShutterControllerModule.cpp - setup()**
```cpp
// Konditionale Sensor-Initialisierung
if (ParamSHC_HasBrightnessInput && ParamSHC_BrightnessSensorCount >= 0) {
_measurementBrightness[0].begin(/* Sensor 1 */);
}
if (ParamSHC_BrightnessSensorCount >= 1) {
_measurementBrightness[1].begin(/* Sensor 2 */);
}
// ... analog für Sensor 3 und 4
```
**ShutterControllerModule.cpp - getBrightnessForOrientation()**
```cpp
float ShutterControllerModule::getBrightnessForOrientati on(uint8_t orientation) {
// Lade Sensorrichtungen
uint8_t dir1 = ParamSHC_BrightnessSensor1Direction;
uint8_t dir2 = ParamSHC_BrightnessSensor2Direction;
// ...
// Prüfe exakte Übereinstimmung
if (orientation == dir1) return _measurementBrightness[0].getValue();
if (orientation == dir2) return _measurementBrightness[1].getValue();
// ...
// Zwischenrichtungen: Maximum der beiden benachbarten
if (orientation == 1) { // NO
return max(brightnessDirN, brightnessDirO);
}
// ...
}
```
**ModeShading.cpp**
```cpp
// Helligkeitsprüfung in der Beschattungslogik
uint8_t windowOrientation = ParamSHC_CWindowOrientation;
float brightness = /* Berechnung analog zu getBrightnessForOrientation() */;
// Hysterese-Logik
double threshold = max(0., 1000. * ((double) ParamSHC_CShading1BrightnessMin) -
(previousAllowed ? ((double) ParamSHC_CShading1BrightnessHyst) * 1000. : 0));
if (brightness >= threshold) {
// Beschattung erlaubt
}
```
### Logik für Zwischenrichtungen
Die Implementierung berücksichtigt, dass bei Zwischenrichtungen (NO, SO, SW, NW) die Sonne von beiden benachbarten Richtungen einstrahlen kann:
| Fenster | Verwendete Sensoren | Wert |
|---------|-------------------|------|
| N | Nord | Sensor Nord |
| NO | Nord + Ost | max(Nord, Ost) |
| O | Ost | Sensor Ost |
| SO | Süd + Ost | max(Süd, Ost) |
| S | Süd | Sensor Süd |
| SW | Süd + West | max(Süd, West) |
| W | West | Sensor West |
| NW | Nord + West | max(Nord, West) |
Diese Logik stellt sicher, dass die Beschattung aktiviert wird, sobald einerder beiden relevanten Sensoren die Helligkeitsschwelle überschreitet.
### Beispiel:
Konfiguration:
- Sensor 1 (Nord): 10.000 lux
- Sensor 2 (Ost): 15.000 lux
- Sensor 3 (Süd): 70.000 lux
- Sensor 4 (West): 25.000 lux
Fenster Südwest:
- Schwellwert: 35.000 lux
- Verwendete Sensoren: Süd (70k) + West (25k)
- Effektiver Wert: max(70.000, 25.000) = 70.000 lux
- Ergebnis: Schwelle überschritten → Beschattung aktiv ✓
## Geänderte Dateien
### XML (ETS-Applikation)
- `lib/OFM-ShutterControllerModule/src/ShutterControllerModule.share.xml`
- `lib/OFM-ShutterControllerModule/src/ShutterControllerModule.templ.xml`
### C++ (Firmware)
- `lib/OFM-ShutterControllerModule/src/ShutterControllerModule.h`
- `lib/OFM-ShutterControllerModule/src/ShutterControllerModule.cpp`
- `lib/OFM-ShutterControllerModule/src/CallContext.h`
- `lib/OFM-ShutterControllerModule/src/ModeShading.cpp`
- `lib/OFM-ShutterControllerModule/src/ModuleVersionCheck.h` (neu)
### Hilfetexte (Deutsch)
- `src/Baggages/Help_de/SHC-Helligkeitssensoren.md`
- `src/Baggages/Help_de/SHC-Sensor-1-KO-404-Himmelsrichtung.md`
- `src/Baggages/Help_de/SHC-Sensor-2-KO-409-Himmelsrichtung.md`
- `src/Baggages/Help_de/SHC-Sensor-3-KO-410-Himmelsrichtung.md`
- `src/Baggages/Help_de/SHC-Sensor-4-KO-411-Himmelsrichtung.md`
- `src/Baggages/Help_de/SHC-Fenster-Behangausrichtung.md`
## Zusammenfassung
Die Multi-Sensor Helligkeitssteuerung erweitert die Jalousiesteuerung um eine himmelsrichtungsbasierte Beschattungslogik. Durch die Zuordnung von bis zu 4 Sensoren zu den Himmelsrichtungen und die kanalspezifische Fensterausrichtung kann die Beschattung deutlich präziser auf die tatsächliche Sonneneinstrahlung reagieren.
Die Implementierung ist abwärtskompatibel: Bei nur einem Sensor verhält sich die Steuerung wie bisher. Die zusätzlichen Funktionen werden nur bei ≥2 Sensoren aktiviert und in der ETS sichtbar.
Status: Implementierung vollständig, KNXPROD produktionsreif, Firmware-Build ausstehend
P.S.: Bitte steinigt mich nicht falls ich irgendwelche groben Fehler in der ETS Apllikation habe die nicht dem Standard von OpenKNX entsprechen. Ist mein erstes "Projekt" dieser Art. Aber ich werde weiter dran bleiben und evtl. weitere Module entwickeln. Dann hoffentlich mit mehr Erfahrung und Know-How anstatt Try and Error 😀
Zuletzt geändert von SteffenRi; Gestern, 21:34.
- Likes 1
Kommentar
-
Du warst zu spät 😀 Siehe Post #56Zitat von mgeramb Beitrag anzeigenWas würde es brauchen? 4 global KO von denen man im Kanal eines auswählen kann oder müsste es wirklich pro Kanal ein eigenes KO für die Helligkeit sein?
Kommentar
-
Hi SteffenRi,
Deine Änderungen sehen auf den ersten Blick vernünftig aus - tolle Arbeit, vor allem für jemanden, der bisher nichts für OpenKNX entwickelt hat. Wir können gerne einen Crashkurs machen, bei dem ich Dir erkläre, wie Du das auch korrekt bauen kannst. Machen wir per PN aus.
Eine Anmerkung bzw. Bitte habe ich allerdings: Bitte keine .knxprod veröffentlichen. Du wirst sonst den Leuten Probleme mit Updates bereiten und potentiell Versionen veröffentlichen, die mit weiteren Versionen von Michael (mgeramb) kollidieren. Es ist schon volle Absicht bei unserer Infrastruktur, dass man sich die knxprod lokal baut und wir sie nicht ausliefern. Wild kursierende knxprod-Files hinterlassen in der ETS und in der ETS-Projekten Spuren, die der normale ETS-User nicht durchschaut und nicht so einfach wegbekommt.
Gruß, Waldemar
P.S.: Kannst Du bei Dir PN freischalten, damit ich Dich wegen einem Termin kontaktieren kann?
Kommentar
-
Nein. Habe leider noch mit keinem OpenKNX Entwickler Kontakt gehabt damit ich den Workflow verstehe um die FW zu kompilieren😀Zitat von henfri Beitrag anzeigenHast du die Firmware mittlerweile kompiliert und funktioniert es?
Meine Überlegung war wie folgt. Der Mittelwert würde nicht den realen Wert am Fenster wiederspiegeln und wäre evtl. auch träge. Der Max-Wert spiegelt ja die realistische Helligkeit wieder die für das jeweilige Fenster relevant ist. Der Ansatz kann natürlich falsch sein oder es gibt einen besseren aber für den Moment war es der für mich Schlüssigste.Warum hast du dich für das Maximum entschieden und nicht für den Mittelwert?
Ja, hauptsächlich zum debuggen.Hast du KI zu Hilfe genommen?
Zuletzt geändert von SteffenRi; Heute, 08:12.
Kommentar


Kommentar