Rolladen über Helligkeitssensor steuern

Allgemeine Fragen zum Thema "Smart Home" und Entscheidungshilfen

Moderator: seppy

Antworten
Ruben
Beiträge: 39
Registriert: 3. Okt 2020 23:06
Answers: 0

Rolladen über Helligkeitssensor steuern

Beitrag von Ruben »

Hallo liebe Mitmenschen,
ich hoffe Ihr könnt einem Anfänger weiterhelfen. Leider bin ich nur am Fragen und fühle mich aktuell nicht in der Lage welche zu beantworten.

Ich habe einen Helligkeitssensor HMIP-SLO,
eingebunden habe ich ihn als Number Item und er gibt mir Werte von 0.00 bis ca. 60,000 aus.

Im Endeffekt möchte ich damit zukünftig meine Rolladen steuern. Hierzu wollte ich den Sensor dann in Abhängigkeit zu Tageszeiten oder dem Astrobinding bringen, sowie eine zeitlichen Schwelle die der Sensor unter bzw. über einem bestimmten Wert liegen soll bevor die Aktion ausgelöst werden soll. Nicht das mal durch ein Auto oder eine Lampe... der Rolladen gleich loslegt.

Aktuell versuche ich dieses Schritt für Schritt aufzubauen um hierbei die Funktionsweisen der Regeln usw. besser zu verstehen.

So habe ich mir zunächst mal ein Switch Item als Proxy angelegt. Dieses soll von dem Helligkeitssensor bei Dunkelheit auf ON und Helligkeit auf OFF gesetzt werden. (Meine Vorstellung ist dieses als abfrage in weiteren Regeln benutzen zu können wie Dunkelheit = ON)

Doch aktuell scheitere ich schon daran, da ich es nicht dazu bekomme seinen Status durch den Helligkeitssensor zu verändern.

Versuchte das ja irgendwie zu begreifen, doch gestaltet sich das recht schwer. Es gibt viele informative Seiten, doch alle bieten Teilinformationen wie man Regeln erstellt, wie diese sich gliedern usw.. Doch als Anfänger der früher mal in seiner Kindheit einfache Programme auf einem c64 geschrieben hat gestaltet sich das als Berg.

Nun ja, so sehen meine Items aus:

Code: Alles auswählen

Number Illumination "Current illumination" {channel="homematic:HmIP-SLO:3014F711A0001F58A9A7149A:000D5BE991FA32:1#CURRENT_ILLUMINATION"}
Switch Proxy_Illumination_Darkness "Dunkelheit" 
hier mal ein Beispiel meiner Regeln die sämtlich nicht funktionieren.

Code: Alles auswählen

rule "Rolladensteuerrung wenn Dunkelheit"
when
   Item Illumination changed 
then
    if((Illumination.state as Number)  < 30
    Proxy_Illumination_Darkness.sendCommand(ON)
else 
    Proxy_Illumination_Darkness.sendCommand(OFF)
end
Ich hoffe einer kann mir bei meinen Problemen etwas helfen.

Benutzeravatar
udo1toni
Beiträge: 15291
Registriert: 11. Apr 2018 18:05
Answers: 246
Wohnort: Darmstadt

Re: Rolladen über Helligkeitssensor steuern

Beitrag von udo1toni »

Wenn Du in das Log von openHAB schaust, solltest Du eine Fehlermeldung sehen, wenn die Rule geladen wird. Es fehlt eine schließende Klammer.

Code: Alles auswählen

rule "Rolladensteuerrung wenn Dunkelheit"
when
    Item Illumination changed 
then
    if((Illumination.state as Number)  < 30) // <- da fehlte die schließende Klammer
        Proxy_Illumination_Darkness.sendCommand(ON)
    else
        Proxy_Illumination_Darkness.sendCommand(OFF)
end
Es gibt da allerdings noch ein, zwei Dinge... denn schon so eine simple Rule kann es in sich haben.
Punkt 1: Der Ausdruck (Illumination.state as Number) erzwingt eine Verwendung des Status vom Item Illumination als Number. Es gibt aber Status, die nicht als Number wiedergegeben werden können. In diesem Fall gibt es eine Fehlermeldung (cannot cast value ... as Number).
Punkt 2: die Regel wird bei jeder Änderung getriggert. Entsprechnd wird immmer wieder entweder ON oder OFF als Befehl gesendet, egal, ob das nun nötig ist oder nicht.
Punkt 3: Eigentlich sollte gar kein Befehl gesendet werden; stattdessen sollte der Status des Items geändert werden.

Eine "bessere" Rule sähe so aus:

Code: Alles auswählen

rule "Rolladensteuerrung wenn Dunkelheit"
when
    Item Illumination changed 
then
    if(!(Illumination.state instanceof Number))        // falls keine gültige Zahl
        return;                                        // Rule abbrechen 
    var sState = OFF as OnOffType                      // Variable sState mit dem Wert OFF vorbelegen
    if((Illumination.state as Number)  < 30)           // Falls Wert unterschritten
        sState = ON                                    // sState auf ON ändern
    if(Proxy_Illumination_Darkness.state != sState)    // Falls aktueller Status von Proxy Item vom Soll abweicht
        Proxy_Illumination_Darkness.postUpdate(sState) // Status ändern
end
Die Rule triggert weiterhin bei jeder Änderung der Helligkeit. Jedoch wird der Status des Proxy Items nur geändert, falls das auch wirklich notwendig ist.

Allgemein denke ich, dass die Helligkeit als Steuerwert für die Rollläden nur bedingt taugt. Es kommt dabei sehr auf den persönlichen Geschmack an. Als Beispiel: Es gibt ein schweres Gewitter, welches für starke Abdunkelung sorgt. Passiert dies am frühen Abend, kann durchaus die vorgegebene Helligkeit unterschritten werden, und zwar durchaus für längere Zeit. Sollen die Läden aber schließen? Das Gewitter zieht schnell weiter, die Helligkeit rutscht wieder über den Grenzwert. Die Rollläden fahren also wieder hoch. eine halbe Stunde später geht die Sonne unter und die Läden fahren erneut.
Zugegeben in unseren Breiten so bald kein Thema: Sonnenfinsternis. Kein Scherz! am 11.08.1999 fuhren in Teilen Deutschlands etliche Systeme mitten am Tag...

Das Astro Binding bietet eigentlich alles, was das Herz begehrt. Man kann die Steuerung rein vom Sonnenstand abhängig machen und dabei auch früheste und späteste Zeitpunkte definieren. Beispiel: bei mir fahren Teile der Rollläden im Morgengrauen, genauer 10 Minuten nach der bürgerlichen Dämmerung, jedoch frühestens um 4:50 Uhr und spätestens um 7:30 Uhr. Die bürgerliche Dämmerung ist der Zeitpunkt, zu dem die Sonne die gedachte Höhenlinie -6° erreicht.
Die eigentliche Steuerung geschieht über eine Rule, die Rule triggert über ein Channel Event, welches wahlweise über Paper UI konfiguriert werden kann (um Offset sowie Unter- und Obergrenze zu setzen). Das ist extrem einfach einzurichten und man muss nur einmalig das Offset dem persönlichen Geschmack anpassen, danach vergisst man die Rule komplett :)
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 8.4.5, LXC)

Ruben
Beiträge: 39
Registriert: 3. Okt 2020 23:06
Answers: 0

Re: Rolladen über Helligkeitssensor steuern

Beitrag von Ruben »

Hallo udo1toni,

erstmal ganz herzlichen dank für deine Mühen. Damit meine ich nicht nur die Hilfestellungen die Du mir bislang gegeben hast. Beim durchstöbern des Forums finden sich Deine Antworten auf Fragen anderer ja übermäßig häufig wieder. Das ist schon einiges an Hilfsbereitschaft die Du hier an den Tag legst welches mich sehr beeindruckt!!!
Danke dafür!

So habe über das Astrobinding etwas nachgelesen und denke dass ich das mal probieren werde. Dafür gibt es ja schon zahlreiche Forenbeinträge und Tutorials mit denen ich mir etwas zusammenbetteln können sollte. (Wobei sicher bin ich mir da bei weitem nicht)

Jedenfalls habe ich in einem Anderen Beitrag in dem Du auch Hilfestellung gegeben hast eine Buchempfehlung zu OH2 gefunden und mir gleich mal bestellt. Hoffe das ich damit etwas schlauer werde.

Habe noch eine unglaublich große Menge Fragen, doch könnte mir die ganzen Antworten garnicht merken können.
Dabei sind es nicht nur die Regeln, wie sie sich aufbauen usw. sondern scheinbar auch das zusammenwirken (und wie sie das tun) mit Skripten usw.

Vielleicht hast Du noch ein Tipp für ein paar Seiten wo man sich in die Materie bzgl. der Programmierung von Rules etwas einlesen könnte. Finde irgendwie keine passenden Seiten aus denen ich schlau werde.

So jetzt nochmals zurück zu meinem (Post)Problem.
Ich bekomme es einfach nicht zum laufen! weder mit meiner ursprünglichen Rule noch mit der genannten Alternative. Mein Switch bleibt beharrlich stur auf Off stehen.

In einem Vorschlag habe ich die Klammer ersetzt, doch schaltet sie den Switch nicht auf On

In dem alternativen und programmlicht besseren Vorschlag erhalte ich eine Fehlermeldung und habe hierfür keine Lösung gefunden. Ich habe in der betreffenden Zeile auch den betreffenden Fehlerteil einfach mal raus genommen, dann ist der Fehler zwar weg, doch funktioniert es dennoch nicht.

Code: Alles auswählen

rule "Rolladensteuerrung wenn Dunkelheit"
when
    Item Illumination changed 
then
    if(!(Illumination.state instanceof Number))        // falls keine gültige Zahl
        return;                                    			    // Rule abbrechen 
    var sState = OFF as OnOffType       		   // In dieser Zeile kommt die Fehlermeldung!
    if((Illumination.state as Number)  < 30)           // Falls Wert unterschritten
        sState = ON                                 		   // sState auf ON ändern
    if(Proxy_Illumination_Darkness.state != sState)    // Falls aktueller Status von Proxy Item vom Soll abweicht
        Proxy_Illumination_Darkness.postUpdate(sState) // Status ändern
end
Der angezeigte Fehler lautet:
Unnecessary cast from OnOffType to OnOffType(org.eclipse.xtext.xbase.validation.IssueCodes.obsolete_cast)
und sagt ja das ich den Typ nicht extra festlegen muss.

Doch der Switch wird einfach nicht auf On geschaltet. Allerdings ist die Helligkeit auch in den Abendstunden bei 0,00. Entsprechend wird die Rule vielleicht aktuell nicht getriggert.

Und noch eine Frage, die allerdings VSC betrifft.
Ich habe das Problem beim Schreiben des Codes kann ich ganz häufig keine Zeichen hinein bringen, etwas löschen usw.
Das Navigieren mit den Curser funktioniert dann manchmal, doch markiert dann eher Teile des Textes bzw. ihn ganz.
Enter springt er die Zeilen hinunter, doch legt keine neue an.
Habe jetzt den weg gefunden mehrfach cccc einzugeben, nach dem 4 oder 4 mal löscht er zwar die Zeile in der ich bin und ersetzt sie mit c, welches über Rückgängig wieder herzustellen geht und dann kann ich schreiben.
Denke nicht das VSC nen defekt hat, eher das ich in eine Arbeitserleichterung hinein rutsche, wie auch immer, die ich nicht benennen kann und nicht weiß wie man da wieder heraus kommt.
Vielleicht auch hierzu eine Idee?

Danke und Gruß

Benutzeravatar
udo1toni
Beiträge: 15291
Registriert: 11. Apr 2018 18:05
Answers: 246
Wohnort: Darmstadt

Re: Rolladen über Helligkeitssensor steuern

Beitrag von udo1toni »

Also, ich möchte behaupten, dass es sich nicht um eine Fehlermeldung handelt, sondern vermutlich eher um eine Warnung. Ich war mir nicht sicher, ob das Casting notwendig ist. Du kannst das as OnOffType einfach weg lassen, wenn openHAB sagt, dass es eh schon OnOffType verwendet.

Was das Problem mit VSCode betrifft, könnte es sein, dass LSP nicht so richtig funktioniert. Leider gibt es da verschiedene Möglichkeiten. Hast Du in VSCode das openHAB Plugin korrekt konfiguriert? Du kannst testweise mal LSP und REST abschalten (in der settings.json openhab.useRestApi und openhab.remoteLspEnabled auf false setzen), wenn es dann imer noch zu Verzögerungen kommt, ist die VSCode Installation irgendwie kaputt. Wenn danach die Verzögerung weg ist, gibt es ein Kommunikationsproblem mit Deinem openHAB Server.
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 8.4.5, LXC)

Ruben
Beiträge: 39
Registriert: 3. Okt 2020 23:06
Answers: 0

Re: Rolladen über Helligkeitssensor steuern

Beitrag von Ruben »

Hallo udo1toni,
ob es richtig konfiguriert ist weiß ich nicht? Habe das was ich in Tutorials gesehen habe so wie angegeben eingestellt. Aktuell steht dieses bei mir in der Settings.json

Code: Alles auswählen

{
    "openhab.useRestApi": true,
    "openhab.host": "192.168.178.11",
    "openhab.port": 8080,
    "workbench.activityBar.visible": true,
    "diffEditor.ignoreTrimWhitespace": false,
    "editor.codeActionsOnSave": null
}
ich kann ja damit arbeiten, wenn auch etwas umständlich.

Vielleicht der Falsche Blog, doch wollte jetzt nicht noch ein Thema aufmachen zumal es ja schon einige zum Astrobinding gibt, doch da habe ich nichts passendes gefunden.
Denn ich wollte deinen Vorschlag das Astrobinding zu verwenden, versuchen mit einem meiner Rolladen umzusetzen. Leider ergebnislos, er fährt den Rolladen nicht :-(
Ich bin mit den verwendeten Chanel auch nicht ganz zufrieden die ich hier verwende. Starttime und endtime sind entweder zu früh oder zu spät. Jetzt hatte ich gedacht entweder von der Dauer ein drittel auf die Startzeit zu rechnen, doch überfordert dieses mich total wie dieses berechnet werden könnte.
Daher dachte ich an den Azimuth, den ich auf 9 Grad einstellen wollen würde zum Fahren des Rolladens. Wenn es mal funktioniert würde ich alle die es betreffen soll in eine Gruppe packen wollen.
hast Du nochmal einen Tipp für mich wie ich das richtig gestalten könnte?
Hier meine aktuelle Regel die ich versuche zu verwenden.

Code: Alles auswählen

rule "Nautischer Sonnenaufgang WZ Rolladen auf"
when 
    Channel "astro:sun:local:nauticDawn#start" triggered START
then
    EG_WZ_Shutter_Set.sendCommand(100)
end

rule "Nautischer Sonnenuntergang WZ Rolladen zu"
when 
    Channel "astro:sun:local:nauticDawn#start" triggered START
then
    EG_WZ_Shutter_Set.sendCommand(0)
end
Setzte mich gleich mal mit der Buchempfehlung aus dem anderen Thema hin und werde versuchen mich zu bilden.

Benutzeravatar
udo1toni
Beiträge: 15291
Registriert: 11. Apr 2018 18:05
Answers: 246
Wohnort: Darmstadt

Re: Rolladen über Helligkeitssensor steuern

Beitrag von udo1toni »

Du benutzt ja auch den falschen Channel :)

Du kannst nicht einfach irgendeinen Channel angeben, sondern ausschließlich Range Event Channels. Du kannst diese Channel daran erkennen, dass sie in Paper UI keinen blauen Kreis (mit kleinem weißem Kreis) sondern einen grauen Kreis mit dem Buchstaben R haben. Die Channel UIDs enden alle mit #event. Jeder dieser Channel triggert jeweils START, sobald die Sonne die gedachte Linie berührt und END, sobald sich die Sonne wieder von der Linie löst.
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 8.4.5, LXC)

Antworten