In diesem Tutorial wollen wir gemeinsam mit Dir einen virtuellen Timer für das RevPi Connect konfigurieren.
In PiCtory findest Du das virtuelle Gerät “RevPi Timer”. Der “RevPi Timer ist eine Zeitschaltung, die minutengenau und auf wöchentlicher Basis ein- und ausschaltet. Pro RevPiTimer stehen Dir 16 Schaltzeiten zur Verfügung. Du kannst jedoch auch mehrere RevPi Timer nutzen falls dir 16 Schaltzeiten nicht genügen.
Wir stellen jetzt gemeinsam folgende Schaltzeiten ein:
#Timer | Einschalten | Ausschalten | ||
Tag | Uhrzeit | Tag | Uhrzeit | |
1 | Mo – Fr | 07:00 | Mo – Fr | 17:00 |
2 | Sa | 10:00 | Sa | 10:15 |
- Öffne Deinen Webbrowser.
- Gehe auf https://revolutionpi.com/de/tutorials/downloads/ und Lade “RevPiTimer Sample Code” herunter
- Entpacke die Datei und befolge die Anleitung zur Installation der readme.txt Datei
- Gib die IP-Adresse Deines RevPi Connects in die Adresszeile Deines Browsers ein.
Das Anmelde-Fenster öffnet sich.
- Melde Dich mit dem Benutzernamen “admin” an.
- Gib Dein Passwort ein. Du findest es auf dem Aufkleber an der Seite Deines RevPi Connects.
- Klicke auf “Login”
Du siehst jetzt den aktuellen Gerätestatus Deines RevPi Connects.
- Klicke auf das Register “Apps”.
- Klicke auf den Start-Button hinter dem Eintrag “PiCtory”, um PiCtory zu öffnen.
PiCtory öffnet sich.
- Wähle das virtuelles Gerät „RevPiTimer“ aus dem Gerätekatalog
- Ziehe es per Drag & Drop auf das Configuration Board.
- Klicke auf “File -> Save”. Damit speicherst Du die Konfiguration.
- Klicke auf “Tools -> Reset Driver”. Damit startest Du den Treiber neu.
Timer programmieren
Jeder Timer besteht aus einer Einschalt- und einer Ausschaltzeit.
Timer | Variable | Bedeutung |
1 | T1_ON_active_day | Einschalten Bitfeld: an Tagen und aktiv oder inaktiv |
1 | T1_ON_hour | Einschalten Stunden 00 bis 24 |
1 | T1_ON_minute | Einschalten Minuten 00 bis 59 |
1 | T1_OFF_active_day | Ausschalten Bitfeld: an Tagen und aktiv oder inaktiv |
1 | T1_OFF_hour | Ausschalten Stunden 00 bis 24 |
1 | T1_OFF_minute | Ausschalten Minuten 00 bis 59 |
2 | T2_ON_active_day | Einschalten Bitfeld: an Tagen und aktiv oder inaktiv |
2 | T1_ON_hour | Einschalten Stunden 00 bis 24 |
2 | T1_ON_minute | Einschalten Minuten 00 bis 59 |
2 | T1_OFF_active_day | Ausschalten Bitfeld: an Tagen und aktiv oder inaktiv |
2 | T1_OFF_hour | Ausschalten Stunden 00 bis 24 |
2 | T1_OFF_minute | Ausschalten Minuten 00 bis 59 |
… | ||
16 | T16_ON_active_day | Einschalten Bitfeld: an Tagen und aktiv oder inaktiv |
… |
Das Bitfeld für die Tage und die Aktivschaltung ist folgendermaßen codiert
T1_ON_active_day und T1_OFF_active_day
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Wert | Aktiv | So | Sa | Fr | Do | Mi | Di | Mo |
Für unser Beispiel müssen wir die folgenden Werte eintragen:
Timer1
Tage: Mo – Fr + Aktivschaltung, Uhrzeit Zeit: 7:00 bis 17:00 Uhr
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Wert | Aktiv | So | Sa | Fr | Do | Mi | Di | Mo |
Mo-Fr | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
Daraus ergibt sich der Binärwert „10011111“. Dieser entspricht dem Dezimalwert „159“. Diesen Wert müssen wir später ins Prozessabbild schreiben.
Für den Timer1 musst Du also die folgenden Werte ins Prozessabbild schreiben
Variable | Wert |
T1_ON_active_day | 159 |
T1_ON_hour | 7 |
T1_ON_minute | 0 |
T1_OFF_active_day | 159 |
T1_OFF_hour | 17 |
T1_OFF_minute | 0 |
Das kannst du z.B. mit dem Tool „piTest“ machen. Öffne dazu die Kommandozeile.
Schreibe folgende Kommandos:
piTest –w T1_ON_active_day,159 piTest –w T1_ON_hour,7 piTest –w T1_ON_minute,0 piTest –w T1_OFF_active_day,159 piTest –w T1_OFF_hour,17 piTest –w T1_OFF_minute,0
Timer2
Tage: Samstag + Aktivschaltung, Uhrzeit Zeit: 10:00 bis 10:15 Uhr
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Wert | Aktiv | So | Sa | Fr | Do | Mi | Di | Mo |
1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Daraus ergibt sich der Binärwert „10100000“. Dieser entspricht dem Dezimalwert „160“.
Für den Timer2 musst Du also die folgenden Werte ins Prozessabbild schreiben
Variable | Wert |
T2_ON_active_day | 160 |
T2_ON_hour | 10 |
T2_ON_minute | 0 |
T2_OFF_active_day | 160 |
T2_OFF_hour | 10 |
T2_OFF_minute | 15 |
Gib in der Kommandozeile folgende Werte ein:
piTest –w T2_ON_active_day,160 piTest –w T2_ON_hour,10 piTest –w T2_ON_minute,0 piTest –w T2_OFF_active_day,160 piTest –w T2_OFF_hour,10 piTest –w T2_OFF_minute,15
Timer Events abfragen
Ob ein Timer Event momentan aktiv ist, steht in der Variable „TimerStatus“. Das ist ein Bitfeld mit 16 Bits.
Ist das Bit gesetzt, ist der Timer an. Ist das Bit nicht gesetzt, ist der Timer aus.
TimerStatus
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
TimerNr | Timer8 | Timer7 | Timer6 | Timer5 | Timer4 | Timer3 | Timer2 | Timer1 |
Bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
TimerNr | Timer16 | Timer15 | Timer14 | Timer13 | Timer12 | Timer11 | Timer10 | Timer9 |
Um ein Programm zu schreiben, das auf den Timer1 reagiert, kannst du z.B. folgendes tun:
Finde heraus, wo das Bit von Timer1 im Prozessabbild versteckt ist:
piTest -v TimerStatus variable name: TimerStatus offset: 11 length: 16 bit: 0
Aha! Also im Byte 11, im ersten Bit!
Frage dieses Bit ab:
piTest -g 11,0 Get bit 0 at offset 11. Value 0
Wenn du nur den Wert ohne Text ausgeben möchtest, damit du diesen z.B. in einem Skript verarbeiten kannst, dann kannst du diesen auch einfach so abfragen:
piTest –q -g 11,0 0
Timer inaktiv schalten
Timer Inaktiv schalten bedeutet, dass die Schaltzeiten nicht überschrieben werden, aber nicht ausgeführt werden.
Wenn du einen Timer inaktiv schalten möchtest dann kannst du das machen, indem du das jeweilige „Aktiv“ Bit in der Variable „T1_ON_active_day“ und „T1_OFF_active_day“ löschst. Das ist das Bit 7.
Finde heraus, wo sich unsere Variablen im Prozessabbild befinden:
piTest -v T1_ON_active_day variable name: T1_ON_active_day offset: 13 length: 8 bit: 0 piTest -v T1_OFF_active_day variable name: T1_OFF_active_day offset: 16 length: 8 bit: 0
Die Offsets sind also die Folgenden:
T1_ON_active_day: 13
T1_OFF_active_day: 16
Schalte den Ein- und Ausschaltzeitpunkt inaktiv:
piTest -s 16,7,0 Set bit 7 on byte at offset 16. Value 0 piTest -s 13,7,0 Set bit 7 on byte at offset 13. Value 0
Varianten
Du möchtest nur einen Einschaltzeitpunkt definieren aber keinen Ausschaltzeitpunkt? Kein Problem! Setze das „Aktiv-Bit” nur beim Einschaltzeitpunkt und lasse es beim Ausschaltzeitpunkt weg.
Im Beispiel für Timer1 kannst du das z. B. so erledigen:
piTest -s 16,7,1 Set bit 7 on byte at offset 16. Value 1 piTest -s 13,7,0 Set bit 7 on byte at offset 13. Value 0