Tutorial RevPiTimer

In diesem Tutorial wollen wir gemeinsam mit Dir einen virtuellen Timer für das RevPi Flat 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

 

RevPiTimer Download
RevPiTimer Download
  • Entpacke die Datei und befolge die Anleitung zur Installation der readme.txt Datei

RevPiTimer Installationsanleitung
  • Gib die IP-Adresse Deines RevPi Flats 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 Flats.
  • Klicke auf “Login”

Du siehst jetzt den aktuellen Gerätestatus Deines RevPi Flats.

  • 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.

Konfiguration Speichern
  • 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