Langsam Dimmen mit IoBroker

VPN/Proxy erkannt

Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.

  • Hallo Shelly Gemeinde,

    ich hab ´nen Shelly Dimmer in einem Shelly Button an meine Lampe in der Küche angeschlossen.

    Jetzt hab ich mir im IoBroker ein Blockly erstellt.

    Sobald ein bestimmter Echo-Wecker im Schlafzimmer startet, wird über den Echo in der Küche mein Radiosender gestartet und die Lampe wird, wenn es Dunkel ist, mit 10% Helligkeit eingeschaltet.

    Jetzt möchte ich aber, dass die Lampe nach 10 Minuten alle X Sekunden die Helligkeit erhöht, bis die 100% erreicht sind.

    Ich hab schon versucht über den "steuere" Befehl "mit Verzögerung" zu arbeiten und mit "Timeout". Funktioniert aber alles nicht. Er springt in beiden Fällen gleich auf 100%.

    Hat jemand von euch eventuell eine Lösung dafür?

    PS: Ich weiß, dass das Blockly sicher auch eleganter zu lösen wäre aber ich stecke noch nicht lange in der Materie.

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Viele Grüße, Micha :)

    Einmal editiert, zuletzt von Michael Haenecke (17. Januar 2021 um 12:39)

  • Zur hilfreichsten Antwort springen
  • Moin,

    ich kenne zwar BLOCKLY nicht (sieht ein bisschen aus wie Lego-Mindstorm ab 10 Jahre...), aber hier ein paar Gedanken:

    • Oberste Wenn-Dann-Sonst-Anweisung (IF-THEN-ELSE): Trigger
      • Wie wird/werden der/die erzeugt?
      • Wie lange steht der an? Von z.B. 03:45:00 bis 03:45:59? Oder als verlängerter Impuls für z.B. 2 Sekunden?
      • Warum die Bedingung "wurde geändert"? So würde die Bedingung zweimal erfüllt sein, einmal beim Wechsel von 0 auf 1 und dann wieder beim Wechsel von 1 auf 0. Ausserdem wird die Wenn-Dann-Sonst-Anweisung genau 1x je Änderung durchlaufen, denn im nächsten Zyklus hat sich der Trigger ja nicht mehr geändert.
      • Besser wäre die Abfrage auf TRUE (wahr, 1) bei steigender Flanke. Damit einen Merker (Flag) setzen, welcher erst nach Abarbeitung der gesamten Aufgabe zurückgesetzt wird.
    • Zweite Wenn-Dann-Sonst-Anweisung (IF-THEN-ELSE): Nachts oder Tagsüber
      • Warum die doppelte Verneinung?
      • Besser wäre "zwischen Sonnenuntergang und Sonnenaufgang (also nachts) oder
      • "zwischen Sonnenaufgang und Sonnenuntergang" (also tagsüber), dafür aber die Inhalte von "mache" (THEN) und "sonst" (ELSE) tauschen.
    • Dritte Wenn-Dann-Sonst-Anweisung (IF-THEN-ELSE): SWITCH ist An oder AUS
      • Auch wird diese Anweisung nur 1x durchlaufen, im nächsten Zyklus passiert nichts mehr.
      • Wie sind "Brightness" und "Volume" mit der "Object-ID" verbunden? Beim "SWITCH" wird die ID ja angeführt.
      • Sind die Werte 10 bzw. 20 absolute Werte? Oder inkrementell, soll heißen, wenn der aktuelle Wert z.B. 10 ist, dann bewirkt der Aufruf "steuere ... mit 10", dass auf 20 erhöht wird. (oder vice-versa "steuere mit -10" = Wert 0).
    • Zu guterletzt:
      • Solange ein Trigger ansteht und es ist am Tage werden die Anweisungen im Bereich "sonst" (ELSE) der zweiten Ebene dauernd ausgeführt. Falls die Steuerwerte inkrementell wirken, wäre z.B. das Volumen spätestens nach dem fünften Zyklus auf 100%.

    Wenn du, und das ist ja das Thema, langsam aufdimmen möchtest, dann brauchst du ein wenig mehr. Deklariere geeignete Variablen (Speicher), z.B.:

    • DIM varWertSteigerungZeit := INT //Wert in Sekunden
    • DIM varWertSteigerungValue := INT //Wert in %
    • DIM varTrigger := BOOL //Ein Trigger ist aktiv
    • DIM varTag := BOOL //Es ist Tag
    • DIM varNacht := BOOL //Es ist Nacht

    Versuche, die gesamte Aufgabe in kleinere Teilaufgaben zu zerlegen:

    Wenn Trigger_01 oder Trigger-02 oder Trigger_03 = TRUE

    Dann varTrigger := TRUE

    Wenn zwischen Sonnenaufgang und Sonnenuntergang

    Dann varTag := TRUE

    Sonst varTag := FALSE

    Wenn zwischen Sonnenuntergang und Sonnenaufgang

    Dann varNacht := TRUE

    Sonst varNacht := FALSE

    Wenn varTag = TRUE und varTrigger = TRUE

    Dann rufe funktionTag() auf

    Wenn varNacht = TRUE und varTrigger = TRUE

    Dann rufe funktionNacht() auf

    funktionTag()

    Radio an..

    Volume laut..

    varTrigger := FALSE

    funktionNacht()

    Wenn Switch = FALSE

    Dann Switch an, Radio an, Volume leise

    Wenn Brightness <100

    Dann Delay(varWertSteigerungZeit)

    Wenn Delay = TRUE

    Dann Brightness := Brightness + varWertSteigerungValue und Delay := FALSE

    Wenn Brightness => 100

    Dann varTrigger := FALSE


    Das musst du natürlich in die Syntax von BLOCKLY überführen. Aber es ist ein Anfang.

    Mit der Elektrik ist das doch ganz einfach. Alles, was man sich merken muss: Rot ist Schwarz und Plus ist Minus, dann klappt‘s immer:!: Und beim Programmieren hat man auch nur Nullen und Einsen, also wie kompliziert kann das schon sein:?:

    • Hilfreichste Antwort

    Sobald ein bestimmter Echo-Wecker im Schlafzimmer startet, wird über den Echo in der Küche mein Radiosender gestartet und die Lampe wird, wenn es Dunkel ist, mit 10% Helligkeit eingeschaltet.

    Hallo, damit kannst du in Stufen deinen Dimmer nach Zeit erhöhen. Teilskript, läuft bei mir mit einem Duo.

    Die Info Blöcke kann man natürlich weg lassen.

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.
    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.
  • ASi-Master Naja für jemanden wie mich, der sich mit dem proggen nicht so auskennt, sind Blocklys ´ne gute und einfach zu verstehende Lösung. Und wenn man sich die dann in JS anschaut, dann versteht man das viel leichter.

    @neo-v Danke, das sieht gut aus! Schau ich mir mal an.

    Viele Grüße, Micha :)

  • Dieses Thema enthält 6 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind.