go seven !

RaspberryPi – Mal wieder was Neues

Über den Mini-PC RaspberryPi hatte ich ja schon mehrfach berichtet (HIER, HIER, HIER). Da der kleine nun kurz vor dem Release steht (am 20. Februar ist es soweit!), fasse ich hier noch einmal ein paar Informationen zusammen.

Einsatzgebiet

  • Schulen in Entwicklungsländern
  • Home-Media-System (mit XMBC)
  • Car-Media-System (das will ich mal probieren…)
  • Bastler-System / Entwickler-Board

Hardware

  • Board A
    • 700MHz ARM11 Prozessor
    • 128MB SDRAM
    • OpenGL ES 2.0 Unterstützung
    • 1080p30 H.264 Decodierung
    • Composite und HDMI Videoausgang (HDMI mit Audio)
    • 2x USB 2.0
    • SD/MMC/SDIO Speicherkartensteckplatz
  • Board B
    • 700MHz ARM11 Prozessor
    • 256MB SDRAM
    • OpenGL ES 2.0 Unterstützung
    • 1080p30 H.264 Decodierung
    • Composite und HDMI Videoausgang (HDMI mit Audio)
    • 2x USB 2.0
    • SD/MMC/SDIO Speicherkartensteckplatz
    • 10/100 MBit Ethernetschnittstelle

Preise

Die Preise sind immer noch die selben – 25$ für das Kleine und 35$ für das große. Das entspricht derzeit 19,10 € und 26,78€, Versand kommt natürlich noch drauf – eventuell auch Steuern.

Weiteres…

Ich habe hier ein kleines Interview von mit Eben Upton. Leider in Englisch…:

[youtube]http://www.youtube.com/watch?v=fbaVNtva7Mo[/youtube]

Shop

So, einige von euch werden jetzt sicher ganz heiß sein und den kleinen PC gleich shoppen wollen. Ich muss euch bremsen. Bis zum 20. Februar müsst ihr euch noch gedulden. Vorbestellungen gibt es nicht. Wenn es dann soweit ist, ist hier der Shop:

raspberrypi.com

Website RaspberryPi

raspberrypi.org

PT

RaspberryPi kurz vor dem öffentlichen Release [UPDATE]

Vom RaspberryPi, dem miniatur-PC mit den Ausmaßen einer Kreditkarte hatte ich ja schon berichtet. Einige der Alpha und Beta Boards sind ja nun auch schon im Umlauf, doch als Normalbürger wartet man nun schon seit ende November 2011 darauf, endlich die 25 bzw. 35 Dollar loszuwerden. Nun, ich kann gute Nachrichten verkünden: In den nächsten Tagen geht es los.

Dann kann man (und ich) endlich zugreifen und sich den kleinen ARM-PC sichern. Um die Vorfreude etwas zu schüren hier ein paar Bilder vom finalen RaspberryPi:

RaspberryPi von Oben

Ein blick auf das 3D-Modell des RaspberryPi von oben…

RsspberryPi von der Seite

…und den Seiten…

RsspberryPi von der Seite

…gut zu erkennen hier: USB-Stromversorgung (Links) und HDMI-Ausgang (Rechts)…

…der Audioausgang und der S-Video-Ausgang.

[UPDATE]

Heute wurde bekannt gegeben, dass das Release am 20. Februar stattfinden wird.

[UPDATE 2]

Ich habe noch ein kleines Interview mit dem “Erfinder” Eben auf Youtube geladen…

[youtube]http://www.youtube.com/watch?v=fbaVNtva7Mo[/youtube]

PT

pi-topCEED im Test

formfactorWas einem RaspberryPi meist fehlt ist ein Display. Viele Lösungen gibt es, doch die meisten sind ziemlich gebastelt – so wie ich das sehe. Glücklicherweise gibt es nun eine passable Lösung, die gut aussieht und trotzdem nicht vom basteln abhält: Den pi-topCEED.

Ich habe die Indigogo-Kampagne unterstützt und somit schon jetzt einen zum Testen hier. Also schnell meinen vorhandenen RaspberryPi 3 eingebaut und los geht es.

Der CEED kommt in einer wertigen Papp-Verpackung. Beigelegt werden ein Netzteil, die Display-Converter-Platine (bereits eingebaut) und ein Proto-Shield. Dieses kann an die Converter-Platine angeschlossen werden und ist damit direkt über ein Flachbandkabel mit den GPIO des Raspberry verbunden, welche auch nach außen geführt sind.

expansionPraktisch an dieser Stelle: 3V3, 5V und GND sind mehrfach vorhanden. Zusätzlich findet man SPDIF – welches wohl aus dem HDMI-Signal extrahiert wird.

Alle Platinen (Display, Proto und Pi) sind auf einer Magnet-Schiene angebracht und können, falls nötig, verschoben werden. Praktisch.

Das 14 Zoll Display und dessen Rahmen sind gut verarbeitet. Das Display ist hell und wenn man direkt darauf blickt gut ablesbar, die Farbqualität ist gut. Allerdings ist die Blickwinkelstabilität eine Kathastrophe. Hier hätte ich mir deutlich mehr erwartet. Horizontal ist alles gut. Aber vertikal reicht schon ein Winkel von etwas mehr als 10 Grad und das Bild wird entweder milchig oder schwarz wird plötzlich weiß. Für ein Produkt, welches im wesentlichen ein Display ist, ist das schon ein wenig armselig.

Etwas ausgeglichen wird dies durch den verstellbaren Ständer. Somit kann man den Stehwinkel anpassen, um oben genannte Probleme zu umgehen. Die Display-Platine bietet auch einen USB-Anschluss. Diese war eigentlich zur Stromversorgung des Pi gedacht, doch dies wird mit dem (auf dem Bild nicht angezeigten) Flachbandkabel gemacht. Doch da auch andere Kleinstcomputer genutzt werden können sollen, blieb dieser erhalten. Eine gute Sache.

Das Gehäuse mit Platinen und Display ohne Raspberry gibt es ab 70 Dollar – mit sind es knapp 100 Dollar. Zumindest war es so in der Kampagne. Jetzt liegt der Preis bei 100 Dollar ohne und 139 Dollar mit Raspberry. Es kommen aber noch Steuer hinzu.

Doch wo kaufen? Bisher: Nirgendwo in der EU, nur beim Hersteller in Asien direkt.

 

ESP8266 oder ESP32 als Home Assistant Schalter und Sensoren

In letzer Zeit experimentiere ich viel mit der Cloud-freien Heimautomatisierungssoftware Home Assistant. Bister habe ich viele Sensoren und Aktoren einzeln betrieben, quasi unabhängig von einem zentralen System. So loggte meine Wetterstation in eine Datenbank, ebenso mein Stromzähler in eine andere. Dafür gab es dann jeweils eine Visualisierung. Meine Bewässerungssteuerung wurde von einem Raspberry Pi mit einer selbst gebauten Oberfläche verwaltet. Nun jedoch möchte ich die Dinge zusammenführen und kosolidieren, um eine bessere Usability zu haben und den WAF zu verbessern.

Kürzlich habe ich daher bereits über meine Integration eines Stromzählers in Home Assistant geschrieben, nun stehen meine Bewässerungssteuerung bzw. meine Relaissteuerung auf dem Plan. Bisher habe ich dafür oben genannten Raspberry Pi verwendet – doch diesen mit einem Raspbian 99% des Tages nichts tun zu lassen halte ich für Verschwendung.

Deswegen kommt nun ein ESP8266-basierter Mikrocontroller (Wemos D1 mini) zum Einsatz, den ich mit der Arduino-IDE ein HTTP-Interface zum Setzen und Abrufen von Ausgängen und Eingängen ausgestattet habe. Beispielhaft für ein Wemos D1 mini mit dem offiziellen Relais-Schild werde ich den Code hier einmal zusammenfassen.

Arduino-Code

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

#ifndef STASSID
#define STASSID "WLAN-NAME"
#define STAPSK  "WLAN-PASSWORT"
#endif

const char *ssid = STASSID;
const char *password = STAPSK;

ESP8266WebServer server(80);

void handleRoot() {
   server.send(200, "text/plain", String(analogRead(A0))); // Testweise den Analogwert ausgeben
}

void handleSet() {
  for (uint8_t i=0; i<server.args(); i++){
    if (server.argName(i)=="D1") { digitalWrite(D1, server.arg(i).toInt()); }
  }
  server.send(200, "text/plain","OK");
}

void handleGet() {
  for (uint8_t i=0; i<server.args(); i++){
    if (server.argName(i)=="D1") { server.send(200, "text/plain", String(digitalRead(D1))); }
    }
  server.send(200, "text/plain","OK");
}

void setup() {
  //IO
  pinMode(D1, OUTPUT);
  digitalWrite(D1, OFF);

  //WIFI
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }

  //HTTP
  server.on("/", handleRoot);
  server.on("/set", handleSet);
  server.on("/get", handleGet);
  server.begin();
}

void loop() {
  // put your main code here, to run repeatedly:
  server.handleClient();
  MDNS.update();
  ArduinoOTA.handle();
}

Home Assistant-Code

Hier wird Beispielhaft die IP des ESP als 192.168.178.77 angenommen – dies ist natürlich anzupassen.


#Aktor Wemos D1 mini mit Rückmeldung
switch:
  - platform: command_line 
    switches:
      esp_aktor_001_d1:
        friendly_name: "Aktor 001 D1"
        command_state: "/usr/bin/curl 192.168.178.77/get?D1"
        command_on: "/usr/bin/curl 192.168.178.77/set?D1=1"
        command_off: "/usr/bin/curl 192.168.178.77/set?D1=0"
        value_template: '{{ value == "1" }}'

#Sensor Wemos D1 mini
  - platform: command_line
    name: "Aktor 001 A0"
    command: "/usr/bin/curl 192.168.178.77/get?A0"

Auf diese Weise kann der Relais-Status geschrieben und gelesen werden. Auch den Analog-Eingang kann man auswerten.

Natürlich bleibt es einem überlassen, mehr Ein- oder Ausgänge zu implementieren. Ich beispielweise nutze den erwähnten Wemos mit einem 8-fach Relais-Board, was diesen beinahe auslastet. Mit einem D32 oder ähnlichem wäre da bei weitem mehr möglich.

EasyMeter Stromzähler in Home Assistant einbinden

Unser Messstellenbetreiber nutzt die “smarten” Stromzähler der Firma EasyMeter GmbH, speziell den Easy Meter Q3M. Dies ist ein Drehstromzähler, der dahingehend “smart” ist, dass man einige Daten auslesen kann. Je nach Konfiguration des Messstellenbetreibers können die aktuelle Gesamtleistung, die Leistung pro Phase in Watt und die “verbrauchte” sowie eingespeiste Energie in Wattstunden ausgelesen werden. Dazu wird eine optische Schnittstelle namens “Info-DSS” bereitgestellt, die nichts anderes ist als eine unidirektionale Implementierung des SML Protokolls.

Über das SML Protokoll werden mittels sogenannter OBIS-Codes die oben genannten Informationen sekündlich über die Schnittstelle gepusht. Diese Daten muss man “nur” noch abgreifen und bereitstellen. Dazu benötigt man – zusätzlich zum bestehenden Home Assistant System – ein Gerät direkt am Zähler, dass die Daten der Info-DSS-Schnittstelle entgegennimmt und lesbar umwandelt. Ich nutze dafür einen Raspberry Pi (Zero W), aber auch andere Geräte mit einem Linux funktionieren. Die Anbindung funktioniert bei mir über einen IR-Lesekopf, den man sich aber auch selber bauen kann.

Auf meinem Raspebrry Pi habe ich dann die Software vzlogger installiert – wohlgemerkt ohne die Volkszähler-Middleware, die sonst die Speicherung und Darstellung der Daten übernimmt. Der vzlogger kann die aktuellen Daten problemlos allein auswerten und als json bereitstellen. Dafür ist in /etc/vzlogger.conf folgende Konfiguration notwendig:

{
  "retry": 0,
  "daemon": true,
  "verbosity": 3,
  "local": {
    "enabled": true,
    "port": 8084,
    "index": true,
    "timeout": 0,
    "buffer": -1
  },
  "meters": [
    {
      "enabled": true,
      "allowskip": true,
      "interval": -1,
      "aggtime": -1,
      "aggfixedinterval": false,
      "channels": [
        {
          "api": "null",
          "uuid": "abcdefgh-ijkl-mnop-qrst-uvwxyz012345",
          "identifier": "1-0:1.8.0*255",
          "aggmode": "max",
          "duplicates": 3600
        }
	  ],
      "protocol": "sml",
      "device": "/dev/ttyUSB0",
      "pullseq": "",
      "baudrate": 9600,
      "parity": "8n1",
      "use_local_time": true
    }
  ]
}

Wobei ich die uuid hier unkenntlich gemacht habe und der Übersicht halber nur einen “channel”, nämlich die Energiemenge “Verbrauch” erfasse. Nachdem die Datei gespeichert ist wird der vzlogger-Daemon neu gestartet:

sudo systemctl restart vzlogger

Und somit kann man die aktuellen Daten unter der IP des Raspberry Pi abrufen: http://[ip_des_pi]:8084 . Das Ganze könnte dann so aussehen:

{
	"version": "0.8.0",
	"generator": "vzlogger",
	"data":[ {
		"uuid": "abcdefgh-ijkl-mnop-qrst-uvwxyz012345", 
		"last": 1634638205040,
		"interval": -1,
		"protocol": "sml",
		"tuples": [ [ 1634638205040, 7418885.2847000007 ] ] 
	} ]
}

In dem Tuple steht also der aktuelle Zählerstand in Wh. Diesen müssen wir nun über Home Assistant auslesen, dazu wird in der Datei /config/configuration.yaml zuerst folgender Bereich eingefügt:

#Zählerstand Verbrauch
sensor:
  - platform: rest
    resource: http://192.168.178.202:8084/
    value_template: >
      {% for i in value_json.data %}
        {% if i.uuid == "abcdefgh-ijkl-mnop-qrst-uvwxyz012345" %}
           {{ '%.2f'%(i.tuples[0][1]) | float }}
        {% endif %}
      {% endfor %}
    method: GET
    name: "Zählerstand Verbrauch"
    unit_of_measurement: Wh
    device_class: energy

Zu beachten an dieser Stelle: Der String, der aus dem Tuple extrahiert wird, bekommt mittels ‘%.2f’% eine Begrenzung der Kommastellen auf 2. Sonst wird der Float regelmäßig mit einer unterschiedlichen Anzahl Kommastellenangezeigt, was die Lesbarkeit beeinträchtigt. Mittels | float wandel ich den String direkt in einen Float um, damit kann ein PC immer besser umgehen als mit String-Zahlen.

Nun könnte man über sensor.zahlerstand_verbrauch schon den aktuellen Zählerstand in Homeassistandt nutzen, aber unglücklicherweise nicht im neuen Energy-Management. Denn dafür muss der Sensor eine Eigenschaft mit state_class haben – die es aber Stand heute nicht gibt (Featue-Request läuft). Daher müssen einige wenige weitere Anpassungen in der /config/configuration.yaml vorgenommen werden:

homeassistant:
  customize:
    #grid consumption
    sensor.zahlerstand_verbrauch:
      state_class: total_increasing

Mit diesen Zeilen teilen wir Home Assistant mit, dass unser Zählerstand eine Gesamtsumme ist, die immer weiter wächst. So kann dann sensor.zahlerstand_verbrauch auch endgültig ins neue Energy-Management eingefügt werden:

Abschließend sei angemerkt, dass diese Integration im Prinzip mit allen Daten funktioniert, die der vzLogger produziert und das ist eine ganze Menge. Implementiert sind unter anderem das OMS-Protokoll, mit dem man funkende Wasserzähler, elektronische Heizkostenverteile und Wärmemengenzähler empfangen kann, aber auch diverse andere sind auf der Info-Seite vermerkt. Von der verfügbaren volkszähler-Implementierung für Home Assistant kann ich leider nur abraten. Diese bietet weder die Performance wie der hier dargestellte Ansatz, noch können die Daten ins Energy-Management einfließen. Auch würde man sich damit eine doppelte Datenhaltung ins Haus holen.