Erste Gehversuche Skript: wie Bedingung einfügen

Hallo Forum,

folgende Fragestellung treibt mich heute um.
Ich möchte gerne, da ich es mit der Ereignis-Funktion nicht geregelt bekomme, einen Teil meiner Rollläden per Script abfahren lassen. Hintergrund ist, dass sich meine Ereignis-orientierte Lösung häufiger verschluckt und dann nur ein Teil der Rollläden abfahren und bei den anderen Rollläden in der CCU eine Kommunikationsstörung angezeigt wird.
Mein Gedanke ist nun, dass ich die Rollläden leicht zeitversetzt abfahren lasse, sodass per Homematic IP die Befehle korrekt übertragen werden können.

Ich habe es bisher mit dem Skripteditor geschafft die Rollläden einzufügen, die jeweilige Aktion (Abfahren auf 0%) und eine Verzögerung von einer Sekunde (wie lautet der Befehl für 0,5 Sekunden?) zu hinterlegen.

Ich scheitere jetzt nur jämmerlich daran, die Bedingung des Helligkeitssensors einzufügen.
Macht es Sinn, das Skript per Ereignis anzusteuern? als Beispiel: Helligkeitssensor meldet Helligkeit 10 → Skript startet und fährt die Rollläden ab?

Oder macht es mehr Sinn, das Skript so aufzubauen, dass eine Helligkeitsabfrage direkt hinterlegt ist?

mein bisheriger (jämmerlicher :wink: ) Versucht sieht wie folgt aus:

<?php

//Rollladen SZ links (mit Griffsensor) auf 0%
$variable = IPS_GetVariable(51777);
$profileName = $variable['VariableCustomProfile'];
if ($profileName == '') {
   $profileName = $variable['VariableProfile'];
}
$value = 0;
if ($profileName != '') {
   $profile = IPS_GetVariableProfile($profileName);
   $value = (0 * 0.01 * ($profile['MaxValue'] - $profile['MinValue'])) + $profile['MinValue'];
}
RequestAction(51777, $value);

// Warte 1,0 Sekunden
sleep(1);

//Rollladen SZ Mitte auf 0%
$variable = IPS_GetVariable(55737);
$profileName = $variable['VariableCustomProfile'];
if ($profileName == '') {
   $profileName = $variable['VariableProfile'];
}
$value = 0;
if ($profileName != '') {
   $profile = IPS_GetVariableProfile($profileName);
   $value = (0 * 0.01 * ($profile['MaxValue'] - $profile['MinValue'])) + $profile['MinValue'];
}
RequestAction(55737, $value);

// Warte 1,0 Sekunden
sleep(1);

//Rollladen SZ rechts auf 0%
$variable = IPS_GetVariable(23908);
$profileName = $variable['VariableCustomProfile'];
if ($profileName == '') {
   $profileName = $variable['VariableProfile'];
}
$value = 0;
if ($profileName != '') {
   $profile = IPS_GetVariableProfile($profileName);
   $value = (0 * 0.01 * ($profile['MaxValue'] - $profile['MinValue'])) + $profile['MinValue'];
}
RequestAction(23908, $value);

Wie kann ich nun noch ergänzen, dass der Rollladen links nur dann abfahren darf, wenn der Griff auf „geschlossen“ steht?
Irgendwie verstehe ich in den Beispielen den Absprung mit „if Sensor hat Helligkeit 10 dann“ oder „if Griff ist in Stellung gekippt, dann fahre nur 50%“ nicht so ganz.

Grüße
Simon

IPS_Sleep(500);
Wobei man Pausen immer vermeiden sollte!

Wie wird das Skript denn jetzt gestartet?

Da brauchst du ein weiteres if

/// 47111 ist die ID der Helligkeitsvariablen
if (GetValue(47111) < 10) { 
   ...
}

Du kannst auch mehrere Bedingungen mit && (und) bzw. || (oder) verknüpfen und somit zusätzlich den Status des Griffs mit einbringen.

Alternativ könntest du aber auch mein Rollladen Modul „Blind Control“ aus dem Store verwenden. Das deckt deine bislang genannten Anforderungen auch ab. :slight_smile:

vielen Dank für die Rückmeldungen!

ich weiß mir aber ehrlicherweise nicht anders zu helfen um das „verschlucken“ bei der Übertragung der Befehle zu verhindern. Eine Kabellösung wäre zwar toll - ist aber nicht umsetzbar.

aktuell nur manuell, da ich es noch nicht für den Produktiveinsatz freigeben möchte. Mein erster Gedanke war, dass ich es per Ereignis triggere, sobald die Helligkeit unter „10“ fällt. (dann könnte ich mir auch den Helligkeitssensor direkt im Script sparen und müsste lediglich auf den Griff abfragen.

das habe ich mir angesehen, bin mir aber über die Funktion des Wochenplans unschlüssig.
Ich möchte nicht, dass der Rollladen regelmäßig zu einer festen Uhrzeit auf/ab fährt, sondern lediglich wenn die Helligkeit unter 10 fällt und in naher Zukunft, wenn die Wetterstation im April/Mai montiert ist, die Temperatur über xx Grad liegt als Hitzeschutz.
Auffahren der Rollläden soll immer manuell gesteuert werden.

Grüße
Simon

Das ist doch eine gute Idee.

Das können wir gerne im anderen Thread diskutieren. Eigentlich findet sich immer ein Weg :slight_smile:

Macht sowieso keinen Sinn, die Rollladen zu fahren, wenn ein bestimmter Helligkeitswert erreicht bzw. unter- oder überschritten wird. Denn dann fahren die Rollladen ja wild rauf und runter, je nach Änderung des Helligkeitswerts. Sollte es tatsächlich ein Zeitproblem mit HomeMatic geben, dann würde ich jeder Rolllade eine „Minute“ zuweisen, in der geprüft wird, ob die Rolllade verfahren werden muss oder nicht. Bei 10 Rollladen wäre das dann so, dass jede alle 10 Minute dran kommt.
Bei mir z. B. fahre ich nur alle 20 Minuten die Rollladen (aber alle: KNX). In der Zwischenzeit berechne ich die Durchschnittswerte der Helligkeiten pro Minute und Himmelsrichtung. Sensor auf dem Dach liefert die Werte von Osten, Westen, Süden. Gemäß dem Durchschnitt der letzten 10 Minuten (10 Werte, „Schieberegister“) verfahre ich die Rollladen. Dabei wird jede Rolllade in 5 Stufen („ganz hoch“ bis „so weit runter mit offenen Lücken“) gefahren. Jeder Rollade weise ich dann diesen 5 Stufen die passenden Durchschnittswerte zu. Damit habe ich ziemlich Ruhe im System und trotzdem die passende Beschattung.

mach ich doch direkt im Nachgang :smiley:

Die Aussage verstehe ich ehrlicherweise nicht. Warum sollen die Rollläden „wild“ fahren?
Wenn ich ein Ereignis anlege und dabei definiere, dass die Rollläden bei einer bestimmten Helligkeit (kleiner 10) abfahren sollen - wieso sollen sie danach dann „wild“ hoch und runter fahren? Das Ereignis wird pro Tag einmal bei erstmaligem Erreichen der Bedingung ausgelöst, nämlich Abends wenn es dunkel ist. Fahre ich danach die Rollläden bewusst nochmal hoch, dann muss ich sie eben manuell wieder abfahren und der Komfort ist weg.

Problem bei mir mit HomeMatic IP ist, dass wenn ich alle Rollläden gleichzeitig ansteuern möchte (13 Stück) und dann noch Bedingungen wie Griffstellung, Helligkeit, etc. berücksichtigt werden soll, dann bleiben regelmäßig 2-3 Rollläden auf der Strecke und ich erhalte den Fehler „HomeMatic Fehler: Generic error (UNREACH)“.
wenn ich nun aber einen Sleep oder unterschiedliche Helligkeitswerte (10, 10.05, 10.10, etc.) hinterlege, dann habe ich damit hoffentlich kein Problem mehr. Einen Sleep bekomme ich aber nur über ein Skript hin und kann es nicht direkt im Ereignis hinterlegen, dass jede Variable mit einer Verzögerung „x“ angesteuert werden soll. Vielleicht geht das im geplanten Ablaufplan für IPS-Version 5.6

Grüße
Simon

Eine Rollladensteuerung ist eben nicht nur „fahre ab Helligkeitswert X herunter“ und „fahre ab Helligkeitswert X wieder hoch“.

Da müssen noch diverse zusätzliche Dinge mit eingebaut werden. Es wird nämlich abends nicht immer „linear“ dunkel, ab und zu löst eine Bewölkung das Herunterfahren aus, dann sind die Wolken weg und es fährt wieder hoch. Oder am Morgen wenn die Rolllläden schon oben sind, wird es aufgrund eines Unwetters wieder dunkel. Es gibt da sehr viele Faktoren, die berücksichtigt werden müssen.

okay jetzt habe ich es verstanden :slight_smile:
Bedeutet ich baue die Bedingung „Helligkeit“ nicht in das Skript ein, sondern erstelle ein Ereignis, dass abends bei Erreichen der Helligkeit die Rollläden einmalig abfahren lässt.
Ist dann in der Dämmerung eine Wolke schuld, dass sie paar Minuten zu früh abfahren, so soll mich das nicht stören.

wenn ich doch aber kein Ereignis zum Auffahren triggere, dann dürfte das den Rollläden doch egal sein und sie bleiben unten, bis ich manuell den Befehl zum Auffahren gebe.

Nein, du hast es noch immer nicht verstanden.
Nicht die Helligkeit ist der Auslöser für das Verfahren der Rollläden, sondern nur nur eine von evtl. mehreren Entscheidungsbedingungen. Weitere Bedingungen können feste Zeit, Ausnahmen für Urlaub, Suspendierung der Automatik, etc. sein.
Gelöst wird das mit einem Dauerscript, das sich selbst alle x Minuten aufweckt, und dann Prüfungen durchführt, ob etwas hinsichtlich Rollladenfahren getan werden muss.
Das kann z. B. sein, dass

  • östliche Rollläden automatisch wegen Sonnenschutz von „Sonnenaufgang plus 1 Stunde“ bis „mittags“ gefahren werden;
  • südlich … analog andere Zeiten;
  • westliche … analog andere Zeiten;
  • östliche Rollläden eine Stunde lang nicht gefahren werden;
  • eine oder mehere Einzelrollladen z. B. eine Stunde nicht gefahren werden;
  • eine oder mehrere Einzelrollladen z. B. eine Stunde so bleiben, wie sie manuell verfahren wurden;
  • bestimmte Rollläden (oder alle) ab einer bestimmten (variablen) Zeit (Sonnenuntergang) geschlossen werden;
  • … und, und, und.

Wenn aber eine Rolllade automatisch gemäß Helligkeit gefahren wird, dann aber doch ganz sicher nicht gemäß dem gerade anliegenden Helligkeitswert. Denk’ das doch mal durch!
Das Ganze wird noch durch die Verwendung von weniger zuverlässigen Systemen wie HomeMatic komplizierter, da man bei dem System immer auf Fehlermeldungen prüfen und die Aktion ggfls. wiederholen muss. Und man darf es mit der Ansteuerung von HomeMatic Geräten auch nicht übertreiben, da die innerhalb einer Stunde nur ca. 1 Minute kommunizieren dürfen.
Und übrigens, statt

$value = (0 * 0.01 * ($profile['MaxValue'] - $profile['MinValue'])) + $profile['MinValue'];

hättest du auch einfach schreiben können:
$value = $profile[‚MinValue‘];

Da bin ich auf Deine Erfahrungen gespannt. Halte und diesbezüglich gerne auf dem Laufenden.