Mit der Hilfe eines Aqara Tür und Fenster Sensors ( Reed Kontakt Sensor ) kann am Gaszähler ( G4 RF1) über den Internen Magneten der aktuelle Verbrauch abgelesen werden ( 1 Imp = 0.1m³ ). Eingebunden ist das ganze wie bereits beim digitalen Stromzähler in Home Assistant ( HASSIO ). Dort kann man sich die Verbrauchswerte für die unterschiedliche Zeiten (Tag, Woche, Monat, Jahr) anzeigen lassen.

Benötigte Hardware

Benötigte Software

3D Gehäuse Tinkercad

Aufbau

Gaszähler Typ G4 RF1

Gaszähler G4 RF1

Bei meinem Gaszähler handelt es sich um das Model G4 RF1 von Actaris. 

Das Model G4 RF1 von Pipersberg ist baugleich soweit ich weiß. Daher sollte das Case für den Sensor auch hier passen.

Der Magnet befindet sich hinter der ersten roten Zahl nach dem Komma ( 1imp = 0.1m³ ).

Hassio configuration.yaml

# GASTZÄHLER      
counter:
    gaszaehler:
      initial: 0
      step: 1
      icon: mdi:meter-gas-outline 
# CAN ALSO BE ADDED TO Automation.yaml
automation:
# COUNTER INCREMENT 
- id: '1664298491581'
  alias: increaseCounter
  description: ''
  trigger:
  - type: turned_off
    platform: device
    device_id: c0d6f8ef97c5bffd76e0be955598bcfc
    entity_id: binary_sensor.openclose_8
    domain: binary_sensor
    for:
      hours: 0
      minutes: 0
      seconds: 0
  condition: []
  action:
  - service: counter.increment
    data: {}
    target:
      entity_id: counter.gaszaehler
  mode: single
# COUNTER RESET AT MIDNIGHT
- id: '1664298606458'
  alias: counterReset
  description: ''
  trigger:
  - platform: time
    at: 00:00:00
  condition: []
  action:
  - service: counter.reset
    data: {}
    target:
      entity_id: counter.gaszaehler
  mode: single 
# VIRTUAL SENSOR 
template:
  - sensor:
      - name: "Gaszaehler_m3"
        unit_of_measurement: "m³"
        device_class: energy
        state_class: total_increasing
        state: >
          {% set gas = states('counter.gaszaehler') | int %}
          {{ ((gas) * 0.1) | round(1, default=0) }}
  - sensor:
      - name: "Gaszaehler_kWh"
        unit_of_measurement: "kWh"
        device_class: energy
        state_class: total_increasing
        state: >
          {% set kwh = states('sensor.gaszaehler_m3') | float %}
          {{ ((kwh) * 10.5) | round(1, default=0) }}

# 10.5 NEEDS TO BE CHECKED AT YOUR GAS INVOICE ( Z-ZAHL )

Home Assistant grafische Darstellung

Mit der Hilfe eines ESP32 und eines einfachen IR Moduls kann am Stromzähler der aktuelle Stromverbrauch ausgelesen werden ohne das man den Stromzähler PIN benötigt. Auf der Suche nach einer Alternative zu der doch komplizierten WebServer Lösung bin ich auf die Arduino IoT Cloud Seite gestoßen. Nach kürzester Zeit hatte ich die Daten meines ESP32 + IR Moduls auf dem Handy Bildschirm.

Arduino IoT Cloud Remote App

Arduino IoT Remote App
Die Werte sind so niedrig da mein Solarkraftwerk zu dem Zeitpunkt Strom generiert hat.

Benötigte Hardware

  • ESP32-WROOM-32 D1 mini (AZ-Delivery)
  • IR Modul (TCRT5000) 
  • 3D Drucker + Filament
  • Lötstation mit Equipment
  • Einzeladern

Benötigte Software

Aufbau Gehäuse

Das neue Zählergehäuse findet man hier.

IR Modul TCRT5000 modifikation

Auf dem TCRT5000 befindet sich eine Lesediode und eine Schreibdiode. Die Schreibdiode wird auch als Näherungssensor verwendet wodurch es zu Problemen kommen kann beim Ablesen des Stromzählers. 

In meinem Fall habe ich die hellere (weiße Diode) einfach ausgelötet. In anderen Beiträgen habe ich gesehen, dass auch nur der Vorwiderstand entfernt wurde. 

Den TCRT5000 habe ich am ESP32 an die Pins G14, 5V und GND angeschlossen.

eHz Elektronischer Haushaltszähler

Das Gehäuse aus dem 3D Drucker passt beim eHz Elektronischen Haushaltszähler. Mit zwei Magneten wird das Gehäuse am Zähler befestigt da der Stromzähler Eigentum des Netzbetreibers ist! 

Die rechten beiden IR Dioden werden beim IR Lese-Schreibekopf verwendet (Volkszähler). Dabei wird permanent zwischen den Unterschiedlichen zur verfügung stehenden Zählerständen geschalten und diese ausgelesen (PIN muss beim jeweiligen Netzbetreiber angefragt werden).

Zähler Aufsteckmodul ESP32 + TCRT5000

Einrichten von Arduino IoT Cloud Remote

Nachdem man sich bei Arduino Cloud IoT registriert hat, kann man sich ein neues Projekt mit dem Button “Create” anlegen. Anschließend sind die Felder Devices, Network und Variables auszufüllen. Das Setup von Devices und Network ist eigentlich selbsterklärend, daher werde ich nicht genauer auf diese beiden Punkte eingehen.

Variables

Durch drücken des Add Button kann man eine Variable hinzufügen. In unserem Fall lautet die Variable “Strom”. Als Datentyp verwenden wir einen integer number mit der permission Read only. Bei send value geben wir on change (threshold: 0) an. Das ganze sollte dann so aussehen.

Die Variable Strom wird im Sketch angegeben und automatisch generiert. Das heißt sie muss im Code nicht extra deklariert werden (kann direkt verwendet werden).

Dashboard

Damit wir später an der Handy App das Diagramm zu sehen bekommen müssen wir unter Dashboards ein Chart hinzufügen mit dem Button “Add”. Hier muss man nur noch die Verlinkung zwischen Chart und der Variable Strom herstellen (rechts außen).

Code (Sketch)

/* 
  Sketch generated by the Arduino IoT Cloud Thing "Untitled"
  https://create.arduino.cc/cloud/things/xxxx-xxxx-xxxx-xxxx 

  Arduino IoT Cloud Variables description

  The following variables are automatically generated and updated when changes are made to the Thing

  int strom;

  Variables which are marked as READ/WRITE in the Cloud Thing will also have functions
  which are called when their values are changed from the Dashboard.
  These functions are generated with the Thing and added at the end of this sketch.
*/

#include "thingProperties.h"
#include <time.h>

/* Configuration of NTP */
#define MY_NTP_SERVER "2.europe.pool.ntp.org"
#define MY_TZ "CET-1CEST,M3.5.0,M10.5.0/3"

/* Globals NTP */
time_t now;
tm tm;

/* Sensor TCRT5000 PIN14 */
const int digital_pin = 14;
int state = 0;
int laststate = 1;
double watt = 0;
unsigned int counter = 0;

/* Update Time for Chart */
int period = 60*1000; // 1min
unsigned long time_now = 0;

/* Reset function after page update */
void resetFunc(){
  counter = 0;
  watt = 0;
}

void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);
  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  delay(1500); 

  // Defined in thingProperties.h
  initProperties();

  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  
 /*
     The following function allows you to obtain more information
     related to the state of network and IoT Cloud connection and errors
     the higher number the more granular information you’ll get.
     The default is 0 (only errors).
     Maximum is 4
 */
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
  
  /* Time NTP */
  configTime(0, 0, MY_NTP_SERVER); 
  setenv("TZ", MY_TZ, 1); // Set your time zone
  tzset();
  
  delay(1000);
}

void loop() {
  ArduinoCloud.update(); 

  // Impulse counter to watt
  state=digitalRead(digital_pin);
  if ( laststate == 1 && state == 0 )
  {
    counter++;
  }
  laststate = state;

  watt = counter * 6;
  
  if(millis() >= time_now + period){
    time_now += period;
    strom = watt;
    resetFunc();
    Serial.println(strom);
  }
}

/*
  Since Strom is READ_WRITE variable, onStromChange() is
  executed every time a new value is received from IoT Cloud.
*/
void onStromChange()  {
  // Add your code here to act upon Strom change
}

Handy IoT Remote App

Mit der Hilfe eines ESP32 und eines einfachen IR Moduls kann am Stromzähler der aktuelle Stromverbrauch ausgelesen werden ohne das man den Stromzähler PIN benötigt. Mittels einem WebServer der vom ESP32 aufgebaut wird kann der aktuelle Verbrauch ausgelesen und grafisch dargestellt werden.

Da nicht jeder das Know-how bzw. die Lust hat sich einen kompletten HomeAssistant einzurichten um den Energieverbrauch auszulesen habe ich mir eine Standalone Lösung überlegt. Dadurch werden auch die Kosten der Anschaffung stark minimiert. Die Kosten für das benötigte Material belaufen sich auf unter 15€ (je nach Bauteile / Hersteller).

Alternative Lösung via Arduino IoT Remote App (nur ein File zu flashen).

Wer eine Home Assistant am laufen hat kann sich gerne meine Hassio Lösung anschauen, hier.

Digitaler Stromzähler Standalone WebServer

Benötigte Hardware

  • ESP32-WROOM-32 D1 mini (AZ-Delivery)
  • IR Modul (TCRT5000) 
  • 3D Drucker + Filament
  • Lötstation mit Equipment
  • Einzeladern

Benötigte Software

Aufbau Gehäuse

Das neue Zählergehäuse findet man hier.

IR Modul TCRT5000 modifikation

Auf dem TCRT5000 befindet sich eine Lesediode und eine Schreibdiode. Die Schreibdiode wird auch als Näherungssensor verwendet wodurch es zu Problemen kommen kann beim Ablesen des Stromzählers.

In meinem Fall habe ich die hellere (weiße Diode) einfach ausgelötet. In anderen Beiträgen habe ich gesehen, dass auch nur der Vorwiderstand entfernt wird.

Den TCRT5000 habe ich am ESP32 an die Pins G14, 5V und GND angeschlossen.

eHz Elektronischer Haushaltszähler

Das Gehäuse aus dem 3D Drucker passt beim eHz Elektronischen Haushaltszähler. Mit zwei Magneten wird das Gehäuse am Zähler befestigt da der Stromzähler Eigentum des Netzbetreibers ist!

Die rechten beiden IR Dioden werden beim IR Lese-Schreibekopf verwendet (Volkszähler). Dabei wird permanent zwischen den Unterschiedlichen zur verfügung stehenden Zählerständen geschalten und diese ausgelesen (PIN muss beim jeweiligen Energiekonzern angefragt werden).

Zähler Aufsteckmodul ESP32 + TCRT5000

Einrichten des WebServers

Der Wemos D1 mini ESP32 generiert zu Beginn sein eigenes WLAN (SSID = StromZaehler). Wenn man dieses auswählt kann man über die statische IP: 192.168.4.1 den Wi-Fi Manager öffnen um dort von seinem eigene Heimnetz die SSID und das Passwort zu hinterlegen. Das Gateway (Router IP) muss angegeben werden da sonst Zeit und Datum nicht mit dem NTP Server abgeglichen werden können. Bei einem nicht funktionierenden NTP Server werden die Werte um Mitternacht nicht zurückgesetzt. Die Daten sind direkt auf dem ESP32 im Filessystem hinterlegt und können nicht nach außen gelangen.

SSID: Wlan Name

Password: Wlan Passwort

IP Adresse: WebServer IP

Gateway Adresse: Router IP

WebServer grafische Darstellung

Den WebServer mit der Sensor Auswertung erreicht man dann über die im Wi-Fi Manager konfigurierten

WebServer on ESP32

Stromversorgung ESP32

Man kann den ESP32 auch mit einer Powerbank betreiben. Dabei muss man aber bedenken das durch den WebServer (permanentes WiFi) der Stromverbrauch sehr hoch ist. Da meine Lösung ja nur zum aktuellen Energieverbrauch messen gedacht ist bzw. um zu schauen was man so über einen kompletten Tag verbraucht, reicht eine Powerbank aus.

Wer die Energiewerte dauerhaft auslesen möchte sollte sich dann doch lieber eine Schuko Steckdose in den Verteilerkasten montieren lassen.

Software

Der ESP32 enthält ein File System (SPIFFS). SPIFFS ist ein kleines Dateisystem, das für Mikrocontroller mit einem Flash-Chip entwickelt wurde die über einen SPI-Bus verfügen. Unter dieser Seite kann man die genaue Anleitung finden und wie man dieses File System einrichtet. Anstelle des Temperatursensoren muss man nur den TCRT5000 anlöten sowie minimale Anpassungen an der Software vornehmen.

Code

/* Sensor TCRT5000 PIN14*/
const int digital_pin = 14;
int state = 0;
int laststate = 1;
unsigned int counter = 0;

......

/* Loop sensor reading*/
void loop() {

  state=digitalRead(digital_pin);
  if ( laststate == 1 && state == 0 )
  {
    counter++;
  }
  
  laststate = state;
  watt = counter * 6;
}

Fazit

Mit der Energieverbrauch Messung kann man sehr schnell sehen wo sich die Stromfresser im Haushalt befinden. Wir haben bei der letzten Messung herausgefunden, dass der SAECO Kaffeevollautomat im eingeschalteten Zustand während dem Frühstück 400W zieht. Das liegt an dem permanent aktiven Heizelement. Der Standby Timer lag bei 30 Minuten was zu einem hohen Stromverbrauch in der Zeit führt, dafür das kein Kaffee gemacht wird. Wir haben den Timer auf das minimalsten Wert gesetzt bzw. machen den Vollautomaten direkt nach der Benutzung aus.

Es wird ja immer von Standby Geräten bzw. Netzteilstecker gesprochen die sich permanent am Strom befinden. Jedoch kann ich hier keinen erhöhten Energieverbrauch feststellen.

Was hier am meisten Sinn macht und zu einer erstaunliche Einsparung führt ist das Balkonkraftwerk. Daher sieht man in den Grafiken des öfteren das Der Stromzähler Watt Wert Null beträgt.

Das Projekt befindet sich noch in der Entwicklung, bei weiteren Fragen einfach schreiben.

Zu dem Luftqualitätssensor von Ikea (Vindriktning) mittels ESP8266 findet man einige Anleitungen im Netz. Für die Vollständigkeit meiner Dokumentationen, werde ich trotzdem von meinem Umbau des Ikea Vindriktning Sensors berichten.

Benötigte Hardware

Benötigte Software

Aufbau

Anschlussplan

Bei mir waren die Lötpads am Ikea Sensor bereits verzinnt was das anlöten einfacher macht. Zu beachten ist das der Lötkolben nicht zu heiß eingestellt ist. Ich habe meinen Lötkolben auf ca. 330°c eingestellt. Dadurch sollte ein zu heiß werden und ablösen der Lötpads verhindert werden.

  • WeMos 5V —-> + Vindriktning
  • WeMos GND -> – Vindriktning
  • WeMos D3 —-> REST Vindriktning

Nach dem anlöten der Einzelandern habe ich die WeMos D1 Platine mit einem Streifen Heißkleber im unteren Bereich fixiert. Im falls das man den WeMos erneut flashen muss hat so einen schnellen Zugriff an den USB Port. Rechts habe ich eine kleine Ecke von dem Kunststoff abgeknipst damit das Kabel besser nach oben durchgeführt werden kann.

ESP Home Sensor config.yaml

esphome:
  name: airquality

esp8266:
  board: d1_mini  

# Example configuration entry
uart:
  rx_pin: D3
  baud_rate: 9600

sensor:
  - platform: pm1006
    pm_2_5:
      name: "Airquality 2.5µm:"  

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: "xxxxxxxxxxxxxxxxxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Airquality Fallback Hotspot"
    password: "xxxxxxxxxxxxx"

captive_portal:

Home Assistant grafische Darstellung

type: gauge
min: 0
max: 120
entity: sensor.airquality_2_5um
severity:
  green: 0
  yellow: 36
  red: 86
needle: true

Fazit zum Sensor

Wenn man sich die Platine genauer anschaut wird Ikea bald eine Variante mit einem Zigbee Modul herausbringen. Im oberen Bereich der Platine sind Anschlüsse für einen Stecker vorgesehen um ein Zigbee Modul anzuschließen.

Was mich leider ein wenig stört, ist der etwas brummende Lüfter des Moduls, der alle 20 Sekunden anfängt zu laufen (für die Messung). Ich bin aktuell am überlegen ob ich den Lüfter an die 3V des WeMos D1 anklemmen soll. Allerdings weiß ich dann nicht ob dadurch das Messergebnis verfälscht wird. Vielleicht fällt mir ja noch eine andere Lösung ein das leichte Brummen des Lüfters zu minimieren.

Mir gefällt die Gaube Darstellung für die Luftqualität in meinem Smart Mirror.

Mit der Hilfe eines ESP8266 und eines Magnetschalters ( Reed Sensor ) kann am Gaszähler ( G4 RF1) über den Internen Magneten der aktuelle Verbrauch abgelesen werden ( 1 Imp = 0.1m³ ). Eingebunden ist das ganze wie bereits beim digitalen Stromzähler in Home Assistant ( HASSIO ). Dort kann man sich die Verbrauchswerte für die unterschiedliche Zeiten (Tag, Woche, Monat, Jahr) anzeigen lassen.

Mein erstes Problem bestand darin das ich mittels eines normalen WeMos D1 keinen Empfang im Heizraum hatte. Daraufhin habe ich den WeMos D1 Mini Pro mittels externer Antenne ausprobiert, mit Erfolg. Die Signalstärke ist ausreichend um die Daten über Wlan zu senden.

NEUE LÖSUNG MIT AQARA TÜR FENSTERSENSOR

Benötigte Hardware

Benötigte Software

3D Gehäuse Tinkercad

Aufbau

In meinem Fall habe ich mir bei Thingiverse ein passendes Case für den WeMos D1 Mini Pro geholt und mittels Tinkercad auf mein entworfenes Case gesetzt. Somit kann jede beliebige ESP8266 Platine mit der Magnetsensor Grundplatte verbunden werden.

KY-025 Magnetschalter Anschlussplan

Beim Magnetschalter muss man sehr auf das Glasröhrchen achten. Ich habe das Glasröhrchen mit dem Reed Kontakt leicht nach unten gebogen damit es bündig mit dem Auslass am gedruckten Gehäuse abschließt.

  • WeMos 5V —-> + KY-025
  • WeMos GND –> – KY-025
  • WeMos D5 —-> A0 KY-025

Gaszähler Typ G4 RF1

G4 RF1 von Actaris ESP8266

Bei meinem Gaszähler handelt es sich um das Model G4 RF1 von Actaris.

Das Model G4 RF1 von Pipersberg ist baugleich soweit ich weiß. Daher sollte das Case für den Sensor auch hier passen.

ESP Home Sensor config.yaml

Hier hatte ich zu Beginn Probleme beim Kompilieren der Software. Ich hatte unter board den d1_mini_pro stehen welcher normal über 16MB Speicher verfügt. Bei meiner Bestellung habe ich übersehen das mein WeMos D1 Mini Pro mit nur 4 MB bestückt ist. Daher musste ich die Software für einen normalen d1_mini kompilieren.

esphome:
  name: gas

# d1 mini pro but only with 4MB -> d1_mini
esp8266:
  board: d1_mini 

sensor:
  - platform: pulse_counter
    pin: 
      number: D5
      mode: INPUT_PULLUP
    name: "Gasverbrauch"
    state_class: total_increasing
    device_class: gas
    update_interval : 60s
    filters:
      - lambda: |-
          static float total_value = 0.0;
          total_value += x * 0.1;
          return total_value;
    unit_of_measurement: "m³"
    accuracy_decimals: 2
    icon: 'mdi:fire' 
    id: gasverbrauch

time:
  - platform: sntp
    id: my_time    

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: "xxxxxxxxxxxxxxxxxxxxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Gas Fallback Hotspot"
    password: "xxxxxxxxxxxx"

captive_portal:

Hassio /config/configuration.yaml

......

utility_meter:
  gasverbrauch_daily:
    source: sensor.gasverbrauch
    cycle: daily
  gasverbrauch_weekly:  
    source: sensor.gasverbrauch
    cycle: weekly
  gasverbrauch_monthly:
    source: sensor.gasverbrauch
    cycle: monthly
  gasverbrauch_yearly:
    source: sensor.gasverbrauch
    cycle: yearly 

......

Home Assistant grafische Darstellung

vor längerer Zeit habe ich mir einen SmartMirror für das Betriebssystem MirrorOs von der Firma Glancr gebaut. Das Einrichten des Betriebssystem ist für jeden Einsteiger in das Thema SmartMirror der auch nicht viel Software Kenntnisse hat genau das richtige. Vor allem die das Video und die Tipps für den Bau des Spiegels waren sehr hilfreich. Mit der Zeit ist mir das ganze aber zu langweilig geworden nur Termine, Tankpreise, Wetter, Uhrzeit, etc. anzeigen zu lassen. Da ich im letzten Jahr viel mit HomeAssistant gearbeitet und einige Sensoren im Haus am laufen habe, fand ich die Idee meinen HomeAssistant Lovelace auf dem SmartMirror anzeigen zu lassen ziemlich cool.

Bau des SmartMirror

SmartMirror fertig

So sieht mein fertiger SmarMirror aus. Ich habe mir damals eine Steckdose für hinter den Spiegel installieren lassen die über den unteren rechten Schalter geschalten wird.

Der Spionspiegel ist mit Magneten im Rahmen befestigt wodurch ich ihn jederzeit herausnehmen kann. Das Spionspiegelglas sollte auf der Rückseite mit schwarzer Folie abgelebt werden bis auf den Teil wo der Monitor sitzt. Ansonsten kann es sein das man ein wenig durchsehen kann.

Bildergalerie

Benötigte Software

Raspberry Pi OS Anpassung

Damit der Raspberry Pi mit der gewünschten HTML aufstartet benötigt man den Chromium Kiosk Modus. Da wir die Einstellungen unter Raspberry Pi OS vornehmen ist Chromium bereits vorinstalliert. Dadurch benötigen wir nur noch die Software Unclutter um den Mauszeiger ausblenden zu können.

sudo apt-get update 
sudo apt-get install unclutter

Als nächstes richten wir den Autostart von Chromium ein. Hierfür öffnen wir folgende Datei:

/home/pi/.config/lxsession/LXDE-pi/autostart

oder

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart

Hier muss jetzt folgendes stehen:

# Mauszeiger Ausblenden
@unclutter

# Bildschirmschoner deaktivieren
#@xscreensaver -no-splash  
@xset s off
@xset -dpms
@xset s noblank

# Startet im Vollbild und im Inkognito Modus, ohne Adressleiste und Knöpfe und ohne die Möglichkeit den Vollbildmodus mit F11 zu deaktivieren 
@chromium-browser --incognito --disable-notifications --kiosk http://homeassistant.local:8123/lovelace/0

Hassio Anpassung an SmartMirror

Nach dem wiederholten Scheitern von Chrome, die Anmeldedaten für Home Assistant dauerhaft zu schreiben, bin ich auf eine Seite gestoßen, auf der steht, dass dies gewollt ist. Abhilfe schafft nur, die IP-Adresse des Raspberry Pi als vertrauenswürdiges Netzwerk unter /config/configuration.yaml anzugeben. Hier ist ein Codeausschnitt meiner configuration.yaml:

# Beginning of configuration.yaml
homeassistant:
  name: homeAssistant
  auth_providers:
    - type: trusted_networks
      trusted_networks:
        - 192.168.178.XX
        - 127.0.0.1
        - ::1
      allow_bypass_login: true
    - type: homeassistant

# Configure a default setup of Home Assistant
...
...

Home Assistant Lovelace

Die Darstellung der Benutzeroberfläche kann mittels individuellem Hassio Lovelace angepasst werden.

Hier können alle möglichen und zur verfügung stehenden Entitäten angezeigt werden.

Mit der Hilfe eines WEMOS D1 und eines einfachen Radar Sensors kann im Pellet Tank der aktuelle Füllstand gemessen und grafisch dargestellt werden. In meinem Fall verarbeite ich die Werte mittels HomeAssistant (hassio). Im Falle von einer geringen Füllstandsmenge kann als Beispiel eine Benachrichtigung per Telegram eingerichtet werden.

Benötigte Hardware

Benötigte Software

3D Gehäuse Tinkercad

Aufbau Pelletsensor

ESP Home config.yaml

Update Intervall ist hier in der yaml auf 1h eingestellt. Somit wird jede Stunde der Füllstand abgefragt.

esphome:
  name: ultraschall
  platform: ESP8266
  board: d1_mini

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: „XXX“

wifi:
  networks:
  - ssid: XXX
    password: XXX
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: Ultraschall
    password: XXX

captive_portal:

sensor:
  - platform: ultrasonic
    trigger_pin: D1
    echo_pin: D2
    name: "Pelletsfüllstand"
    update_interval: 1h

Home Assistant grafische Darstellung

Home Assistant station

In order to make the daily electricity consumption for the family visible, I built a small home assistant monitor.

Since I still had an old Raspberry Pi 3 + Kuman Touch Display brought around, the idea was implemented quickly.

Most of the work on this project was the 3D printer case. I found various housings at thingiverse, but none of them were upright. I redesigned an existing project from Thingiverse for my purposes, but the picture currently only shows a prototype which I am very happy with.

Hardware required for commissioning

Required software

3D printer housing

Home Assistant 3D Print

This is my first draft of a 3D printer case based on an existing project from Thingiverse.

I’m still trying to find time to familiarize myself with OpenSCAD. At the moment I am creating new or working on existing projects with the help of Tinkercad. I am currently assuming that it will take longer to become familiar with OpenSCAD in order to design complex models.

Software setup of Raspberry Pi OS

The first steps on how to get a Raspberry Pi OS image on an SD card can be found quickly via google. I use the SD formatter to format the SD card and the BelenaEtcher program to write the image onto the SD card.

After the image has been flashed on the SD card, the standard settings in the Linux operating system are configured such as network, language, keyboard layout, etc. Then you will be asked whether the Linux system should be brought up to date.

The 5 inch display will probably already work with the Raspberry Pi 3, but without the touch screen function. The correct drivers have to be installed for this to work. Here are the steps that need to be taken in order for the touchscreen to function properly:

  1. Install Raspberry Pi OS official mirror
  2. Clone repo from GitHub to your pi
    • sudo rm -rf LCD-show
    • git clone https://github.com/goodtft/LCD-show.git
    • chmod -R 755 LCD-show
    • cd LCD-show/
  3. Step3, According to your LCD’s type, excute:
    • In case of 5″ LCD
      • sudo ./LCD5-show
    • If you need to switch back to the traditional HDMI display
      • sudo ./LCD-hdmi
  4. Wait a few minutes,the system will restart automatically, enjoy with your LCD
  5. Rotate LCD display
    • ./rotate.sh 270

Since the display is now running and rotated with the correct drivers, we can focus on the Chrome Kiosk mode. For this I found another blog that describes these steps really well and in great detail. Therefore I will save myself a new description. Here is an example code for the auto start:

# Mauszeiger Ausblenden
@unclutter

# Bildschirmschoner ausschalten
#@xscreensaver -no-splash  
@xset s off
@xset -dpms
@xset s noblank

# Startet im Vollbild und im Inkognito Modus, ohne Adressleiste und Knöpfe und ohne die Möglichkeit den Vollbildmodus mit F11 zu deaktivieren 
@chromium-browser --incognito --disable-notifications --kiosk http://homeassistant.local:8123/lovelace/0

# Oder (dementsprechend aus kommentieren) 

# Startet im Vollbildmodus, ohne Adressleiste und Knöpfe und im Inkognito Modus.
#@chromium-browser --incognito --start-fullscreen http://homeassistant.local:8123/lovelace/0


 

Software setup Home Assistant

After the repeated failure of Chrome to persistently write the login data for Home Assistant, I came across a page that says this is wanted. The only remedy is to specify the Raspberry Pi’s IP address as a trusted network under /config/configuration.yaml. Here is a code snipped of my configuration.yaml:

# Beginning of configuration.yaml
homeassistant:
  name: homeAssistant
  auth_providers:
    - type: trusted_networks
      trusted_networks:
        - 192.168.178.XX
        - 127.0.0.1
        - ::1
      allow_bypass_login: true
    - type: homeassistant

# Configure a default setup of Home Assistant
...
...

Ready to start

Now everything should start automatically after the power supply is plugged in. If this is not the case, I have probably forgotten something in my description. If so, drop me a line.

I currently have my home automation running on a Raspberry Pi 4 with Home Assistant (hassio). My idea was to control the whole thing with a voice assistant. Since you can run the Mycroft in a Docker environment, I want to do the whole setup with only one Raspberry Pi. I don’t think that the Pi’s resources are sufficient, but it’s worth a try. The first attempts with a Raspberry Pi 3 show that it has to struggle with Mycroft via docker.

Required Hardware:

  • Raspberry Pi 3/4 + standard cables
  • Micro SD card min 8 GB
  • Jack to jack cable
  • Speaker with audio jack
  • USB Microphone
  • HMI cable and Monitor for first setup

Required Software

Raspberry Pi setup

Most will know how to create a boot image on an SD card. With belena.io, the whole thing works very quickly and is actually self-explanatory. After inserting the SD card and starting Debian, you have to make the standard settings (WiFi setup, language, …).

The next step should be to enable the ssh interface under Debian (Settings -> Interface -> Activate SSH). Now you no longer need the monitor and you can continue to set up everything via the SSH terminal. An SSH terminal connection can be established with the Macbook with the following command:

sudo ssh pi@192.168.178.xx

Now we are on the Raspberry Pi and can do the first installations. The first thing you should do is bring Debian up to date with the following command:

sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade

Docker on Raspberry Pi

I stuck to this website when installing Docker. Many thanks for the clear instructions.

Get Mycroft Docker Development Environment

I tried to get the whole thing to work with the instructions on Github but failed again and again in some places. Ultimately, I found my own way that is similar to the Github guide.

Pull mycroft respository from GitHub

git clone https://github.com/MycroftAI/docker-mycroft.git

Build the docker image in the directory were you pulled the repository.

docker build -t mycroft .

Run the following command to start up mycroft:

docker run -d \
--name mycroft \
-v /home/pi/mycroft:/root/.mycroft \
-v /home/pi/mycroft_skills:/opt/mycroft/skills \
--device /dev/snd \
-e PULSE_SERVER=unix:${XDG_RUNTIME_DIR}/pulse/native \
-v ${XDG_RUNTIME_DIR}/pulse/native:${XDG_RUNTIME_DIR}/pulse/native \
-v ~/.config/pulse/cookie:/root/.config/pulse/cookie \
-p 8181:8181 \
mycroft mycroftai/docker-mycroft:latest

Check if the docker container is up and running by typing:

pi@raspberrypi:~ $ docker ps -a

If you want to remove the docker container you have to type in:

pi@raspberrypi:~ $ docker rm mycroft

Your Docker container is now set up and is just waiting to be started. With the command ” sudo systemctl enable docker “, which is described under ” Docker on Raspberry Pi “, Docker is started automatically when booting.

The best thing to do after restarting is to check whether the Docker container is already there ( docker ps -a ). The command to start mycroft Container is:

docker start [container_ID]

Enter container:

docker exec -it mycroft /bin/bash

After Mycroft is running, the device must still be connected to the MycroftAI. To do this, you first have to register at mycroft.ai. For the device connection you have to excecute the following command:

./startup.sh 

The speaker will let you know what to do ( register on mycroftAI ). A voice tell you to add the device ID. After that it will take a few moment until the terminal gui will appear.

By typing only ./start-mycroft.sh you will get an info which commands you can use. Now you can execute all the commands you want which are available, for example (simple audio test):

./start-mycroft.sh audiotest

With the command ./startup.sh cli the terminal cli will be opened like in the Picroft Image.

Mycroft CLI

Install nano to edit container file

To change a file directly in the terminal you need an Editor. In my case I will use nano. To install vi you have to paste the following commands:

apt-get update
apt-get install nano

While looking for new sensors, I came across the AZ-Envy from AZ-Delivery and was initially enthusiastic about the description of the sensor board. Of course, I ordered three of them. Anyone who has already dealt with the price issue for sensors knows that one sensor alone is quite expensive, but three or five in a pack usually only cost a few euros more. This is probably due to the fact that the free shipping costs and the processing fee which is also part of the price.

Now a few sentences about the board. I don’t understand why no data lines were added to the USB port. As a result, installing the firmware (for beginners as described so nicely in the ad) is extremely complicated. The standard ESP32 or ESP8266 can be flashed much more easily. Of course, once the first firmware is flashed, all other changes can be made via an Over The Air Update (OTA).

But what bothers me most about the board design is that the temperature sensor is right next to the heater of the gas sensor. Even if the sensor has been running for a while, the temperature sensor spits out a wide variety of values. Unfortunately, no offset helps to adjust the temperature. I haven’t compared the humidity with any other product so far, but from what I’ve read on the Internet, the Dev-Board doesn’t seem to work reliably either.

Hardware required for commissioning

Required software

3D printer housing

Download 3D-print Box

Creation of the firmware flash file

There are two ways to create the flash file. Here I am describing one of them.

  • Flash file created with ESPHome.io
  • Flash file created with HomeAssistant

Generate firmware with HomeAssistant

ESPHome HomeAssistant

Install ESPHome under HomeAssitant.

Configure and open ESPHome

Press the + button at the bottom of the page

Enter Projektnamens

Enter SSID (WLAN Name)

Enter WLAN Passworts

Press button “next”

Choose ESP8266

Press button”next”.

A congratulation logo should appear. In case of an error, simply press “next” again

The new project has been created and is not yet connected (therefore red).

Press Install and then Manual download

The firmware is compiled and then downloaded.

This file can then be installed via the terminal.

EZ-Envy-1.yaml

esphome:
  name: humidity
  platform: ESP8266
  board: nodemcuv2
  
i2c:
  - sda: GPIO4
    scl: GPIO5
    id: bus_a

sensor:
  #Temperatur und Luftfeuchtigkeit
  - platform: sht3xd
    i2c_id: bus_a
    address: 0x44
    
    temperature:
      name: "Temperatur"
      id: "temperature"
      filters:
      - offset: -10.0
    humidity:
      name: "Luftfeuchtigkeit"
      id: "humidity"
      filters:
      - offset: 8.0
    update_interval: 10s
    
  # MQ2 Smoke Gas Sensor
  - platform: adc
    pin: A0
    name: "Gassensor"
    update_interval: 10s
    #filters:
    #  - multiply: 100
        #unit_of_measurement: "%"
    filters:
     lambda: |- 
       return (x * 1024/5);
    unit_of_measurement: "ppm"  
    icon: "mdi:percent" 
    
    
# Enable logging
logger:

....
....

AZ-Envy Firmware flashing via Terminal

AZ-Envy

First you have to connect the FT232RL Flasher Board to the AZ-Envy. However, you only need three individual wires (jumper wire). Only the pins GND, RX, TX need to be connected.

Then the AZ-Envy must be supplied with voltage and the FT232RL USB cable is then connected to the PC. You can also connect both USB cables to a USB hub (with external power supply) and then go from there to the PC.

The following steps have to be taken:

  • Create Firmware flashfile with HomeAssistant or ESPHome.
  • Connect EZ-Envy to FT232RL
  • Connect the AZ-Envy and FT232RL to a USB hub with an external power supply
  • Connect the USB hub to the PC
  • Open Terminal and go to the ESPTool folder
  • Check the usbPort name with command (mac os): ls -l /dev/tty.*
  • Command: sudo python esptool.py –port/usbPort/write_flash 0x00000 yourFile.bin
sudo python esptool.py --port /dev/tty.usbserial-A50285BI write_flash 0x00000 ez-envy-1.bin

Known issues during flash process

If the device is not recognized correctly and the following output appears.

  1. Hold down the flash button on the EZ-Envy as long as step 2 is finished.
  2. Unplug the EZ-Envy’s USB cable and plug it in again.
  3. Now the firmware should be flashed (see picture below)

Check your Python Version (in my case Python 3.10.0):

python3 --version

Install Python3 with the following command:

pip3 install -U https://github.com/platformio/platformio-core/archive/develop.zip

Improvements of AZ Envy

To get correct results from AZ Envy temperature sensor I have desoldered the PM-2 gas sensor. Then I soldered the gas sensor using single wires so that I got a greater distance to the temperature sensor. After that the temp results were much better but not great. I found out that the ESP8266 also emits heat on the metal housing, which slightly fake the measurement results. For this case, I glued a heatsink to the ESP8266’s metal case. Now I only have an offset of -1.0 degrees to my room thermostat.

My conclusion on the AZ Envy

As a development board, I think the board is really successful and it’s fun to work with. If you print out the corresponding case, the price is still reasonably reasonable. The housing also shields the temperature sensor a little from the heating of the gas sensor. Unfortunately, this does not make the temperature values more accurate either.

I will now use my sensor as a gas sensor in the boiler room.