Mit Raspberry Pi Nabaztag/Karotz ersetzen

Dass ich mich gerne mit den Nabaztag/Karotz-Hasen beschäftigte, hatten wir ja bereits hier. Vor einigen Wochen grub ich das Thema aus den Tiefen meiner Elektronikschränke wieder auf und reaktivierte die Hasen und den dazugehörigen Raspberry Pi-Server. So nett sich der Nabaztag durch NabaztagLives und der Karotz durch OpenKarotz auch benutzen lassen, waren mir die Möglichkeiten nach der anfänglichen Begeisterung nun doch etwas zu limitiert. Doch was ist die Alternative? Der Raspberry Pi selbst!
Raspberry Pi
Erst einmal: was erwarte ich von so einem "Haustier" bei der täglichen Begleitung und was hätte ich gerne zusätzlich zu den vorhandenen Funktionen?
Eine Bestandsaufnahme:

Zusammengefasst wären die technisch gesehen folgenden drei groben Themenblöcke:

Die meisten dieser Aufgaben könnte ein Raspberry Pi ja eigentlich direkt übernehmen. Also wurde schnell ein RasPi wie folgt konfiguriert:

Anschließend wurden für die einzelnen Aufgaben PHP-Skripte geschrieben und per Crontab eingebunden. Einige Beispiele hierzu:

Einträge Crontab
*/10 * * * * php /home/pi/automated/time.php
*/3 * * * * php /home/pi/automated/imap_checker.php

E-Mail-Benachrichtigung mit der Abfrage des IMAP-Servers
<?php
$currentHour = date("H");
$currentMinute = date("i");
// beachte Ruhezeiten
if ((int)$currentHour < 22 && (int)$currentHour > 6) {
$unreadedMailsNew = 0;
// prüfe Anzahl der E-Mails am IMAP-Server
$mbox = imap_open("{SERVER: PORT/imap/ssl/novalidate-cert}INBOX", "USER", "PASSWORD");
$check = imap_mailboxmsginfo($mbox);
$unreadedMailsNew = $check->Unread;
// persistiere die aktuelle Anzahl der E-Mails (zum Vergleich bei der nächsten Anfrage)
$unreadedMailsOld = file_get_contents('/home/pi/automated/imap_checker_last_count');
file_put_contents('/home/pi/automated/imap_checker_last_count', $unreadedMailsNew);
$newMails = $unreadedMailsNew - $unreadedMailsOld;
imap_close($mbox);
// wenn die neue Anzahl höher ist als die alte, gebe die Notification aus
if ($newMails > 0) {
echo exec("omxplayer /home/pi/automated/sounds/AOL_Sie_haben_Post.mp3");
}
}

Zeit und Wetter vorlesen, Sprüche los lassen
<?php
// Optionen
// Pfade zu den Soundfiles
$pathSoundFilesClock = '/var/www/vl/broad_de/config/clock/de/';
$pathSoundFilesSurprice = '/var/www/vl/broad_de/config/surprise/de/';
$pathSoundFilesWeather = '/var/www/vl/broad_de/config/weather/de/';
// URL zum Wetterservice
$weatherUrl = 'http://api.openweathermap.org/data/2.5/weather?id=ID_DES_ORTES&APPID=API_KEY&units=metric';
$currentHour = date("H");
$currentMinute = date("i");
// beachte Ruhezeiten
if ((int)$currentHour < 22 && (int)$currentHour > 6) {
// lese die Uhrzeit vor, alle 5 Minuten vor eine vollen Stunde
if ((int)$currentMinute >= 0 && (int)$currentMinute <= 5) {
$path = $pathSoundFilesClock . $currentHour . '/';
$foundSoundFiles = array();
$dh = opendir($path);
while (false !== ($filename = readdir($dh))) {
if ($filename != '.' && $filename != '..') {
$foundSoundFiles[] = $filename;
}
}
play($pathSoundFilesClock . 'signature.mp3');
$selectedSoundFileId = array_rand($foundSoundFiles);
play($path . $foundSoundFiles[$selectedSoundFileId]);
play($pathSoundFilesClock . 'signature.mp3');
}
// lass einen zufallgenerierten Spruch alle 5 Minuten zwischen 10 Minuten und 50 Minuten einer Stunde
if ((int)$currentMinute > 5 && (int)$currentMinute < 50) {
$foundSoundFiles = array();
$dh = opendir($pathSoundFilesSurprice);
while (false !== ($filename = readdir($dh))) {
if ($filename != '.' && $filename != '..') {
$foundSoundFiles[] = $filename;
}
}
$selectedSoundFileId = array_rand($foundSoundFiles);
play($pathSoundFilesSurprice . $foundSoundFiles[$selectedSoundFileId]);
}
// sage das Wetter zur jeder Stunde um 55 Minuten
if ((int)$currentMinute >= 50) {
$weatherData = json_decode(file_get_contents($weatherUrl));
play($pathSoundFilesWeather . 'signature.mp3');
play($pathSoundFilesWeather . 'temp/' . (int)$weatherData->main->temp . '.mp3');
play($pathSoundFilesWeather . 'degree.mp3');
play($pathSoundFilesWeather . 'signature.mp3');
}
}
function play($path) {
echo exec("omxplayer --vol -100 {$path}");
}

Fazit:
Der erste Schritt ist getan, der RasPi läuft nun stabil und erledigt Strom-sparend einige mehr oder weniger sinnvolle Zeit-gesteuerte und Audiodatei-basiere Aufgaben. Und das Beste am Setting ist, das System ist sowohl Hard- wie auch Software-seitig höchst erweiterbar. Mehr dazu und das optische Upgrade des Ganzen, folgt in weiteren Artikeln.

Kommentare
© 2000-2017 ganje.de