EDIT 14. Juni 2020:
piScheduler wird nicht mehr maintained und sollte deshalb nicht mehr genutzt werden. Als Alternative habe ich NodeRed gefunden, welches mit pilight 433MHz Schaltsteckdosen zuverlaessig steuert. Details dazu finden sich hier.
=== Überblick ===
Bei mir zu Hause liegen eine größere Menge von ungenutzen 433 MHz Schaltsteckdosen rum und die wollte ich nutzen um zeitgesteuert Beleuchtung sowie andere Geräte ein- und auszuschalten. Eigentlich beabsichtigte ich die Logik dazu selbst programmieren - bin dann aber zufällig im pilight Forum über ein addon zu Pilight mit dem Namen piSchedule gestossen, welches exakt diese Aufgabe erledigt und sparte mir deshalb die Programmierarbeit. Insbesondere die Tatsache, dass die aktuelle Sonnenauf- und -untergangszeit der eigenen geographischen Lage genutzt werden kann, ist sehr nützlich.
=== Funktionalität ===
Voraussetzung ist ein laufendes und konfiguriertes pilight 6.0
piSchedule besteht aus zwei Komponenten
1) Einem Webfrontend zum Konfigurieren beliebiger Schaltzeiten der dem pilight bekannten Schaltsteckdosen sowie dem Kontrollieren der anstehenden und abgelaufenen Schaltzeiten. Auf dem Webfrontend gibt es auch einen Link zum laufende pilight Webfrontend falls man mal eine Schaltdose ausser der Reihe schalten will. Es sind also quasi beide Anwendungen über ein einziges Webfrontend zugreifbar.
2) Einem Backend um piSchedule zu starten und stoppen und gespeicherte Schaltzeitkonfigurationen zu laden. Dabei ist eine Terminalsession notwenig, in der der aktuelle Status ausgegeben wird. Diese läßt man üblicherweise in einer screen- oder tmux Session laufen und startet sie während des Bootvorganges.
=== Konfiguration ===
Es können beliebige Schaltzeiten konfiguriert werden die dann folgende Eigenschaften haben können:
1) Zeitenbasis
a) Aktuelle Zeit
b) Festdefinierte Zeit
c) Sonnenauf- und Sonnenuntergangszeit
2) Zeitenabweichung
a) Positiver oder negativer fester Wert der zur Zeitbasis addiert oder subtrahiert wird
b) Positiver oder negativer zufälliger Werte aus einem Bereich der zur Zeitbasis addiert bzw subtrahiert werden
Die Schaltzeiten werden in Tagesplänen zusammengefasst und in .ini Dateien abgelegt. Die Schaltzeiten kann man einfach man mit dem Webfrontend vornehmen. Ich bevorzuge aber als alter Linuxer direkt in den Ini Dateien mit einem Editor die Schaltzeiten zu erstellen und zu ändern. Die Syntax ist relativ einfach nachdem man sich ein wenig genauer mit ihr befasst hat.
Somit kann man also z.B.
- 10 Minuten vor dem Sonnenuntergang eine Hauseingangsbeleuchtung einschalten und dann zufallsgesteuert zwischen 23:15 und 24:00 ausschalten lassen
- 2 mal die Nacht um 2:00 und 3:00 für 5 Minuten eine Lampe für den Nachttopfbesuch ein- und ausschalten lassen
- Um 7:15 Uhr die Kaffeemaschine starten lassen
- 15 Minuten nach Sonnenaufgang die Kanarienvogelgehäuseabdeckung anheben und sie 15 Minuten nach dem Sonnenuntergang wieder auflegen
=== Dokumentation ===
Die Dokumentation sowie das Webfontend sind in Deutsch und Englisch verfügbar. Auf ihr findet man Screenshots des Webfrontends sowie die Beschreibung, wie man es installiert sowie eine detailierte Beschreibung der Schaltzeitdefinitionen
=== Installation ===
Die Installation ist sehr einfach: Man kopiert einfach einen vorgegebenen Befehl von der Webseite in die Befehlszeile und läßt ihn ausführen. Die Installation dauert dann aber etwas. Am Ende schreibt das Installationsscript wie man piSchedule startet.
=== Start und Stop ===
Nachdem man piSchedule manuell auf der Konsole gestartet und getestet hat muss man dafür sorgen dass es auch immer wieder automatisch bei einem boot gestartet wird.
piSchedule erfordert eine aktive Bildschirmsession und der Autor von piSchedule empfiehlt deshalb die Benutzung von tmux. tmux ist kaum bekannt und ich musste erst einmal die Suchmaschine meines Vertrauens beehren um herauszufinden was das für ein Tool ist. Ich benutze das verbreitete Tool screen um die Bildschirmausgaben von piSchedule abzufangen. Allerdings muss vorher screen auf der Raspi erst einmal installiert werden mit 'sudo apt-get install screen'.
Zum Starten des piSchedule habe ich folgende Zeile in die /etc/crontab aufgenommen. Damit wird es automatisch beim Booten in einer screen Session gestartet.
@reboot root ( sleep 15; cd /home/pi/piScheduler; /usr/bin/screen -dmS "piScheduler" /home/pi/piScheduler/piSchedule.py mySchedule.ini )
I.d.R braucht man sich den Ausgabescreen von piSchedule nicht mehr anzusehen. Man benutzt nach dem Start nur noch das Webfrontend zum kontrollieren oder Konfigurieren. Falls man die Ausgabe doch mal sehen möchte braucht man nur zu den Session reconnecten mit
Dann sieht man alle Bildschirmausgaben von piSchedule. Danach kann man dann entweder mit CTRL-C piSchedule beenden oder sich mit CTRL-A-d wieder aus der Screensession abmelden und läßt piSchedule damit weiterlaufen. Informationen zu Screen und dessen Bedienung finden sich z.B. hier.
Der Entwickler von pischedule ist Änderungs- und Erweiterungsanregungen sehr aufgeschlossen gegenüber und wer solche hat sollte sie entweder im pilight Forum in English äussern oder hier in Deutsch.
Drei Scripts habe ich noch geschrieben, die die Benutzung von pischedule erleichtern - speziell da ich unterschiedliche Schaltzeiten an Wochentagen und Wochenenden haben will. Einfach in /usr/local/bin kopieren und dann pischedule einfach über die Befehlszeile starten und stoppen.
1) startPiScheduler.sh
2) stopPiScheduler.sh
3) restartPsScheduler.sh
In meiner /etc/crontab steht folgendes:
0 5 * * 7,1-4 root /usr/local/bin/restartPiScheduler.sh /home/pi/piScheduler/frWDSchedule.ini
0 5 * * 5,6 root /usr/local/bin/restartPiScheduler.sh /home/pi/piScheduler/frWESchedule.ini
startPiSchedulder.sh
#!/bin/bash
SCREEN_NAME="piScheduler"
if ! sudo screen -list | grep -q "$SCREEN_NAME"; then
cd /home/pi/piScheduler
if [[ $# < 1 ]]; then
ini="/home/pi/piScheduler/frWDSchedule.ini"
else
ini=$1
fi
sudo /usr/bin/screen -dmS "$SCREEN_NAME" /home/pi/piScheduler/piSchedule.py $ini
else
sudo screen -r $SCREEN_NAME
fi
Alles anzeigen
stopPiScheduler
#!/bin/bash
if ps -ef | grep "python.*piScheduler" | grep -v -q grep; then
sudo kill -2 $(ps -ef | grep "python.*piScheduler" | grep -v grep | awk '{ print $2; }')
rc=0
until [ $rc != 0 ]; do
v=$(ps -ef | grep "python.*piScheduler" | grep -v grep)
rc=$?
sleep 3
done
fi
Alles anzeigen
restartPiScheduler
#!/bin/bash
if [[ $# < 1 ]]; then
echo "Missing .ini"
exit 127
fi
if ! ps -ef | grep "python.*piScheduler" | grep -v -q grep; then
echo "No piScheduler active"
exit 127
fi
kill -2 $(ps -ef | grep "python.*piScheduler" | grep -v grep | awk '{ print $2; }')
#echo "Waiting for piScheduler to terminate..."
rc=0
until [ $rc != 0 ]; do
v=$(ps -ef | grep "python.*piScheduler" | grep -v grep)
rc=$?
sleep 3
done
#echo "Starting piScheduler with $1 now"
startPiScheduler.sh $1
Alles anzeigen