Kategorie-Archiv: Raspberry Pi

Google Analytics API – Aktuelle Besucherzahlen auf dem Raspberry PI

Heute hat mich Jörg von meintechblog.de gefragt, wie er denn am besten einige Daten über die Google Analytics API abrufen könnte. Gewünscht sind

  • aktuelle Besucherzahl (live)
  • Seitenzugriffe des aktuellen und des letzten Monats

Dem nehme ich mich doch gerne an und mache direkt einmal einen Blog-Post daraus.

Grundlage für den Zugriff auf eine GA-Property per API ist ein sogenannter Service-Account. Dieser bekommt dann Zugriff auf die einzelnen Properties und kann von dort dann auch Daten über die API abrufen. Klingt erstmal einfach, oder? Weiterlesen…

GPIO: Erste Schritte mit dem Raspberry Pi

Vor einiger Zeit habe ich eine Artikelserie über das Thema Hausautomatisierung geschrieben. Mittlerweile steht das ganze Zeug leider relativ ungenutzt in der Gegend rum. Das soll sich nun ändern. Und zwar möchte ich nun etwas mit GPIO rumspielen – also den Pins auf dem Raspberry. Ich habe sowohl das Model der ersten generation, als auch der zweiten Generation hier. Da die Pins vom neueren Modell vom Touch-Display belegt sind, nutze ich das ältere Modell. Aber es sollte alles auch mit der neusten Generation funktionieren.

Also habe ich mir ein Start-Kit bestellt, damit ich nicht alles einzeln zusammensuchen muss. Sicher etwas teurer, dafür hat man jede Menge Kram zum spielen dabei. Alles verpackt in einer kleinen praktischen Plastikbox.

Als erstes habe ich wiringPi installiert. Der Build dauert eine ganze Weile – also ruhig einen Kaffee holen in der Zeit. Weiterlesen…

Mini-Touch-Display am Raspberry Pi 2

Vor ein paar Tagen habe ich ein Foto gesehen, auf dem ein Raspberry Pi mit einem Touch-Display im Gehäuse zu sehen war. Wer dieses Blog verfolgt, weiß dass ich schon vor einiger Zeit ein Hausautomatisierungsprojekt mit dem Raspberry Pi der ersten Generation gestartet habe. Die Beiträge laufen nach wie vor sehr gut auf dem Blog und werden viel gelesen.

Da ich für den Touchscreen ein Raspberry Pi 2 brauchte, musste ich mir fix eine Einkaufsliste zusammenstellen. Alles zusammen kostet ungefähr 100 Euro.

Dinge wie HDMI-Kabel, USB-Maus, USB-Tastatur und Netzwerkkabel hatte ich noch im Haus. Keine zwei Tage später lag das gute Stück dann auch schon in der Packstation. Das ging fix!

Ich hab die Version mit Gehäuse bestellt, da dort alles perfekt zusammen passt und ich nicht erst noch groß rumbasteln muss. Leider ist das Gehäuse in mehrere Plexiglasteile zerlegt und will erst zusammengebaut werden. Dabei ist jedes Stück von beiden Seiten mit einer Art Papier überzogen, was erst müßig abgeknibbelt werden will. Nerv!

Das alles ist mit dem kleinen Anleitungszettel aber kein Problem. In den Rezensionen bei Amazon sind ein paar Meinungen von unfähigen Menschen zu finden, die das Gehäuse nicht zusammengebaut bekommen – davon nicht beirren lassen. Jeder der etwas logisch denken kann, sollte das Teil zusammen bekommen. Immerhin ist ja sogar noch eine Zeichnung dabei! Statt dem Deckel kommt natürlich das Touch-Display drauf. Dieses ist auf einer Seite nur eingeklemmt, sodass man es hochklappen kann, um an die übrigen Pins des Raspberry zu kommen. Gut die Hälfte ist allerdings schon mit dem Display belegt.

Die Installation geht recht einfach von der Hand. Ich habe ein frisches Image per BitTorrent geladen (der normale HTTP-Mirror ist sowas von lahm) und das Ganze mit dd auf die neue SD-Karte gepumpt. Wie genau das geht, findet man auf etlichen Seiten im Netz. Das Display läuft übrigens nur mit Raspbian Wheezy und nicht mit RaspBMC oder sowas.

Danach muss man einfach der Anleitung auf dem beigelegten Zettel folgen. Jeder, der schon einmal eine Shell und Nano oder Vi bedient hat, wird das locker schaffen. Ich bin auch kein UNIX-Crack und habe es ohne jedes Problem beim ersten Versuch hinbekommen. Hierfür ist natürlich eine Internetverbindung erforderlich. Ansonsten kann man die neuen Pakete nicht herunterladen.

Und das wars auch schon – nach gut einer Stunde inkl. auspacken stand ein Raspberry Pi mit Touchdisplay auf dem Tisch. Schon ein lustiges Gefühl. Selbst in der Welt von Smartphones und Tablets, ist ein UNIX auf einem so kleinen Teil doch noch etwas besonderes. Im ersten Moment habe ich sogar vergessen, dass es ein Touch-Display ist und Wheezy weiterhin mit Maus und Tastatur bedient.

Für kleine Elemente ist das Display aber wirklich anstrengend per Touch zu bedienen. Ich muss das Display auch noch etwas Kalibrieren, da die Klicks momentan ein Stück zu weit links landen. Aber das ist sicherlich auch kein Akt.

RaspberryTouch1

RaspberryTouch2

RaspberryTouch3

RaspberryTouch4

RaspberryTouch5

RaspberryTouch6

RaspberryTouch7

Ich bin gespannt, was ich dem kleinen Teil so alles anstellen werde.

Hausautomatisierung: Meine aktuellen Komponenten

Immer wieder bekomme ich Anfragen, welche Komponenten ich denn nun eigentlich genau im Bereich der Hausautomatisierung einsetze. Gerade vor ein paar Minuten habe ich folgende Anfrage erhalten

Sehr geehrter Herr Kleine,

ich bin eben durch Zufall auf Ihrer Webseite gelandet. Ich interesse mich für das Projekt Haussteuerung.

Könnten Sie mir Ihre Einkaufsliste zukommen lassen? Da es für ich doch recht schwer ist, genau zu indentifizieren welches System nun gut funktionert. Ich habe noch nichts, also müsste ich die Liste angefangen vom Raspberry bis zum Sender/Empfänger bekommen.

Wäre wirklich klasse.

Vielen Dank

Damit auch wirklich alle etwas davon haben, möchte ich die Liste hier einmal komplett vorstellen. Aktuell sind es noch nicht besonders viele Komponenten, das ist richtig. Aber das System ist darauf ausgelegt, kontinuierlich erweitert zu werden. Ausgelegt ist aktuell alles auf Intertechno und HomeMatic. Zweiteres ist zwar etwas teurer, aber dafür zuverlässiger (dank bidirektionaler Verbindung). Aber nun zur Liste. Weiterlesen…

Projekt Raspberry Pi: Anwesenheit per SNMP ermitteln – Part 8

Ich habe schon öfter davon gelesen, dass manche ihre Anwesenheit per Bluetooth-Dongle am Raspberry Pi überwachen. Das funktioniert bestimmt auch gut – aber warum sollte man noch ein USB-Port mehr belegen und noch Geld für einen USB-Dongle ausgeben, wenn es noch viel einfacher geht – und zwar mit den Mitteln, die man schon zu Hause im Einsatz hat. Alles was man dazu benötigt, ist ein SNMP-fähiger Router und ein Smartphone mit WiFi-Zugang.

Der Plan sieht folgendermaßen aus: Sobald ich zu Hause bin, verbindet sich mein iPhone automatisch mit meinem WLAN. Natürlich bekommt es dann eine vom DHCP eine IP-Adresse zugewiesen. Anhand der registrieren Mac-Adresse können wir also überprüfen, ob ich zu Hause bin. Natürlich könnte man das Ganze auch mit einem einfachen Ping lösen (das geht sogar von Haus aus), aber leider geht das iPhone nach einer Zeit in den Standby-Modus und beantwortet keinen Ping mehr – das ist also sehr unzuverlässig. Der Plan ist also, den Router nach der Anwesenheit des iPhones zu fragen.

Schritt 1: Statische IP für das iPhone

Damit man das iPhone eindeutig identifizieren kann, muss man dafür sorgen, dass kein anderes Gerät im Netz irgendwann mal die entsprechende IP bekommt. Der Einfachheit halber, lösen wir das über den DHCP. Per Mac-Adresse vergeben wir also immer die selbe IP an das Smartphone. Auf dem iPhone bekommen wir Mac-Adresse über folgenden Menupunkt heraus: Settings / General / About / Wi-Fi Address (bzw. Einstellungen / Allgemein / Info / WLAN-Adresse). In meinem Fall bekommt es (weiterhin) die 106 im Netz.

Dieser Schritt ist zwar nicht unbedingt notwendig, da wir mit Mac-Adressen arbeiten werden, aber es hilft doch eindeutig die Übersicht zu behalten.

Schritt 2: SNMP-Variable ermitteln

Nun ist das SNMP leider nicht das einfachste Protokoll und ich stehe noch ganz am Anfang das Ganze zu verstehen. Unter SNMP gibt es den sogenannten Object-Tree. Um eine Konfigurationsvariable auszulesen, braucht man also den entsprechenden Pfad im Baum – klar soweit. Aber welche Variable kommt in Frage, um die Anwesenheit zu kontrollieren?

Erstmal schauen wir mit snmpwalk, was es denn alles auf dem Gerät zu der iPhone-IP alles gibt:

Leider ändert sich keines der gelisteten Ergebnisse, wenn man die WLAN-Verbindung am iPhone kappt.

Variablen

Die Variable ipNetToMediaPhysAddress (hier dokumentiert), wandelt eine IP-Adresse in eine physische Adresse (Mac-Adresse). Die Idee: Wenn das iPhone nicht mehr im Netz ist, kann man die physikalische Adresse auch nicht mehr ermitteln.

Funktioniert aber leider nicht. Mit einem Watch habe ich probiert, was passiert wenn ich das WLAN am iPhone ausschalte: Nach 5 Minuten habe ich immer noch die selbe Antwort erhalten. Nicht gut also.

Im offiziellen Wiki ist beschrieben, wie man eine Lösung mit SNMP realisiert. Leider ist das dort genutzte Objekt atPhysAddress (hier dokumentiert) als deprecated angegeben:

Wie wir uns gemerkt haben, sollte das iPhone die 106 bekommen. Ausgerechnet dieser Eintrag verhält sich anders und liefert ein Ergebnis, welches nicht gerade nach einer Mac-Adresse aussieht. Wenn man etwas genauer hinsieht, wird aber aus irgend einem Grund nur versucht die Mac-Adresse in einen String zu wandeln. Seltsam. Ein HEX-to-String-Converter bringt hier Licht ins Dunkle. Auf jeden Fall ist es aber das richtige Gerät.

Nachdem ich das WLAN am iPhone für ungefähr 15-20 Minuten deaktiviert hatte, ist der Eintrag aus der Liste dann auch verschwunden. Funktioniert also. Weiter im Text.

Schritt 3: Installation nötiger Software

Damit SNMP unter Perl verfügbar ist, müssen wir uns erst einmal das entsprechende Paket per cpan installieren:

Leider funktioniert die Installation bei mir nicht, und bricht mit folgender Meldung ab:

Daher versuchte ich mein Glück mit cpanminus:

Nach zirka 15 Minuten war die Installation erfolgreich:

Schritt 4: FHEM konfigurieren

Den Inhalt der Datei könnt ihr von hier kopieren.

Was nun noch fehlt, ist die Konfiguration des neuen Gerätes. Dafür arbeiten wir mit PRESENCE. Was dieser „Gerätetyp“ alles kann, steht sehr gut beschrieben in der Dokumentation von FHEM.

Weiterhin habe ich konfiguriert, dass nach 15 Minuten Abwesenheit des iPhones, alles im Wohnzimmer abgeschaltet werden soll (wobei WohnzimmerAlles ein Struct ist, welches alle Lampen enthält).

Nach einem Neustart von FHEM sollte man dann folgendes in der Weboberfläche erkennen.

FHEM iPhone Present

Projekt Raspberry Pi: Kommandos per Button in FHEM ausführen

Michael hat mich in einem anderen Beitrag folgendes gefragt:

Hallo Matthias,
eine super Serie. Ich bin gerade dabei Fhem von Raspbian zu Raspbmc umzuziehen, da sind die Post sehr hilfreich. Lässt Du XBMC die ganze Zeit parallel laufen oder beendest Du es, um Ressourcen zu sparen?
Ich schalte den Raspberry Pi abends aus. Gibt es eine Möglichkeit dies über einen Button in Fhem zu realisieren?
Beste Grüße,
Michael

Die Antwort ist: Ja, klar! Wenn man sich die FHEM-Befehlsreferenz durchliest, liest man auch von Shell-Commands. Doch wie führt man diese aus? Folgendes bauen wir zusammen:

Dummy-Attribut:

Set the device attribute dummy to define devices which should not output any radio signals. Associated notifys will be executed if the signal is received. Used e.g. to react to a code from a sender, but it will not emit radio signal if triggered in the web frontend.

Notify-Define:

Execute a command when received an event for the definition <pattern>. If <command> is enclosed in {}, then it is a perl expression, if it is enclosed in „“, then it is a shell command, else it is a „plain“ fhem.pl command (chain). See the trigger command for testing it.

Möglichkeit 1: Einen Schalter umbauen

FS20 ist nicht konfiguriert, macht aber nichts (und wird von meinem auf HomeMatic konfigurierten Stick auch nicht unterstützt). Eigentlich sogar gut, da ich es als Indikator dafür nutzen kann, die entsprechenden Dummy-Buttons ohne Funktion damit zu kennzeichnen. Wie oben gesehen, sorgt das Dummy-Attribut dafür, dass keine Signale versendet werden. Perfekt also – wenn auch etwas umständlich gemacht. Ein notify wird aber dennoch ausgeführt – dieses nutzen wir also, um einen Befehl auszuführen.

Mit dem Befehl eventMap, kann man die Standard-Kommandos umbenennen. So heißt „off“ ab jetzt „speak“. Den On-Button entfernen wir, indem wir per webCmd nur noch den speak-Befehl angeben.

Um zu testen, ob es funktioniert, sende ich „test“ an die Wall. Wenn man nun per SSH angemeldet ist, sieht man die Ausgabe auch sofort. Funktioniert also!

Möglichkeit 2: Einen Dummy anlegen

Beim Erstellen der ersten Möglichkeit, ist mir folgendes in den Sinn gekommen:

Wir legen ein Dummy-Gerät an. Dieses hat noch keine Kommandos, also legen wir welche an (so viele wie man möchte). In diesem Fall nur „test“. Per notify lassen wir uns benachrichtigen, wenn ein entsprechender Befehl gesendet wurde. Das schöne: Wir können beliebig viele Befehle unter einem „Dummy-Gerät“ anlegen und mit verschiedenen Notify-Actions, unterschiedliche Aktionen ausführen. Perfekt!

Ich würde sagen: Frage beantwortet, oder Michael?

Raspberry Pi: Zugriff auf FHEM per HTTPS sichern

Da man die Passwörter nicht per Klartext durch das Web jagen möchte, ist es ratsam, eine gesicherte Verbindung zu nutzen. Um die nötigen Zertifikate zu erstellen, braucht man folgende Pakete:

Danach wechseln wir in das richtige Verzeichnis für die Zertifikate und erstellen diese:

Danach folgen einige Fragen zu Standort und Name:

Nun bewegen wir die neuen Daten noch an die richtige Stelle und setzen ein paar Berechtigungen:

Nun fügen wir noch folgende Zeile in die Konfiguration /opt/fhem/fhem.cfg ein

Nach einem Neustart von FHEM ist das Webfrontend nur noch über HTTPS erreichbar. Natürlich ist das Zertifikat nicht signiert und die gängigen Browser werden sich beschweren, dass die Verbindung nicht sicher sei, aber verschlüsselt wird die Verbindung trotzdem.

Es ist zu beachten, dass das Attribut die Smartphone- (Port 8084) und Tablet-Version (Port 8085) separat angegeben werden muss:

Da ich diese Ports aber nicht aus dem Internet freigegeben habe, werde ich die Verbindung dorthin auch nicht sichern. Das ist aber jedem selbst überlassen – schaden kann es am Ende nicht.

Raspberry Certificate