RFM69-Timing
Um den Empfang mindestens eines Wecksignals während der Wachphase sicherzustellen, muss das RFM69-Modul aufwachen (700 Mikrosekunden), für die Dauer eines Senderahmens wachbleiben (85,3 Millisekunden) und zur Sicherheit vor dem Übergang zur Idle-Phase noch die Dauer eines Daten-Slots (853,3 Mikrosekunden) lauschen. Daraus ergibt sich eine erforderliche Wachphase von rund 86,9 Millisekunden.
Allerdings lassen sich die Wach- und Schlafperioden des Moduls nur als Vielfache des Timer-Ticks von knapp 4,1 Millisekunden einstellen. 21 Ticks entsprechen lediglich 86,1 Millsekunden, sodass eine ausreichend lange Wachphase 22 Ticks erfordert, also 90,1 Millisekunden. Entsprechend geht das Modul anschließend neunmal so lang in den Idle-Betrieb, gut 811 Millsekunden. Damit ergibt sich eine Gesamtlänge des Empfangsrahmens von etwas über 0,9 Sekunden.
Die Implementierung
Zwei Programme benötigt der Raspberry Pi auf der Empfangsseite zum Aufwecken und Antworten. Das Tool rfwait programmiert das RFM69-Modul kurz vor dem System-Shutdown so, dass es im Intervallbetrieb nur auf seine eigene RFID hört (Abbildung 4, Mitte). Der Daemon rfrespond lädt bei jedem Systemstart und fragt beim RFM69 nach, ob eine Wecknachricht eingegangen ist (Abbildung 4, links).
Falls ja, liest Rfrespond die RFID des Weckenden (Source RFID) aus und sendet eine Empfangsquittung, diesmal mit der RFID des Weckenden als Ziel- und der eigenen als Quell-RFID. Ging kein Datagramm ein, wartet der Daemon auf weitere und quittiert sie bei Eingang. Bevor das Modul in den Intervallbetrieb gehen kann, gilt es, den Daemon beim Herunterfahren des Systems zu stoppen (Abbildung 4, Mitte).
Der Raspberry Pi auf der Sendeseite benötigt zum Senden des Wecksignals noch rfwake (Abbildung 4, rechts). Dieses Programm arbeitet so lange periodisch den Senderahmen ab, also das Weckdatagramm gefolgt von der Empfangsphase, ab bis es eine Empfangsquittung erhält. Ist der Gerufene wach und die Verbindung ungestört, erfolgt das umgehend. Muss der zu weckende Raspberry Pi dagegen erst booten, dauert es typischerweise gut 160 (beim RasPi 2) beziehungsweise 270 Senderahmen (RasPi 1), was rund 14 beziehungsweise 23 Sekunden entspricht.
Inbetriebnahme
Der Artikel geht im Folgenden von einer kompletten Neuinstallation aus. Falls Sie bereits ein System nach der Anleitung aus RPG 02/2014 betreiben, empfehlen wir Ihnen, die einzelnen Schritte (auch in den Skripten) zu analysieren und wenn nötig entsprechend zu adaptieren. Grundsätzlich gilt es, das Kernel-Modul spi_bcm2708 zu laden und die neuen Programme Rfwait, Rfwake und Rfrespond einzuspielen. Bei den Start/Stop-Skripten für das System erfolgen wesentliche Änderungen lediglich in /etc/default/rtc und /etc/init.d/raspi-rtc-power – und auch dort nur additiv.
Bei der ersten Inbetriebnahme mit aufgesteckter Platine und Funkmodul (Abbildung 5) droht beim Fehlen der entsprechenden Software, dass die Steckplatine die Stromzufuhr nach etwa 35 Sekunden kappt. Das tritt vor allem dann ein, wenn das Modul bereits in Verwendung war und sauber durch den System-Shutdown heruntergefahren wurde. Dieses Problem lösen Sie entweder durch das Trennen der Stromversorgung im laufenden Betrieb oder durch Festklemmen des Tasters, etwa mit einer Wäscheklammer. Nur ein RTC-Chip, der durch einen Power-on-Reset gegangen ist, würde die Stromversorgung auch permanent halten.

Abbildung 5: Über dem eigentlichen RTC-Power-Modul thront das RFM69-Modul mit Antenne und ermöglicht das An- und Abschalten des RasPi per Funk.
Als Grundsystem kommt Raspbian Wheezy [5] zum Einsatz. Nach dessen Inbetriebnahme aktivieren Sie in Raspi-config unter 8. Advanced Options den Unterpunkt A5 Device Tree. Über die weiteren Unterpunkte A6 SP und A7 I2C aktivieren Sie auch diese beiden Schnittstellen sowie – für den späteren Gebrauch – unter A4 SSH auch den SSH-Server. Auf der Kommandozeile konfigurieren Sie den WLAN-Stick für wpa-supplicant.
Anschließend richten Sie die notwendige Standardsoftware auf dem System ein (Listing 1). Um die GPIO des RasPi auf einfache Weise zu nutzen, benötigen Sie die Bibliothek Wiring Pi [6]. Die Software für das Ansteuern des Vorschaltboards finden Sie auf der Heft-DVD zu dieser Ausgabe sowie im Git-Repository des Autors [7]. Aus Letzterem richten Sie die Programme mit dem entsprechenden Aufruf zum Klonen ein (Listing 2).
Listing 1
$ sudo apt-get install i2c-tools git-core $ git clone git://git.drogon.net/wiringPi $ cd wiringPi $ sudo ./build
Listing 2
$ git clone https://gitlab.com/dieheins/RPiwakeonRnR.git $ cd RPiwakeonRnR $ sudo ./build [****************************************] [* building RasPi wake on Radio and RTC *] [****************************************] [...] [ ok ] Switching on RasPi-RTC-Power ...done. [ ok ] Start Radio respond daemon ...done. [*** done! ***]
Wichtig ist dabei das Ergebnis in den vorletzten beiden Zeilen. Ein [ ok ] ... zeigt hier an, dass die Stromversorgung dauerhaft aktiviert wurde (gegebenenfalls können Sie jetzt die Wäscheklammer abnehmen) und der Daemon Rfrespond korrekt läuft. Über Letzteres vergewissern Sie sich im Zweifelsfall auch über dessen Protokolldatei (Listing 3).
Listing 3
$ cat /var/log/radio.log starting <rfrespond> in daemon mode Listening on RF ID: 01:23:45:67:89:ab:cd:ef
Passt so weit alles, dann testen Sie jetzt, ob der Raspberry Pi im Wachzustand auf Funksignale reagiert. Hier sehen Sie, wie eine Bestätigung erfolgt, sobald das rufende System (Listing 4) einen Weckruf initiiert, den dann der Gerufene (Listing 5) seinerseits umgehend quittiert.
Listing 4
$ tail -f /var/log/radio.log gpio edge 25 rising rfwake 11:22:33:44:55:66:77:88 01:23:45:67:89:AB:CD:EF 25 1. Wake-Telegram sent. ACK received from called Station RFID 01:23:45:67:89:ab:cd:ef [...]






