Rollladensteuerung mit Lichtsensor HM-Sen-LI-O

Kabellose und kabelgebundene Sender und Empfänger der klassischen Homematic-Serie

Moderator: Co-Administratoren

manfredh
Beiträge: 4155
Registriert: 09.09.2012, 10:41
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 78 Mal
Danksagung erhalten: 301 Mal

Re: Rollladensteuerung mit Lichtsensor HM-Sen-LI-O

Beitrag von manfredh » 06.06.2017, 13:34

rain hat geschrieben:Danke, Manfred. Bis einschließlich "4. Ende des Programmlaufs und warten auf erneuten Trigger." hatte ich bereits alles verstanden.
Sicher, schau'n mer mal. :D
rain hat geschrieben: Meine Frage war eine andere. Der Screenshot ist von Dir. Ich habe den von Seite 1 kopiert. Ich verstehe nicht (und genau das war meine Frage), warum beim ersten / oberen DANN auf SONNE gestellt wird (und nicht auf Schatten).
Aahh, jetzt, ja - das war ein (altes) Programm von mir... :P
Da hatte ich den Sonnensensor noch an einem 14/7 wired Modul angeschlossen. Das hat mir Werte geliefert, die umgekehrt zur Helligkeit verliefen. >1000 war Nacht, <30 war heller Sonnenschein - also je heller, desto kleiner der Wert.
Du musst natürlich deinen Sonnensensor erst mal beobachten und feststellen, welche Werte du nehmen musst.

Abgesehen davon ist das Programm zu einer Zeit entstanden, als mir die Logik der Programme noch nicht so klar war, wie heute. Es gibt da also (unabhängig von den Schwellenwerten für Sonne und Schatten, die du nach deinem Sonnensensor richten musst) Optimierungspotenzial. Wieder mal Programmlogik:

Ich hatte ja weiter oben beschrieben, dass es passieren kann (Sonne vor 7 Uhr und dann den ganzen Tag dauerhaft), dass das Programm danach nicht mehr getriggert wird. deshalb würde ich entweder
- die beiden Zeilen für den Wert des Sonnensensors auf "bei Aktualisierung auslösen" stellen. Damit triggerst du das Programm bei jeder Änderung / Aktualisierung des Helligkeitswertes. Hier unkritisch, weil nur eine SV geändert bzw. mit dem gleichen Wert überschrieben wird. Aber vorsicht: wenn du mit diesem Programm z.B. direkt Aktoren ansteuern würdest, würden die bei jedem Durchlauf angesteuert werden, obwohl sie bereits den Zielzustand haben -> Dutycycle!
oder
- die beiden Zeitfenster auf "auslösen bei Änderung" stellen. Damit erzwingst du (unter anderem) um 7 und um 7.05 Uhr einen erneuten Programmlauf, der ggfls. die Variable umschaltet, wenn die Sonne bereits vorher schien.
rain hat geschrieben: Korrekt wäre: WENN Wert < 30, DANN Sonne sofort Schatten. Oder?
Ja, wenn < 30 wirklich Schatten wäre. War bei meinem Sensor eben nicht der Fall.
Es gibt 10 Arten von Menschen: solche die Binärcode verstehen und solche, die ihn nicht verstehen.

rain
Beiträge: 4
Registriert: 03.06.2017, 18:34

Re: Rollladensteuerung mit Lichtsensor HM-Sen-LI-O

Beitrag von rain » 06.06.2017, 19:47

Gut, dann sind wir uns ja einig. :)

Ich hatte parallel schon ein anderes Programm nach Foren-Vorbild gebastelt; wollte aber trotzdem wissen, ob am Programm oder an meinem Kopf etwas schief läuft. :lol:
Danke für Deine Erklärungen und Mühe!
Rain

Edit: Falls es jemanden interessiert, habe ich einen Screenshot angefügt (wie gesagt, ist von weiter vorn "geklaut").
sonne.JPG

Josl
Beiträge: 90
Registriert: 10.07.2016, 13:49
Wohnort: Niederbayern
Danksagung erhalten: 8 Mal

Re: Rollladensteuerung mit Lichtsensor HM-Sen-LI-O

Beitrag von Josl » 12.08.2017, 12:52

Hardcopy 3.docx
Daten HM-Sen-LI-O
(424.22 KiB) 303-mal heruntergeladen
Hardcopy 2.docx
Programm "Helligkeit Mittelwert"
(384.37 KiB) 297-mal heruntergeladen
Hardcopy 1.docx
Systemvariable "Mittelwert Helligkeit"
(340.25 KiB) 265-mal heruntergeladen
In der Vergangenheit habe ich verschiedene Vorschläge aus dem Forum - soweit sie ohne Scripterstellung auskamen - bei mir ausprobiert. Dabei haben sich zwar immer Verbesserungen ergeben; ein für mich befriedigendes Ergebnis kam aber nie heraus.
Deshalb bin ich wieder auf meinen bereits eingangs geäußerten Gedanken zurückgekommen, beim HM-Sen-LI-O nicht nur den Momentanwert, sondern auch den Durchschnittswert aus einer Anzahl (n) von Einzelwerten darzustellen.
Dadurch würden die Helligkeitsspitzen in beide Richtungen abgefangen werden.
Dies bedeutet leider die Erstellung eines Scripts, wofür mir immer noch die Grundlagen fehlen. Daher bin ich auch nicht in der Lage, die im Forum unter "gleitender Mittelwertbildung" dargestellten Lösungen auf meine Situation zu übertragen.
Eine Beschäftigung mit der HomeMatic Script Dokumentation hat mir aber gezeigt, dass auch ein intensiverer Einstieg mir möglicherweise nicht zu den notwendigen Fähigkeiten verhelfen würde.
Ich hoffe deshalb, aus dem Forum heraus ein Script zu bekommen, dass ich nur über "kopieren und einfügen" verwenden könnte. Dafür bitte ich um Verständnis!
Meine Vorbereitungen für die Scriptanwendungen sehen wie folgt aus:
1. Erstellung der Systemvariablen "Mittelwert Helligkeit" mit Zuordnung zum HM-Sen-LI-O (Anhang 1) und
2. des Programms "Helligkeit Mittelwert" zur zyklischen Auslösung des Scripts (Anhang 2)

Die Daten des Lichtsensors HM-Sen_LI-O sind im Anhang 3 dargestellt.

Herzlichen Dank im Voraus!!
Josl

Josl
Beiträge: 90
Registriert: 10.07.2016, 13:49
Wohnort: Niederbayern
Danksagung erhalten: 8 Mal

Re: Rollladensteuerung mit Lichtsensor HM-Sen-LI-O

Beitrag von Josl » 13.08.2017, 18:45

Hallo Forenmitglieder,

unglaublich - es ist mir geglückt, das Script selbst hinzubekommen. Der entscheidende Punkt war das Fehlen einer zweiten Systemvariablen, in die die jeweils aktuellen Lichtwerte eingelesen werden.

Den entscheidenden Hinweis habe ich hanan zu verdanken, der alle Posts zur gleitenden Mittelwertberechnung sehr verständlich zusammengefaßt hat.

Danke an alle, die sich bereits Gedanken/Mühen in diesem Zusammenhang gemacht haben.

Josl

olpe
Beiträge: 7
Registriert: 06.09.2017, 13:45

Re: Rollladensteuerung mit Lichtsensor HM-Sen-LI-O

Beitrag von olpe » 06.09.2017, 13:49

Guten Tag Josl,

vielleicht würdest du uns nun deine Lösung vorstellen. Dann hätten auch andere Mitglieder etwas davon?
Ich denke, dass die Problemstellung für viele die gleiche ist.

Auch ich bin absoluter Neuling in der Homematic-Welt.

Viele Grüße

Josl
Beiträge: 90
Registriert: 10.07.2016, 13:49
Wohnort: Niederbayern
Danksagung erhalten: 8 Mal

Re: Rollladensteuerung mit Lichtsensor HM-Sen-LI-O

Beitrag von Josl » 11.09.2017, 17:45

Hallo olpe,

deinem Wunsch komme ich gerne nach. Momentan finde ich dazu aber keine Zeit, da ich urlaubsmäßig weit von zu Hause unterwegs bin.
Ich verspreche dir aber eine ausführliche Beschreibung meines Lösungsweges, die dann auch für Scriptanfänger nachvollziehbar sein sollte. Das wird allerdings frühestens nächste Woche der Fall sein!
Bis dahin

Josl

Josl
Beiträge: 90
Registriert: 10.07.2016, 13:49
Wohnort: Niederbayern
Danksagung erhalten: 8 Mal

Re: Rollladensteuerung mit Lichtsensor HM-Sen-LI-O

Beitrag von Josl » 19.09.2017, 16:29

Hallo olpe,

wie versprochen werde ich dir anschließend meinen Lösungsweg für Darstellung des Helligkeitsmittelwertes im Lichtsensor HM-Sen-LI-O darstellen.
Ich habe mich um eine einfache aber detaillierte Darstellung bemüht, weis aber aus eigener Erfahrung, dass dies trotzdem auf der anderen Seite nicht unbedingt so ankommt. Was für einen einfach erscheint, kann für einen anderen ein unlösbares Problem sein. Deshalb: wenn irgendwo Unklarheiten aufkommen - nachfragen!

Also ran an die Arbeit!

Anzeige des gleitenden Mittelwertes aus einer Anzahl (n) von Einzelwerten im Helligkeitssensor HM-Sen-LI-O

Dazu werden zwei Systemvariablen und ein Ausführungsprogramm benötigt, deren Namen im Homematicsystem sich nicht wiederholen dürfen. Nachfolgend benutze ich die von mir verwendeten Namen, die natürlich entsprechend der eigenen Situation verändert werden können. Vgl. dazu auch meine docx-Anhänge im vorangegangenen Thread. Achtung: diese Namen kommen auch im Script vor und müssen dort dann auch angepasst werden!

Zunächst zwei Systemvariablen anlegen (Einstellungen/Systemvariable/Neu):

1. "Mittelwert Helligkeit"
Variablentyp: Zahl
Werte: Minimalwert 0, Maximalwert 200.000,
Maßeinheit: Lux,
mit Kanalzuordnung: Sensornamen eintragen (bei mir „Helligkeit 100kLux“)

Dadurch wird erreicht, dass in der WebUI-Ansicht des Lichtsensors ein weiteres Anzeigefeld mit der Bezeichnung „Mittelwert Helligkeit“ erscheint. Wert (zunächst) 0.
Damit dieses Anzeigefeld mit Werten gefüllt werden kann, benötigt man die nächste Systemvariable, von mir genannt

2. "Helligkeit Liste"
Variablentyp: Zeichenkette
Maßeinheit: Lux
ohne Kanalzuordnung!

Jetzt einmal folgenden Skript unter "Skript testen" durchlaufen lassen, damit die Variable „Helligkeit Liste“ mit allen 8 Werten gefüllt wird.
Diese Funktion erreicht man über: Programme und Zentralenverknüpfung/Script testen

! Liste initialisieren
integer n = 8;
string x = dom.GetObject("Helligkeit 100kLux").DPByHssDP("LUX").Value().ToString(1);
string list = x;
integer i = 1;
while(i < n)
{list = list#", „#x;
i = i + 1;
}
dom.GetObject("Helligkeit Liste").State(list);


Danach werden wahrscheinlich 8 gleiche Werte eingelesen. Dies ist jedoch ohne Bedeutung, da durch das nachfolgend anzulegende Programm die jeweils aktualisierten Lichtwerte übernommen und gewichtet werden. Mit jedem neuen Lichtwert nähert sich der im Lichtsensor angezeigte „Mittelwert Helligkeit“ seinem richtigen Mittelwert an.

3. Scriptprogramm "Helligkeit Mittelwert"

Bedingung: Wenn/Geräteauswahl/Helligkeit 100kLux/bei Helligkeit im Wertebereich von 0.00 Lux bis kleiner 200000.00 Lux/bei Aktualisierung auslösen
Aktivität: Script/hier das nachfolgende Script über kopieren/einfügen und über ok beenden:

! gleitender Mittelwert über n Werte
! Programm muss zyklisch per Gerätemodul ausgelöst werden

! Konstante: Anzahl Werte in der Liste
integer n = 8;

! Lokale Variablen
string list; ! Messwertliste
integer len; ! Element-Länge
real s = 0.0; ! Summe

! Werte einlesen und verschieben
list = dom.GetObject("Helligkeit Liste").Value();
len = list.StrValueByIndex(",",0).Length() + 1;
list = list.Substr(len, list.Length() - len);

list = list#","#dom.GetObject("Helligkeit 100kLux").DPByHssDP("LUX").Value().ToString(1);
dom.GetObject("Helligkeit Liste").State(list);

string summand;
foreach(summand, list.Split(","))
{s = s + summand.ToFloat();
}

! Mittelwert in Systemvariable schreiben
dom.GetObject("Mittelwert Helligkeit").State(s / n);



Das Script überschreibt nun bei jeder Lichtwertaktualisierung nacheinander die beim „manuellen“ Durchlauf eingelesenen Werte. Nach der 8. Aktualisierung ist der Mittelwert richtig.
Sollte dieser im Einzelfall aus mehr oder weniger Einzelwerten gewünscht sein, ist dies durch Abändern von integer n = ?; leicht möglich. Damit diese Änderung wirksam wird, war zu mindestens bei mir der eingangs beschriebene manuelle Scriptdurchlauf notwendig.

Abschließend kann ich nur sagen, dass ich nunmehr mit meiner Rollladensteuerung endlich zufrieden bin. Zusammen mit einem Temperatursensor kann ich dann z. B. bei hohen Außentemperaturen und großer Helligkeit die Rollladen auf der Sonnenseite schließen. Diese fahren dann nicht mehr hin und her, wenn die Sonne dicke Quellwolken durchläuft und der Lichtwert dabei auf unter 20.000 Lux absinkt. Der muss dann schon mehrfach so tiefe Werte erreichen – dann ist aber auch das Öffnen der Rollos geboten.

Viel Erfolg bei der eigenen Umsetzung!
Josl

Benutzeravatar
Moonrider
Beiträge: 66
Registriert: 25.08.2017, 13:17

Re: Rollladensteuerung mit Lichtsensor HM-Sen-LI-O

Beitrag von Moonrider » 19.12.2017, 09:12

Hallo Josl,

das hört sich nach dem an was ich suche. Ich werde es mal ausprobieren. Hast du schon erfahrungen nach ca. 5 Monaten ? Läuft alles wie geplant, oder hast du noch Änderungen vorgenommen. Auch ich bin Homeatic Ahnungsloser und versuche meine Rollläden so einfach wie möglich und sicher zu steuern.
So long

Marcus

Benutzeravatar
Gelegenheitsbastler
Beiträge: 586
Registriert: 15.10.2017, 07:29
Hat sich bedankt: 14 Mal
Danksagung erhalten: 41 Mal

Re: Rollladensteuerung mit Lichtsensor HM-Sen-LI-O

Beitrag von Gelegenheitsbastler » 19.12.2017, 12:20

Ich finde den Lösungsansatz ebenfalls sehr interessant, weshalb ich versucht habe ihn in mein RaspberryMatic einzubauen. Leider scheitert es bei mir an Punkt 2. Da scheint noch ein Bug zu sein. Die Ausgabe beim Durchlauf des Scriptes lautet:

Code: Alles auswählen

Error 1 at row 6 col 87 near ^").State(list);
Error 1 at row 6 col 87 near ^").State(list);
Parse following code failed:
integer n = 8;
string x = dom.GetObject("Lichtsensor West").DPByHssDP("LUX").Value().ToString(1);
string list = x;
integer i = 1;
while(i < n)
{list = list#", %u201E#x;
i = i + 1;
}
dom.GetObject("Helligkeit_Liste").State(list);
Da bei der Begriffswahl "Helligkeit Liste" ebenfalls eine Fehlermeldung kam, habe ich die SV in "Helligkeit_Liste" umbenannt. Danach kam zumindest der Fehler nicht mehr.

Ich nehme an, dass die aktuelle Fehlermeldung mit den Anführungsstrichen zusammen hängt. Ändere ich diese von "unten" nach oben, ist zwar keine Fehlermeldung mehr zu sehen, aber es werden auch keine Werte in die SV eingetragen. Irgend etwas scheint da also nicht so zu laufen, wie es soll.

Aber da auch ich zu den Softwareanalphabeten gehöre, habe ich keine Ahnung ob und wie man das Problem beheben könnte. Vielleicht könnte einer der Wissenden aushelfen?

edit:
Hier noch das, was ich gemacht habe:
Helligkeit_Liste.png
Helligkeit_Mittelwert.png
Helligkeit Mittelwert.png
Das Script lautet bei mir:

Code: Alles auswählen

! gleitender Mittelwert über n Werte
! Programm muss zyklisch per Gerätemodul ausgelöst werden

! Konstante: Anzahl Werte in der Liste
integer n = 8;

! Lokale Variablen
string list; ! Messwertliste
integer len; ! Element-Länge
real s = 0.0; ! Summe

! Werte einlesen und verschieben
list = dom.GetObject("Helligkeit_Liste").Value();
len = list.StrValueByIndex(",",0).Length() + 1;
list = list.Substr(len, list.Length() - len);

list = list#","#dom.GetObject("Lichtsensor West").DPByHssDP("LUX").Value().ToString(1);
dom.GetObject("Helligkeit_Liste").State(list);

string summand;
foreach(summand, list.Split(","))
{s = s + summand.ToFloat();
}

! Mittelwert in Systemvariable schreiben
dom.GetObject("Helligkeit_Mittelwert").State(s / n);
Das Komplizierteste an der Hausautomatisation ist der WAF.™ ​

Übersicht meiner Projekte


RaspberryMatic 3.47.22.20191026 auf Raspberry Pi 3B mit HomeMatic Funkmodul von ELV und RTC

Etliche selbst gebaute Aktoren und Sender

Josl
Beiträge: 90
Registriert: 10.07.2016, 13:49
Wohnort: Niederbayern
Danksagung erhalten: 8 Mal

Re: Rollladensteuerung mit Lichtsensor HM-Sen-LI-O

Beitrag von Josl » 19.12.2017, 17:34

Hallo Moonrider, hallo Gelegenheitsbastler,

auch für mich war der Weg zum funktionierenden Script lang und mühselig. Letztendlich habe ich es für meine Konfiguration mit etwas Grundlagenstudium und Anleihen aus Forenbeiträgen hinbekommen.
Der Lichtsensor ist mit dem Erfassen eines mittleren Helligkeitswertes für die Rollladensteuerung die Lösung aller meiner vorherigen Probleme: nunmehr führt auch eine starke Quellbewölkung bei ansonsten starker Sonneneinstrahlung nicht mehr zum ständigen Hin- und Herfahren der Rollladen.

Das Script an sich habe ich nicht mehr verändert. Es läuft von Anfang an bis heute ohne Fehler; erst auf der CCU2 und kurze Zeit später auf dem Raspi PI3.
Anpassungsbedürftig war für meine Gegebenheiten lediglich die Anzahl der Einzelwerte für die Mittelwertbildung.
Von 6 - 12 Einzelwerten habe ich dabei alles ausprobiert. Das Script hat alle diese Anpassungen ohne Fehlermeldung angenommen. Daher glaube ich, dass mein Script an sich in Ordnung ist.

Fehler könnten natürlich noch in der Übertragung in meinen Beitrag passiert sein. Dies werde ich als erstes einmal überprüfen, wenngleich ich es im wesentlichen durch kopieren eingestellt habe.

Leider fehlt mir momentan die dazu notwendige ruhige Zeit. Vor Weihnachten ist es anscheinend immer das Gleiche!
Zwischen den Jahren wird es hoffentlich etwas ruhiger. Dann kann ich mich auch um die individuellen Probleme von Gelegenheitsbastler kümmern.

Bitte um Verständnis - allen ein frohes Weihnachtsfest!

Josl

Antworten

Zurück zu „HomeMatic Aktoren und Sensoren (klassisch)“