Weihnachtsbeleuchtung synchron schalten

November/Dezember 2024, neues Projekt.

Mein zugegeben diesbezüglich etwas verwöhntes Weib hat sich beschwert, daß die Schaltuhren für die Weihnachtsbeleuchtung nicht 100% synchron sind, sondern je nach Gangungenauigkeit bis zu 2 Minuten Verzögerung zueinander haben. Das ist furchtbar. Grauenhaft. Schrecklich. Eine mittelgroße Katastrophe.


Um ihr eine Freude zu machen, hab ich mich amal mit dem Problem beschäftigt.


Ausgangssituation: etwa 3..6 digitale Schaltuhren außen und innen sollen synchronisiert werden, Herausforderung ist dabei die Unterschiedlichen Anbringungsorte der Weihnachtsbeleuchtung und somit der Einspeisung. Leistung ist eher lächerlich, 50..100W

 

Die banalste Lösung, alles an eine Zeitschaltuhr zu hängen, hab ich gleich verworfen, wir würde in Kabeltrommeln und abgewickeltem Kabel untergehen im und außer Haus. Und da ist noch die Frage der Durchführung nach draussen, Haustür offenlassen und Kabel rauslegen ist keine sinnvolle Option!

 

Synchrone Schaltuhren zu kaufen geht mörder ins Geld, Idee verworfen.

 Aber da gibt es ja diese Shellies….


Grundidee: Shellies gemeinsam schalten per Zeitschaltung „Schedule“ von einem Shelly aus, Modell Shelly Plus plug S

Erweiterte Grundidee und Umsetzungsziel: Am Raspberry Pi läuft ein per cronjob gestartetes Script, das all Shellies schaltet.


Vorteil: einfach zum Ändern, ma muss nur die IP adresse in das Scriptl eintragen und schon schaltet es, Außerhalb der Weihnachtszeit muss nur das Ein- und ausschalten der Shellies im Cronjob deaktiviert werden, was ja watscheneinfach ist.


Scriptl

#!/bin/bash
# xmaslumination.sh
# This script switches some shellies once in a bunch

# created on 20241122-071441
# improved on 20241202-072055 - added switch to the same state before actual switch to get all shellies synced
# =====================================
# Define here Shellie's IP addresses to be switched in a bunch'
declare -a IPaddresses=("192.168.1.101" "192.168.1.102" "192.168.1.103" "192.168.1.104")


if [ -z "$1" ]; then
    echo "ERR: No Parameter provided, use $0 -on, $0 -off "
    echo "or $0 -showarray to list IP adresses!"
    echo "exiting..."
    exit 20
fi


if [ "$1" = "-showarray" ]; then
    for loopip in ${IPaddresses[@]};do
        echo "$loopip"
    done
fi


if [ "$1" = "-on" ]; then
    for loopip in ${IPaddresses[@]};do
        OFFcommand="curl http://$loopip/relay/0?turn=off"
        ONcommand="curl http://$loopip/relay/0?turn=on"
        echo "exec: $OFFcommand with $loopip"
        echo "exec: $ONcommand with $loopip"
        $OFFcommand
        $ONcommand
    done
fi


if [ "$1" = "-off" ]; then
    for loopip in ${IPaddresses[@]};do
        ONcommand="curl http://$loopip/relay/0?turn=on"
        OFFcommand="curl http://$loopip/relay/0?turn=off"
        echo "exec: $ONcommand with $loopip"
        echo "exec: $OFFcommand with $loopip"
        $ONcommand
        $OFFcommand
    done
fi


Schmäh

witzigerweise passiert es immerwieder amal, dass die Shellies nicht exakt gleichzeitig schalten, sondern 1..2 Sekunden Verzögerung haben. Abhilfe hat die zusätzliche Zeile geschaffen, die Shellies in den Zustand zu schalten in dem sie schon sind und dann umzuschalten. Funkt problemlos.

Einfach die IP Adressen der Shellies in das Array eintragen und das Scriptl mit mit parameter -on oder -off starten.

bzw. in die Crontab eintragen:

sudo vi /etc/crontab

# Switch on/off Shellies for xmas lumination script
30 05 * * * pi  /home/pi/Desktop/xmaslumination/xmaslumination.sh -on
00 07 * * * pi  /home/pi/Desktop/xmaslumination/xmaslumination.sh -off
30 16 * * * pi  /home/pi/Desktop/xmaslumination/xmaslumination.sh -on
00 22 * * * pi  /home/pi/Desktop/xmaslumination/xmaslumination.sh -off

​die Beleuchtung schaltet sich punktgenau um 5:30 ein und um 7:00 aus, sowie um 16:30 bis 22:00.