NEWS
Rolladensteuerung mit Blockly (Anfänger)
-
Hallo zusammen,
ich möchte gerne mal meine "Anfänger-Rolladen-Steuerung-nach-Jahreszeiten" vorstellen, um durch eure Anmerkungen und Kritik zu lernen
Wie schon erwähnt bin ich Anfänger beimn Smart Home, bei der CCU3 und vor allem beim Skripten (für meinen Teil mit Blockly).
Ich wollte erreichen, dass meine Rollade Terassenfront morgens hoch fährt, wenn es nicht mehr stock dunkel ist, aber auch noch nicht richtig hell, also ja quasi so in der Dämmerung morgens. Jetzt habe ich draußen eine HmIP Wetterstation und kann die Lichtwerte messen und damit steuern.
Man könnte nun einfach sagen, wenn der Helligkeitswert > x ist, dann fahre die Rollade hoch. Ganz einfache Lösung bzw. auch Programmierung. Ich wollte aber zusätzlich noch andere Bedingungen umsetzen.
1. Rollade fährt hoch, wenn es schon ein bisschen hell ist (die Bedingung von oben)
2. Die Rollade fährt aber zeitlich nicht zu früh hoch, und auch nicht zu spät. Z.B. frühestens um 7:00, spätestens um 8:30, egal ob (1) erfüllt ist oder nicht.
3. Die Programmierung soll das ganze Jahr über funktionieren, Sommer wie Winter und dazwischen.
Mal so als Beispiel: Wenn nur (1) erfüllt wird, dann fährt die Rollade im Sommer um 5:30 hoch und im Winter um 8:15. Das ist mir im Sommer zu früh.
Ich hoffe es war einigermaßen verständlich beschrieben, sonst fragt bitte gerne nach.
Meine Lösung (von der ich aktuell nicht weiß, ob sie immer funktioniert), sieht nun so aus.
In der CCU habe ich eine Variable "Jahreszeit" angelegt als Werteliste mit den Werten Frühling, Sommer, …
Im ioBroker habe ich folgendes Programm geschrieben / zusammen geklickt:
Als JS sieht das so aus:
schedule('{"time":{"exactTime":true,"start":"12:00"},"valid":{"from":"03.01.2019"},"period":{"months":"[3,6,9,12]","dates":"[1]"}}', function () {
if ((new Date().getMonth() + 1) == 3) {
setState("hm-rega.0.2648"/Jahreszeit/, 0);
}
if ((new Date().getMonth() + 1) == 6) {
setState("hm-rega.0.2648"/Jahreszeit/, 1);
}
if ((new Date().getMonth() + 1) == 9) {
setState("hm-rega.0.2648"/Jahreszeit/, 2);
}
if ((new Date().getMonth() + 1) == 12) {
setState("hm-rega.0.2648"/Jahreszeit/, 3);
}
});
Soll also am ersten Tag der Monate März, Juni, September und Dezember um 12 Uhr die Variable entsprechend setzen.
Mit dieser Variable habe ich dann in der CCU folgendes Programm geschrieben:
Das sind jetzt 2 von 4 Blöcken. Für Herbst und Winter gibt es nochmal je einen Block "Sonst-Wenn".
Die Variable Rollade-Richtung wird dabei in Abhängigkeit der Helligkeit von draußen auf hoch (H>6 Lux) bzw. runter gesetzt.
Ist jetzt ein bisschen lang geworden :oops:
Aber mich würde halt mal interessieren, ob ich hier totalen Mist programmiert habe und das ganze auch in 3 Zeilen gelöst werden kann, oder ob das schon eine ganz ordentliche Lösung / Programmierung ist.
Würde mich über Anregungen, Kritik, gerne auch positive Kritik freuen.
-
ich finde es reichlich kompliziert. Ich würde die ganze Logik im iobroker lassen und es mit Astro- Fixzeitsteuerung machen.
Was würde deine Steuerung mit dem Helligkeitssensor bei Gewitter machen?
Mal so als Idee für Rollladen hoch (habe hier gerade kein Blockly)
*frage jeden Tag 00:00:00 ab wann Sonnenaufgang ist
*wenn SA im Zeitfenster 7:00-8:30
- setze Rollladen-hoch-event auf SA-Zeit
sonst wenn Datenpunkt "heute Frei"="nö"
- setze Rollladen-hoch-event auf 7:00
sonst
- setze Rollladen-hoch-event auf 8:30
Ich verwende Sonnenaufgang- und Abenddämmerungsteuerung bisher erst an 2 Rollläden. Wobei es könnte ruhig 30min vor der Abenddämmerung zu fahren. Also werde ich das wohl noch ändern.
Wenn mein Rollladen an der Terrassentür auf elektrisch umgerüstet ist, würde ich gerne noch einen Bewegungssensor auf der Terrasse einsetzen damit der Laden offen bleibt wenn man im Sommer noch länger draußen ist. Oder als Schaltbedingung "warten mit zufahren bis Terrsassenbeleuchtung aus", kostet nix extra und vermutlich praktikabler bei Haustieren.
-
Hallo zusammen,
ich finde das auch reichlich kompliziert.
Ich habe das gleiche Problem mit drei Triggern gelöst:
(Ich steuere die Rollläden mit Variablen, das tut aber hier nichts zur Sache.)
Um 6:00 wird geprüft, ob Sonnenaufgang schon vorbei. Wenn ja, dann Rollos auf.
Zwischen 6:00 und 8:00 öffnen die Rollos bei Sonnenaufgang.
Und um 8:00 öffnen sie spätestens (wenn Sonne nicht schon aufgegangen).
Zusätzlich prüfe ich noch auf Wochenende, Feiertage und Urlaub.
Geht vermutlich noch kompakter, klappt bei mir aber so hervorragend.
Gruß
Oliver
-
Man macht Ihr hier komplizierte Sachen. Ich mach übrigens so ziemlich ähnliche Dinge mit meinen Rollläden und dazu bedarf es nicht mal des IOBrokers oder sonstiger Scripte. Was ich habe, ein billigen Rollladenmotor und ein Shelly2 mit StefanBode Tasmota Fork. Entweder man macht das über den integrierten sehr variablen Timer von Tasmota, oder wenn man Ahnung von den Rueles in Tasmota hat, dann kann man da mit auch so ziemlich alles machen was man möchte. Das ist alles autark, kann aber ohne Probleme so auch direkt über die passenden DPs in VIS visualisiert werden.
Das ganze lässt sich natürlich auch per Alexa auf beliebige % Werte fahren.
Die original FW soll bei den Shellys auch recht gut sein und hat schon eine Shutter Funktion mit dabei. Über den passenden Adapter lässt sich das dann wohl auch gut in IOBroker integrieren.
Aber wie immer, viele Weg führen nach Rom und ich habe mich für den über die Shellys entschieden.
-
Toll, was du alles kannst.
Das hilft dem TO nur leider kein bisschen…
-
Die Version vom TE wäre mir auch viel zu kompliziert. Ich würde die Logik entweder auf der CCU belassen, oder in ioBroker und möglichst wenig mischen, denn das wird irgendwann unübersichtlich.
Die Lösung von myol finde ich eigentlich ganz passend, wenn gleich ich nicht einverstanden wäre, dass die Rollos an freien Tagen schon 8 Uhr hochfahren. :lol:
Weils praktisch ist, steuere ich meine Rollos über Szenen. Meist sollen sowieso alle gleichzeitig hoch oder runter. So brauch ich im Script nur 1x die Szene antriggern und nicht jeden Rolladen einzeln. Gleiches gilt für die HomeKit-App, wo ich mit einem Knopfdruck dann die Szene antriggern kann.
-
Toll, was du alles kannst.
Das hilft dem TO nur leider kein bisschen… `
Doch es zeigt, dass es auch andere Wege gibt das umzusetzen, ob er das will oder nicht entscheidet immer noch er selber. Nur er wenn nicht weiß was es noch gibt, hat er nicht mal diese Möglichkeit der Entscheidung. Aber Hauptsache Du hast auch Dein Senf dazu gegeben.
Ich hatte auch schon nach Lösungen gesucht die in eine Richtung liefen und war dankbar, dass da auch mal einfach andre Möglichkeiten aufgezeigt wurden
Rollläden nach Zeitplan hoch zu fahren, finde ich persönlich eh nicht optimal. Die sollen hoch, wenn ich wach bin und nicht ich wach, weil es hell wird. Meine fahren auch nach eine Szene hoch. Da heißt es morgens "Alexa, aufstehen", dann geht das Licht an (falls noch dunkel) im Bad läuft mein Lieblings-Sender und die Rollläden fahren hoch.
Wenn man den Sinn darin erkennt, will man vielleicht gar keine Uhrzeit oder Astrozeit mehr zum Steuern.
-
Hmmm, das mit der Szene ist keine schlechte Idee.
Muss ich mal drüber nachdenken.
Allerdings fahre ich meine HM-Rolladenaktoren extra nicht zeitgleich, wegen des dann abgegebenen Funkfeuerwerks.
Die Dinger ballern ja im Betrieb richtig was raus.
-
Bei mir fahren derzeit 6 Rolladen gleichzeitig. Ich kann da keine Probleme feststellen.
Aber auch bei Szenen kannst du Verzögerungen einstellen. Entweder global für die gesamte Szene - dann wird jeder Befehl um die angegebene Zeit verzögert. Oder für jeden Eintrag individuell.
-
Ich hab mir eure Ratschläge zu Herzen genommen und probiere nun schon seit ein paar Tagen rum. So richtig funktioniert es irgendwie nicht.
Habe nun alles in ioBroker mit Blockly realisiert. So ähnlich wie myol. Sieht bei mir so aus für abends:
Und für morgens:
Die Var statusRollade sagt nur aus, ob Rollade oben=1, unten=0 ist oder gerade beschattet=3 wird. Wenn sie schon oben ist, soll das Programm halt erst gar nicht mehr abfahren.
Nun ist die Rollade abends wie gewünscht runter gefahren, aber morgens nicht hoch. Obwohl beide Programme doch quasi identisch sind??? Ist mir ein Rätsel. Man kann das Programm sicher noch schöner machen (siehe Bsp. von myol), aber Hauptsache erstmal es funktioniert.
Ich steuere ja den Kanal 4 des HmIP Broll Rolladenaktor. Ist das erstmal korrekt? Es gibt auch Kanal 3. Wozu ist der dann da?
Bei einem Blick in der Werte habe ich folgendes gesehen:
Der Wert LEVEL von Kanal 4 steht auf 0.5%. Eigentlich ist das 0%, nicht dran stören. Die Rollade ist aber oben. Der Wert müsste dann doch auf 100% stehen. Warum hat die CCU den Wert nicht aktualisiert??? (in der CCU steht übrigens der gleiche Wert)
Der Wert in Kanal 3 ist dann 99.5% (was eigentlich 100% ist). Der ist richtig.
Irgendwas mache ich doch noch falsch.
-
Sorry, aber ich brauche hier immer noch Hilfe.
Ich bin vielleicht ein bisschen weiter gekommen.
Wenn ich in Blockly wie beschrieben die HmIP BROLL Rollade mit 100 steuere, bekomme ich in der Regel einen Fehler.
hm-rpc.0 2019-01-30 08:55:20.022 error Error: XML-RPC fault: Generic error
hm-rpc.0 2019-01-30 08:55:20.022 error xmlrpc -> setValue ["4","LEVEL",0.995] FLOAT
Ich steuere mit 100 und im Log steht was von 0.995. Daher habe ich mir die Objekte nochmal etwas genauer angesehen. Woanders im Forum habe ich gelesen, dass der LEVEL eine INTEGER Zahl ist. Die Fehlermeldung wäre damit zumindest nachvollziehbar.
Im Objekt HmIP-BROLL 001118A995071C:4.LEVEL steht unter Allgemein ein Min Wert von 0 und ein Max Wert von 100.44449.
Im Objekt HmIP-BROLL 001118A995071C:4.LEVEL steht unter Nativ ein Min Wert von 0 und ein Max Wert von 1.005. Der Typ unter Nativ ist übrigens auch FLOAT. Vielleicht ist auch das falsch.
Ich habe leider keinen blassen Schimmer, was diese Werte zu bedeuten haben bzw. was für Auswirkungen sie haben. Aber wenn man mal 1:1.005 oder auch 100:100.4449 teilt, dann kommt genau dieser Wert raus, der im Log steht, 0.995.
Ich habe diese Werte nun in ioBroker einfach mal angepasst zu jeweils dem INTEGER Wert, also 100 und 1. Ich frage mich nur, woher hat ioBroker diese krummen Werte überhaupt. Testen kann ich erst heute Abend.
Aber in Summe verstehe ich einfach nicht, was hier abgeht.
-
Was ist jetzt das aktuelle Problem? Der Levelwert oder dass das Rollo morgens nicht hoch geht?
Bei ersterem kann ich dir leider nicht helfen. Bei dem zweiten würde ich es mal versuchen, wenn du mir erklärst, was du da programmiert hast.
-
Ich habe jetzt nicht alles gelesen.
Aber:
@buggybeast71:Ich steuere mit 100 und im Log steht was von 0.995. Daher habe ich mir die Objekte nochmal etwas genauer angesehen. Woanders im Forum habe ich gelesen, dass der LEVEL eine INTEGER Zahl ist. Die Fehlermeldung wäre damit zumindest nachvollziehbar. `
Meines Wissens ist 1 (also 0.995) der Maximalwert.0.5 ist halb runter (Zeit) und 1 ist ganz hoch
Gruß
Rainer
-
Hi zusammen,
Hi Hiltex, was ich programmiert habe steht doch 2 Beiträge weiter oben. Mein vorletzter und letzter Beitrag geben den aktuellen Stand bei mir wieder.
Hi Homoran, das ist bei mir definitiv nicht so. Ich habe es mit Werten zwischen 0 und 1 probiert. Dann bewegt sich die Rollade ca. 1mm
Ich steuere den Kanal 4 der HmIP BROLL. Kanal 4 sieht fast identisch aus wie Kanal 3. Allerdings ist in dem Wert LEVEL zu sehen, dass dieser NICHT schreibbar ist. Daher nehme ich Kanal 4. Der ist schreibbar. Außerdem nimmt die CCU selbst, wenn man da mit einem Programm die BROLL steuert, auch den Kanal 4.
Ich verstehe auch einfach nicht die Fehlermeldung. Was soll <error xmlrpc/-="">setValue ["4","LEVEL",0.995] FLOAT> bedeuten?
Wie muss man das lesen? "Fehler in der RPC Schnittstelle beim Setzen eines Wertes als FLOAT Typ"???
Und was ist dann der Fehler? Das versucht wird, den Typ FLOAT zu nehmen? Oder was anderes?</error>
-
Hallo buggybeast71,
vielleicht mache ich es mir zu einfach oder du dir zu kompliziert… Ich habe keine HM-Rollladenaktoren, weil ich für mich entscheiden habe, dass die schlicht zu teuer sind. Das ist jetzt aber mal für Dein Problem egal.
Mach doch mal Screenshots von den Inhalten der Datenpunkte wenn das Rollo
-
ganz offen
-
ganz geschlossen
-
und vielleicht etwa 20% geschlossen ist.
Dann würde ich versuchen, die schreibbaren DPs mit Werten von Hand über die Objekte-Ansicht des ioBroker zu füllen und zu schauen, was passiert. Das Rollo müsste ja dann entsprechend reagieren. Ich regele meine Rollos über Prozentwerte und Fahrzeit über Sonoff-Schalter. Offen ist 0%, geschlossen 100% bzw. in Abhängigkeit von der Länge z.B. beim längsten Rollo 44sec. Fahrzeit. Jede Stellung dazwischen wird über Dreisatz berechnet. Funktioniert tadellos.
Grüße
-
-
Hi Hiltex, was ich programmiert habe steht doch 2 Beiträge weiter oben. Mein vorletzter und letzter Beitrag geben den aktuellen Stand bei mir wieder. `
Hab ich gesehen. Aber beschreibe doch mal bitte mit deinen eigenen Worten, was da eigentlich passieren soll.
-
Ok ich mache das alles ab morgen / Wochenende. Vorher schaffe ich das leider nicht.
Ich werde mal Screenshots von verschiedenen Stellungen posten und auch beschreiben, was ich vorhabe.
Ich melde mich wieder
Danke für eure Antworten
-
Hallo zusammen,
seit ein paar Tagen funktioniert die Steuerung per Blockly Skript nun bei mir.
Ich möchte das gern nochmal posten, wie meine Lösung aktuell aussieht, denn vielleicht hilft es ja dem ein oder anderen auch mit ähnlichen Problemen.
Zunächst einmal mein aktuelles Skript:
Die Variablen:
-
MorgenDaemmerung ist der aktuelle Zeitpunkt der Morgen Dämmerung, ebenfalls per Skript als Variable gespeichert und jeden Tag aktualisiert.
-
statusRollade ist entweder 0=unten oder 1=oben. Das Programm soll halt nur einmal laufen. Da der Zeitplan alle 10 Minuten das Programm startet, wäre das blöd, wenn immer wieder die Steuerung der Rollade getriggert wird.
Soweit war das ja nix Neues.
Nach diesen komischen Werten und Fehlermeldungen habe ich mir den Parameter "LEVEL" der Kanäle 3 und 4 (des HmIP-BROLL Gerätes) etwas genauer angesehen.
Im Reiter "Allgemein" gibt es einen Min und einen Max Wert. Wie schonmal beschrieben, stand Min immer auf 0, Max aber auf 100.4449. Hier ist die Maßeinheit übrigens % und der Datentyp INTEGER.
Im Reiter "Nativ" war das ähnlich. Dort war in Min ebenfalls 0 eingetragen und in Max 1.005. Hier gibt es ein Attribut Unit=100% und der Datentyp ist FLOAT.
Desweiteren ist der Kanal 3 der BROLL NICHT SCHREIBBAR!!! Kanal 4 ist das aber.
Also meines Erachtens muss zum Steuern der Rollade der Kanal 4 zu verwenden und eine INTEGER Zahl zu übergeben.
Das einzige, was ich nun einfach probiert habe, ist in beiden Kanälen (3 und 4) die jeweiligen Max-Werte im Reiter "Allgemein" auf 100 und im Reiter "Nativ" auf 1.00 zu stellen. Das wurde im ioBroker auch anstandslos akzeptiert.
Ab da lief meine Steuerung. Und im Feld Wert stehen dann nach dem Hochfahren auch die Werte=100%
-
-
@buggybeast71
Guten Morgen, darf ich frage wie du das mit der Morgendämmerung gelöst hast im Script. Ich bin auch noch Anfänger. Danke einen schönen Tag