[Modul] Rollladensteuerung (BlindControl)

Hallo,
ich überarbeite zur Zeit meine Scripte zur Steuerung der Rolläden. Dabei habe ich zwei „Arten“
a) Rolläden, die ich das ganze Jahr über nachts schliesse, da die Zeiten individuell bestimmt werden, würde ich die per DayStartID / DayEndID „versorgen“.
b) Rolläden, die ich nur im Winter Nachts schliessen möchte, im Sommer hatte ich aber auch an eine Beschattungsautomatik gedacht, weil ich zB eine Terassentür ab Mittag halb schliessen will (wenn die Sonne so knallt).
Hat jemand eine Idee, wie ich sinvollerweise im Fall (b) die automatische Tag/Nacht-Fahrt unterdrücken kann?

@bumaas: wäre es nicht denkbar, das Du in getUpDownTime() auch auf $event[‚EventActive‘] ( = „Ereignis aktiv“ des Wochenplans) prüfst? Dann würde die Tag/Nach-Fahrt nach meinem Verständnis deines Codes unterbleiben. Ich könnte das auch gerne bei mir mal einbauen und dir ein PR schicken …

Moin

ok jetzt habe ich die Doku verstanden. Diese bezieht sich auf die interrne Variable in der der Link zu meiner steht, welche dann eine String sein kann. Funktioniert jetzt auch.

Danke

Moin nochmal

kann mir denn noch jemand bei der KNX Problematik helfen?

Danke

Sorry, den Hinweis hatte ich aus den Augen verloren. Welche Version setzt du ein? Kannst du es mal mit der aktuellen Beta Version prüfen. Falls du es auch dort nachvollziehen kannst, stelle bitte einmal die Debugausgaben hier ab oder schicke sie mir.

Die Variable bezieht sich nur auf Bewegungen am Tag

Vielleicht kannst du es mit einer zweiten Kontaktvariablen umgehen, die du nachts auf true setzt, wenn du das Fenster öffnest. Zum Tageswechsel setzt du dann den Kontakt wieder auf false.

Ja, das stimmt. Die Ermittlung der „Schaltzeiten“ ist aufwändig. Vielleicht hilft da das neue Modul von @demel42 weiter?

@paresy: im Webfront und auch in der App wird ja der nächste Schaltpunkt eines Wochenplans angezeigt. Gibt es dafür eine (undokumentierte) Funktion?

Ich vermute, dass das nicht ohne grundlegende Umbauten geht. Der Wochenplan ist essentiell.

Also du möchtest im Sommer ausschließlich den Sonnenschutz verwenden.
Siehe Doku :slight_smile:

Der Verweis auf einen Wochenplan ist zwingend. Wird kein Wochenplan benötigt (z.B. weil die Rollläden) ausschließlich zum Sonnenschutz heruntergefahren werden sollen, dann muss dennoch ein rudimentärer Wochenplan vorhanden sein, der den oben genannten Bedingungen genügt.
Dies könnte ein Wochenplan sein mit den Aktionen 1 und 2 und nur einer Zeitspanne der ID 2 über 24/7.

Für den Winter nimmst dann einen alternativen Wochenplan.

Dazu kann ich leider nichts sagen. Das Modul erwartet eine Positions-Variable, die sich stufenlos setzen lässt. Hast du schon einmal im Hardware/KNX Bereich geschaut?

Ja, das hatte ich in der Doku gelesen, aber dann müsste ich entweder den Wochenplan an sich ändern oder in den Instanzen einen andern WP einsetzen.
Geht ja nicht nur um Sommer/Winter, sondern auch um einfach mal für „heute“ den Tag/Nach-Fahrbetrieb deaktivieren.

Hmm, ich muss mal experimentieren … Vielleicht geht das, wenn ich den „leeren“ WP (also nur mit einer Aktion) nehme und nur DayStartID / DayEndID nutze. Wei nicht, was passiert, wenn die Variablen dann keinen (nutzbaren) Inhalt haben. Ich teste das morgen mal (wenn ich jetzt den Rolladen rauf und runter fahren würde, würden sich meine Lieben bedanken). Ich berichte …

Nachtrag: was ist eigentlich der Unterschied von DayStartID / DayEndID zu WakeUpTimeID / BedTimeID? Beide bestimmen doch Tagesanfang und Ende?

@bumaas

Indikatorvariable vom Typ String, die eine übersteuernde Runterfahrzeit beinhaltet. Die Zeit muss im Format ‚HH:MM‘ angegeben sein. Eine ungültige Zeitangabe wird ignoriert.

Die Erkennung ungültiger Zeitangabe funktioniert nicht.

$heute_ab_ts = strtotime(GetValueString($idBedTime)) + $this->ReadPropertyInteger(self::PROP_BEDTIMEOFFSET) * 60;

ergibt bei einem ungültigen Inhalt von _ idBedTime_ immer den Wert von _ PROP_BEDTIMEOFFSET_ (also wenn nicht konfiguriert 0.)
heute_auf natürlich dito.
Ich habe das mal versuchsweise so geändert

        //gibt es übersteuernde Zeiten?
        $idWakeUpTime = $this->ReadPropertyInteger(self::PROP_WAKEUPTIMEID);
        if (IPS_VariableExists($idWakeUpTime)) {
            $wakeUpTime = GetValueString($idWakeUpTime);
            if ($wakeUpTime == '') {
                $this->Logger_Dbg(__FUNCTION__, 'empty WakeUpTime found: (ignored)');
            } else {
                $heute_auf_ts = strtotime($wakeUpTime);
                if ($heute_auf_ts === false) {
                    $this->Logger_Dbg(__FUNCTION__, sprintf('No valid WakeUpTime found: \'%s\' (ignored)', $wakeUpTime));
                } else {
                    // es wurde eine gültige Zeit gefunden
                    $heute_auf_ts += $this->ReadPropertyInteger(self::PROP_WAKEUPTIMEOFFSET) * 60;
                    $heute_auf = date('H:i', $heute_auf_ts);
                    $this->Logger_Dbg(__FUNCTION__, sprintf('WakeUpTime found: %s', $heute_auf));
                }
            }
        }

        $idBedTime = $this->ReadPropertyInteger(self::PROP_BEDTIMEID);
        if (IPS_VariableExists($idBedTime)) {
            $bedTime = GetValueString($idBedTime);
            if ($bedTime == '') {
                $this->Logger_Dbg(__FUNCTION__, 'empty BedTime found: (ignored)');
            } else {
                $heute_ab_ts = strtotime($bedTime);
                if ($heute_ab_ts === false) {
                    $this->Logger_Dbg(__FUNCTION__, sprintf('No valid BedTime found: \'%s\' (ignored)', $bedTime));
                } else {
                    // es wurde eine gültige Zeit gefunden
                    $heute_ab_ts += $this->ReadPropertyInteger(self::PROP_BEDTIMEOFFSET) * 60;
                    $heute_ab = date('H:i', $heute_ab_ts);
                    $this->Logger_Dbg(__FUNCTION__, sprintf('BedTime: %s', $heute_ab));
                }
            }
        }

Damit werden ungültige bzw. leere Zeitangabe nicht berücksichtigt

Das hört sich nach einer Idee an. Werde ich mal ausprobieren danke.

Danke! Ist zum nächsten Stand korrigiert.

Hallo zusammen,
in den letzten Monaten bin und war ich begeisterter Benutzer des BlindControl Moduls. Vielen Dank erstmal dafür!

Seit ein paar Tagen habe ich jedoch ein kurioses Problem. Die Rollos sind sich unschlüssig, was sie tun sollen.
Es kommt sowohl beim Öffnungsvorgang, wie beim Schließen zu einer Bewegung, einem Halt, Gegensteuern und Innehalten (für ca. 1 Min). Anschließend wird der korrekte Vorgang fortgesetzt.

Ihr könnt euch vorstellen, wie es meiner Frau mit diesem Bewegungsablauf der Rollos geht. :rofl:

Ich habe die Nachrichten einmal protokollieren lassen:
grafik

Hier auch einmal abgetippt:
Anmerkung: Das manuelle Schließen um 16:55:40 Uhr war meine Frau. Das Rollo hätte sonst vermutlich selbst um 16:56 geschlossen, wie es auch das Protokoll zeigt.

16:56:03 ‚Blind Controller - Fenster‘ wurde geschlossen (Nacht, 37.38 Lux)
16:55:40 ‚Blind Controller - Fenster‘ wurde manuell geschlossen.
16:55:11 ‚Blind Controller - Fenster‘ wurde geöffnet (Tag, 40.72 Lux)
16:55:09 ‚Blind Controller - Fenster‘ wurde geschlossen (Nacht, 40.72 Lux)

Die Konfiguration ist wie folgt. Die Helligkeitsgrenze liegt bei 50 Lux.

Und die Experteneinstellungen:

Vielen Dank für eure Unterstützung!

Momentan habe ich noch keine Idee. Könntest du einmal die Debugausgabe mitlaufen lassen?
Also im Debugfenster einmal die Ausgabe in eine Datei aktivieren.

Das wird uns sicherlich weiterhelfen.
Wie sieht denn der hinterlegte Wochenplan aus?

Vielen Dank Bumaas!
Ich habe jetzt das Debugging einmal aktiviert. Kannst du mir weiterhelfen, wo ich diese Datei dann finden kann?
Der Wochenplan ist sehr überschaubar. 7:00 - 23:00 Uhr „Rollladen hoch“ und sonst „Rollladen runter“.
grafik

Ok. Daran kann es dann eigentlich nicht liegen.

Die Debugdatei wird im log Verzeichnis von Symcon abgelegt und hat die ID der Instanz im Namen.

1 „Gefällt mir“

Hallo Bumaas,

ich habe dir einmal eine PN geschickt. Danke für deine Unterstützung!

Christoph

Hallo Bumass, ich bekomme auch keine zweite Location Control erstellt. Duplizieren geht nicht und auch das Anlegen einer neuen Instanz funktioniert nicht. Hier kommt der Hinweis: „Diese Instanz kann nicht mehr als 1 mal erstellt werden (Code: -32603)“

Ist diese Funktion bei der aktuellen IPS Version nicht mehr möglich?
Viele Grüße
marvus

Ja, dem ist leider so. Du wirst eine eigene „IstEsTag“ Variable anlegen müssen, die du mit Hilfe der Offsets setzen könntest. Leider kein simples Unterfangen.
@paresy: was war noch der Grund für die Einschränkung?

Moin @bumaas,

Ich find das jetzt gar nicht so „unsimple“. Ich habe einfach die Familie gefragt, wann wer seinen Rollladen wie gesteuert haben will und mir dementsprehend String-Variablen angelegt:

.

Da ich für alle anderen die Nautic-Werte der Location nehme, welche so direkt nicht zu nutzen ist, lasse ich sie mit einem kleinen Script nutzbar umrechnen:

Und schon kann ich alles so einstellen, wie ich es brauche.

<?php
$timestamp = GetValue(54677); // Nautic twilight end (Location)
$nauticTime = date("H:i:s", $timestamp);
setValue(11693, $nauticTime); // Variable String, wo die umgerechnete Uhrzeit geschrieben und 

genutzt wird
Gruß
Burkhard

Dafür ist eigentlich der Wochenplan vorgesehen.:grinning:

Aber schön, dass es bei euch passt.