Let your plant twitter if it needs to be watered

You often forget to water your plants? We already created a guide how to make sure you will be informed to water your plant when you’re coming home. But let’s try something that is a bit crazier! Wouldn’t it be cool if your plant would have it’s own Twitter account and tell you what to do?

What you need

  • one or more Mi Flora Plant sensors
  • a Raspberry Pi or PC running Home Assistant
  • a Twitter account

Installing the software

The base configuration of the Mi Plant sensor has been documented in our first flower sensor article.

Configuring the Twitter integration

If you have already a twitter account, go to apps.twitter.com and create a new App. You need to input some data and then you will get the consumer key/secret and you can create an access token.

Now, configure a notifier in your configuration.yaml file as follows:

notify:
  name: pflanzentwitter
  platform: twitter
  consumer_key: xxxxxxxxx
  consumer_secret: xxxxxxxx
  access_token: xxxxxxxx
  access_token_secret: xxxxxxx

Just copy the tokens from the developer web site into the configuration.

Create some twitter rules

Now, it your turn to find some cool post for your plant. Here is an example that I use. I’ve create a seperate automations.yaml file, that will be included in the main configuration:

- alias: Basil - sunny
  trigger:
    platform: numeric_state
    entity_id: sensor.basilikum_light_intensity
    above: 9800
  action:
    service: notify.pflanzentwitter
    data:
      message: "Basil: Nice sunny day today \U0001f60e"

- alias: Basil - dark
  trigger:
    platform: numeric_state
    entity_id: sensor.basilikum_light_intensity
    below: 100
  action:
    service: notify.pflanzentwitter
    data:
      message: "Basil: It's getting dark outside, good night! \U0001f303"

- alias: Basil - first light
  trigger:
    platform: numeric_state
    entity_id: sensor.basilikum_light_intensity
    above: 100
  action:
    service: notify.pflanzentwitter
    data:
      message: "Basil: Good morning! \U0001f305"

- alias: Basil - above 30 degree
  trigger:
    platform: numeric_state
    entity_id: sensor.basilikum_temperature
    above: 30
  action:
    service: notify.pflanzentwitter
    data:
      message: "Basil: Hot day today, it's over 30 degree celsius now. \U0001f321"

- alias: Basil - water warning 2
  trigger:
    platform: numeric_state
    entity_id: sensor.basilikum_moisture
    below: 25
  action:
    service: notify.pflanzentwitter
    data:
      # Cactus emoticon
      message: "Basil: What about some water for me? \U0001f335"

- alias: Basil - water warning 3
  trigger:
    platform: numeric_state
    entity_id: sensor.basilikum_moisture
    below: 20
  action:
    service: notify.pflanzentwitter
    data:
      # Skull emoticon
      message: "Basil: Water me or I will die of thirst. \U0001f480"

- alias: Basil - water warning 4
  trigger:
    platform: numeric_state
    entity_id: sensor.basilikum_moisture
    below: 10
  action:
    service: notify.pflanzentwitter
    data:
      # Skull emoticon
      message: "Basil: Help! Water! \U0001f480\U0001f480\U0001f480"

- alias: Basil - enough water
  trigger:
    platform: numeric_state
    entity_id: sensor.basilikum_moisture
    above: 50
  action:
    service: notify.pflanzentwitter
    data:
      message: "Basil: I'm feeling better, thank you for the water. \U0001f3a0"

You might ask yourself, what those crazy \U000xxxx numbers are? These are just emoticons. Have a look here for their unicode character codes.

Monitor your plants with Home Assistant

I love to have a lot of plants in my apartment, but unfortunately I sometimes forget to water them. So why not using modern technology to make sure, I don’t ever forget it again.

What you need

  • A Raspberry Pi or a Linux-PC with a supported Bluetooth LE interface.
  • Bluez
  • Mi Plant flower sensor for every plant
  • Home assistant

Setup

Home assistant

First you should install Home Assistant and make sure everything works well. Home assistant provides good documentation how to setup the platform.

Bluetooth software

The Linux bluetooth software might not yet be installed on your system.

Check communication with the plant sensor

The easiest way to make sure your PC can read data from the sensor is using the hcitool command line tool.

hcitool lescan
LE Scan ...
XX:XX:XX:XX:XX:XX (unknown)
XX:XX:XX:XX:XX:XX Flower mate

It might list a lot of other devices. Just make sure, it can also see the “Flower mate” device. If you can’t see this device, the distance between the flower sensor and your PC might be too large. Try moving the plant near your PC and check if it works then.

Integrate polling into Home Assistant

First, you need to poll the data from the sensor in Home Assistant:

sensor
  platform: miflora
  mac: xx:xx:xx:xx:xx:xx
  name: Flower 1
  force_update: false
  monitored_conditions:
   - moisture
   - light
   - temperature
   - conductivity

As the MAC address, you need to use the address that is shown in the hcitool lescan output.

Notify yourself when you come home

It doesn’t make much sense to send you a notification during the day that you should water the flowers. You might have forgotten it already when you come home. So let’s just send a notification when you come home.

Setup presence detection

Home Assistant documentation how to do this. There are a lot of different device trackers. Have a look and decide what works best for you.

Setup notifications

The next step is sending a notification to you. For this guide I use Pushetta, but Home Assistant provides a large number of notification mechanisms. Have a look at them and select the one that fits best for you.

An example notifier configuration might look like this:

notify
  name: pushetta
  platform: pushetta
  channel_name: mychannel
  api_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Define the automation

Now comes the new rule:

automation:
  alias: Alarm me to water plants
  trigger:
    platform: state
    entity_id: device_tracker.myname
    from: 'not_home'
    to: 'home'
  condition:
    condition: numeric_state
    entity_id: sensor.flower1_moisture
    below: 20
  action:
    service: notify.pushetta
    data:
      message: 'Water Flower 1!'

What does this do? First it checks it check, if you came from (device tracker changes from not_home to home) and check then if the moisture is below a well-defined threshold. The value might be a bit different for your plant, you need to adjust this. If the moisture is too low, it sends a notification via Pushetta.

You can combine multiple plants in the condition statement or create an automation for every single plant. I personally prefer the latter as I then know exactly which plant I should water.

Long-term monitoring

It often helps to have long-term data available to optimize not only watering, but also fertilize in the right intervals. While you can store the whole history within Home assistant, it isn’t really optimized for this use case. Therefore I recommend to use InfluxDB for this. This is a time-series database specifically designed to store sensor data over a long period. To visualize the data, I use Grafana. With this, you can create nice reports like this:
TODO

Überwachung von Waschmaschine und Trockner

Vermutlich kennen viele das Problem: Man legt die Wäsche in die Waschmaschine und vergisst sie dann. Wenn die Wäsche ein paar Stunden im Trockner liegt, ist das bei modernen Trocknern kein grosses Problem, aber die Wäsche in der Waschmaschine für einige Stunden zu vergessen ist kein Spass.

Nolan Gilley hat einen interessanten Artikel geschrieben, wie man Beschleunigngssensoren nutzen kann, um Waschmaschine und Trockner mit Home Assistant zu überwachen. Hier geht es zum englischsprachigen Artikel.

protoboard

I werde das demnächst mal selbst probieren. Es wäre sicher spannend, das Konzept auszubauen und statt des ESP8266 eine Bluetooth-Low-Energy chip zu nutzen und die Betriebsspannung direkt aus den Vibrationen zu erzeugen. Allerdings sind Piezo-Elemente für derartige Anwendungen recht teuer, weshalb sich das wohl finanziell nicht lohnt.

Home Assistant: Logging auf einen zentralen Server

Da der Raspberry Pi sehr günstig ist, ist es durchaus sinnvoll, mehrere Home Assistant Installationen im gleichen Haus parallel zu betreiben. Das bringt einige Vorteile:

  • Man kann z.B. Temperatur und Luftfeuchtigkeit über direkt angeschlossene Sensoren in verschiedenen Räumen überwachen.
  • Wenn eine Instanz ausfällt, läuft die zweite immer noch und kann die Automatisierungen weiterhin steuern.

Allerdings bietet es sich selbst mit mehreren Instanzen an, die Sensordaten an einen zentralen Server zu senden. Das erleichtert die spätere Datenanalyse erheblich.
Ich benutze hierfür InfluxDB. Mit unserem neuesten Patch ist es jetzt einfach, die Daten von verschiedenen Instanzen zu unterscheiden. Hierfür können zusätzliche Tags genutzt werden:

Die Konfiguration würde dann z.B. wie folgt aussehen:

influxdb:
  host: 192.168.1.199
  tags:
   instance: wohnzimmer
influxdb:
  host: 192.168.1.199
  tags:
   instance: balkon

Zugriff auf Home Assistant über das Internet

Eine Hausautomatisierung in der eigenen Wohnung ist ganz nett. Allerdings ist es für viele Anwendungsfälle doch sinnvoll, das System auch über das Internet bedienen zu können.

Um das ganze jedoch einigermassen sicher zu betreiben, muss man etwas Aufwand betreiben.

VPN

IC196810Ein “Virtual Private Network” ist wohl die sicherste Lösung. Die Steuerungssoftware ist damit nicht direkt aus dem Internet erreichbar. Selbst wenn die Lösung also eine Sicherheitslücke hat, kann nicht jedermann diese ausnutzen.Viele Internetanbieter bieten heute schon VPN-Zugänge an, fragen Sie doch mal bei ihrem nach, ob das angeboten wird und wie es konfiguriert werden muss.

Der Nachteil eines VPNs ist,d ass man die VPN-Verbindung erst aufbauen muss. Mit Technologien wie L2TP ist das zwar sehr einfach, allerdings gibt es doch ein paar Anwendungsfälle, wo es nicht perfekt passt. Wenn z.B. eine Drittsoftware auf dem Smartphone regelmässig Daten aktualisieren soll, muss das VPN immer eingeschaltet sein, was sich negativ auf die Akkulaufzeit auswirkt. Und wenn man vergisst, das VPN einzuschalten, funktioniert die Anwendung auf einmal nicht mehr.

HTTPS

Ein direkter Zugriff auf die Home Assistant Installation mittels HTTPS ist nicht die allersicherste Lösung, aber in der Regel doch ausreichend sicher. Es ist aber wichtig, sich regelmässig zu informieren, ob irgendwelche Sicherheitslücken bekannt sind und regelmässig Updates einzuspielen.

letsencryptFür HTTPS werden Zertifikate benötigt. Eine kostenlose und einfache Lösung hierfür ist Let’s encrypt. Es gibt bereits eine (englischsprachige) Anleitung auf der Home Assistant Webseite die die Konfiguration Schritt-für-Schritt beschreibt.

Zusätzliche Sicherheit kann eine Web-Applikations-Firewall bieten. Ein entsprechendes System kann man zwar selbst aufsetzen, dies ist allerdings relativ komplex. Eine andere Möglichkeit ist die Nutzung von Cloudflare.  Das sit sicher nicht die ultimative Sicherheitslösung, dafür aber gratis und einfach zu konfigurieren. Etwas zusätzliche Sicherheit ist besser als gar keine. In der Gratisversion kann man keine eigenen Regels definieren, aber ein Basisschutz gegen übliche Angriffe (nicht Home Assistant-spezifisch) ist vorhanden.

Vergleich beider Varianten

VPN HTTPS
Sicherheit Höchste Sicherheit, schützt auch vor Sicherheitslücken in Home Assistant. Ok, aber unbedingt regelmässige Sicherheitsupdates einspielen
Installation Relativ einfach,w enn der Internetprovider VPN-Dienste anbietet, sonst recht aufwändig. Schwieriger, allerdings sind viele Anleitungen verfügbar
Benutzung VPN muss immer erst aktiviert werden Sehr einfach, Home Assistant kann direkt aus dem Webbrowser bedient werden.

Sensor blockiert Home Assistant

I bin begeisterter Nutzer der Open Source Software Home Assistant. Allerdings hatte ich heute ein seltsames Problem. Das gesamte System funktionierte nicht mehr. Ein Neustart half auch nichts. Also musste ich doch etwas genauer schauen, was das Problem war. Nach einen Blick in die Logfiles stellte ich dann fest, dass einer meiner WLAN-Schalter nicht mehr funktionierte. Unglücklicherweise führte das dazu, dass das entsprechende Plugin hängenblieb und den Start von Home Assistant komplett blockierte.

Das ist ein echtes Problem für eine Lösung, die mit verschiedensten Sensoren arbeiten soll. In einer komplexen Umgebung wird es immer wieder einzelne Teile geben, die nicht korrekt funktionieren. Das sollte keine Auswirkungen auf die Funktion des Kernssystems haben. Ich hoffe, dieses Problem wird möglichst bald und nachhalten behoben.

Wenn deine Home Assistant Installation also nicht startet, lohnt es sich, die Logs anzuschauen. In den letzten Zeilen findet man evtl. ein Plugin, welches den Start blockiert.

Bluetooth-Probleme mit dem Raspberry Pi 3

Der “Bluetooth tracker” in Home Assistant ist eine spannende Funktion. Sie erlaubt es, festzustellen, ob Personen an einem bestimmten Ort sind (z.B. zu Hause). Dafür kann z.B. das Mobiltelefon genutzt werden.  Der Raspberry Pi 3 kommt mit einem integrierten Bluetooth chip. Das heisst, um die Tracking-Funktion auf Bluetooth-Basis zu nutzen, ist keine zusätzliche Hardware erforderlich. Ziemlich cool! Allerdings hatte ich ziemlich grosse Problem, diese Funktion zum Laufen zu bringen.Bluetooth war auf dem Raspberry Pi  aktiviert, dennoch hat Home Assistant keine Bluetooth-Geräte gefunden. Wo liegt das Problem?

Fangen wir mal an, auf der Kommandozeile nach Bluetooth-Geräten zu suchen:

[email protected]:~# hcitool scan
Scanning ...

Nichts! Dabei sind diverse Bluetooth-Geräte aktiv. Versuchen wir es als nächstes mit “blutoothctl”:

[email protected]:~# sudo bluetoothctl
[NEW] Controller B8:27:EB:76:70:7C raspberrypi [default]
[bluetooth]# devices
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:76:70:7C Discovering: yes
[NEW] Device 04:69:F8:xx:xx:xx 04-69-F8-xx-xx-xx
[NEW] Device 88:C6:26:xx:xx:xx 88-C6-26-xx-xx-xx
[bluetooth]# quit
[DEL] Controller B8:27:EB:76:70:7C raspberrypi [default]

Da sind die ganzen Geräte. Wieso findet hcitool die nicht? Gibt es evtl. Probleme mit einem Serverprozess?

[email protected]:~# systemctl status bluetooth
● bluetooth.service - Bluetooth service
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled)
   Active: active (running) since Mon 2016-06-13 15:53:36 UTC; 1h 54min ago
     Docs: man:bluetoothd(8)
 Main PID: 729 (bluetoothd)
   Status: "Running"
   CGroup: /system.slice/bluetooth.service
           └─729 /usr/lib/bluetooth/bluetoothd

Jun 13 15:53:36 raspberrypi systemd[1]: Starting Bluetooth service...
Jun 13 15:53:36 raspberrypi bluetoothd[729]: Bluetooth daemon 5.23
Jun 13 15:53:36 raspberrypi systemd[1]: Started Bluetooth service.
Jun 13 15:53:36 raspberrypi bluetoothd[729]: Starting SDP server
Jun 13 15:53:36 raspberrypi bluetoothd[729]: Bluetooth management interface 1.10 initialized
Jun 13 15:53:36 raspberrypi bluetoothd[729]: Sap driver initialization failed.
Jun 13 15:53:36 raspberrypi bluetoothd[729]: sap-server: Operation not permitted (1)

Das sieht etwas seltsam aus. Der Serverprozess läuft zwar, aber es gibt dort eine seltsame Fehlermeldung. Wenn man nun nach dieser sucht, findet man sehr viel Text dazu auf  raspberypi.org. Um das in den Griff zu bekommen, muss man wohl das SAP-Plugin abschalten.

Dazu bearbeitet man die Datei /etc/systemd/system/bluetooth.target.wants/bluetooth.service und fügt die Option “–noplugin=sap” an der “ExecStart”-Zeile an:

[Unit]
Description=Bluetooth service
Documentation=man:bluetoothd(8)

[Service]
Type=dbus
BusName=org.bluez
ExecStart=/usr/lib/bluetooth/bluetoothd --noplugin=sap
NotifyAccess=main
#WatchdogSec=10
#Restart=on-failure
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
LimitNPROC=1

[Install]
WantedBy=bluetooth.target
Alias=dbus-org.bluez.service

Wie sieht es jetzt aus?

[email protected]:~# systemctl status bluetooth
● bluetooth.service - Bluetooth service
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled)
   Active: active (running) since Mon 2016-06-13 17:56:35 UTC; 9s ago
     Docs: man:bluetoothd(8)
 Main PID: 19106 (bluetoothd)
   Status: "Running"
   CGroup: /system.slice/bluetooth.service
           └─19106 /usr/lib/bluetooth/bluetoothd --noplugin=sap

Jun 13 17:56:35 raspberrypi bluetoothd[19106]: Bluetooth daemon 5.23
Jun 13 17:56:35 raspberrypi bluetoothd[19106]: Starting SDP server
Jun 13 17:56:35 raspberrypi bluetoothd[19106]: Excluding (cli) sap
Jun 13 17:56:35 raspberrypi bluetoothd[19106]: Bluetooth management interface 1.10 initialized
Jun 13 17:56:35 raspberrypi systemd[1]: Started Bluetooth service.

Die Fehlermeldung ist weg. Allerdings zeigt

hcitool scan

weiterhin keine Bluetooth-Gerät an.

Wird fortgesetzt…

Home Assistant für Hausautomation

Wer auf der Suche nach Hausautomatisierungen-Software ist, wird auf viele verschiedene Projekte stossen. Im Moment ist das Thema “hip” und viele Entwickler arbeiten an Hausautomatisierungeprojekten. Viele Projekte legen den Hauptfokus auf die Visualisierung. Zwar ist eine gut aussehendes und gut bedienbare Benutzerschnittstelle wichtig, aber eigentlich sollte eine Hausautomatisierung die meisten Sachen automatisch tun.

Ein Projekt, welches im Bereich “Automatisierung” sehr flexibel ist ist Home Assistant. Die Systemarchitektur ist sehr klar und einfach. Es gibt eine saubere Trennung zwischen Visualisierung und Backend. Durch eine Webschnittstelle ist es einfach möglich, für die Visualisierung und die Steuerung ein eigenes GUI zu entwickeln und nutzen. Für mich persönlich ist es auch ein Vorteil, dass die Software in Python geschrieben ist, was die Erweiterung um zusätzliche Funktionalitäten vereinfacht.

Eine Home Assistent Architecture könnte wir folgt aussehen:

ha-architecture

KNX ist im Moment (Mitte Juni 2016) noch nicht unterstützt, aber ich arbeite gerade an einem Modul. Ich hoffe, dass dieses demnächst in Home Assistant integriert werden kann.

Einbinden des Edimax SP-1101W/SP2101W in Home Assistant

Die WLAN-Schalter Edimax SP-1101W and SP2101W werden von Home assistant standardmässig unterstützt. Ein kleines Problem sind allerdings Benutzername und Password. Beim Setup des Gerätes kann man zwar ein neues Passwort setzen, den Benutzernamen jedoch nicht. Diesen braucht man allerdings für Home Assistant.Mit etwas Probieren, habe ich diesen herausgefunden – es ist “admin”.
Damit sieht die Konfiguration wie folgt aus (IP-Adresse und Passwort entsprechend der lokalen Konfiguration eintragen):

switch:
  platform: edimax
  host: 
  username: admin
  password: 
  name: