Waschmaschine und Trockner Notification mit HomeAssistant

Bei uns stehen Waschmaschine und Wäschetrockner im Waschkeller. Leider neigen meine Partnerin und ich dazu, die Wäsche abends zu vergessen, da wir das Signal nicht hören. Also musste eine Lösung her. Wir lassen uns ab jetzt mit Home Assistant eine Push-Nachricht aufs Handy senden, wenn die Geräte fertig sind.

Mit dem <$> Gosund W-Lan Steckdosen </$>, die ich mit Tasmota geflasht habe, kann ich den Energieverbrauch der Geräte überwachen. Der Beitrag mit einer Anleitung ist schon älter und mit openHAB gemischt, der Vorgang sollte aber noch sehr ähnlich sein. Zu lesen <hier/>

WLAN / Internetverbindung

Erstes Problem wäre das WLAN für die Datenverbindung – aber da ich nebendran unseren Keller, wo mein ganzer Bastelkram steht, via Powerline mit Internet versorge, habe ich mein Keller-WLAN in Reichweite. Glück gehabt! Sonst hätte ich hier noch einen Empfänger mit Router setzen müssen.

Gerät einrichten

Wenn ihr die Tasmota-Steckdose einsteckt, macht diese einen Hotspot auf. Mit dem Smartphone könnt ihr euch einfach mit diesem Verbinden. Falls ihr nicht automatisch zum Captive Portal kommt, klickt euch einfach in die WiFi Einstellungen und auf „Erfordert Autorisierung“. Wenn das auch nicht klappt müsst ihr einen Browser öffnen und die folgende IP eingeben:

192.168.4.1

Ihr landet jetzt auf der Übersichtseite des Smartplugs. Wenn ihr Tasmota schon korrekt konfiguriert habt, sieht die in etwa so aus:

Wir gehen in die Config und dann in die WiFi Config. Nun Scannen wir nach unserem WLAN und geben das entsprechende Passwort ein.
Außerdem können wir einen Namen wie „Waschmaschine“ oder ähnliches eingeben, damit wir das Gerät leichter im Heimnetz wiederfinden. Wenn wir die Einstellung speichern, startet der ESP im Smartplug die Software neu.

Danach müssen wir MQTT konfigurieren. Da wir aber nun nicht mehr mit dem Hotspot verbunden sind, müssen wir die neue IP des Gerätes herausfinden. Das geht entweder mit einem IP Scanner oder über das WebInterface eures Routers. Wir wechseln also zurück an den Rechner und öffnen einen Browser. Ich hab die Fritzbox – also gehe ich auf fritz.box oder die entsprechende IP des Routers – meistens:

192.168.178.1

oder

192.168.0.1

Das kann je nach Router abweichen. Wir suchen nun in der Geräteliste einfach nach dem Gerätenamen, den wir vorhin vergeben haben und können in die Detailansicht wechseln. Derweil können wir auch gleich festlegen, dass der Smartplug eine statische IP bekommt.



Wenn wir die IP haben, können wir diese wieder als Ziel im Browser eingeben. Wir sind wieder auf der Startseite des Smartplugs und wechseln zu Config – MQTT Config.

Ich nutze den Mosquitto MQTT Broker im Home Assistant. Wenn ihr den noch nicht eingerichtet habt, könnt ihr <hier/> lesen, wie das geht.

Wir brauchen jedenfalls die IP und den Port des MQTT Brokers. Ich nutze einfach homeassistant.local als IP, da dies automatisch zur richtigen IP weiterleitet. Der Port ist bei Mosquitto standardmäßig wie folgt:

1883

Den Benutzernamen und das Passwort habt ihr bei der Einrichtung von Mosquitto oder eines anderen Brokers festgelegt. Bei Client ID gebe ich einfach wieder Waschmaschine bzw. Trockner ein. Die Einstellungen speichern wir wieder und der ESP startet sich wieder neu.

Mit einem Tool wie MQTT Explorer können wir uns nun mit dem Broker verbinden und schauen, ob die regelmäßigen Nachrichten des Smartplugs ankommen.

Wenn das soweit funktioniert, können wir wieder im Home Assistant die entsprechenden Sensoren und Switches anlegen, um den Smartplug zu steuern.

MQTT & File Editor

Dazu gehen wir in den File Editor zur config.yaml

Home Assistant hat kürzlich die Einbindung von der MQTT Plattform aktualisiert. Hier kommt nun zuerst die Plattform und dann der Typ.

Fangen wir also mit etwas einfachem an: Dem An/Aus schalten. Wir fügen den folgenden Code in unsere MQTT Plattform ein:

mqtt:
  switch:
#--- ggf. schon andere mqtt switches

#--- waschmaschine und trockner
    - name: "Waschmaschine Switch"
      unique_id: waschmaschine_switch
      state_topic: "stat/waschmaschine/POWER"
      command_topic: "cmnd/waschmaschine/power"

    - name: "Trockner Switch"
      unique_id: trockner_switch
      state_topic: "stat/trockner/POWER"
      command_topic: "cmnd/trockner/power"


  sensor:
#--- ggf. schon andere mqtt sensoren

#--- waschmaschine und trockner
    - name: "Waschmaschine Sensor"
      state_topic: "stat/waschmaschine/POWER"
      unique_id: waschmaschine_sensor
      
    - name: "Trockner Sensor"
      state_topic: "stat/trockner/POWER"
      unique_id: trockner_sensor     

Damit bekommen wir einen Schalter, den wir in unser Frontend einbinden können. Wenn wir den dort betätigen wird eine Art Chat Nachricht an die WLAN Steckdose geschickt, die dann den Befehl entsprechend ausführt. Diese hat nämlich das Topic abonniert. Achtet hier darauf, dass ihr eure Pfade entsprechend gleich benannt habt. Ich bleibe eigentlich immer beim Tasmota standard.

Damit HomeAssistant weiß in welchem Zustand sich der Schalter befindet, brauchen wir einen Sensor, der das Statusupdate liest. Dieser bekommt im Prinzip eine Chatnachricht zurück und aktualisiert das im System.

JSON

Jetzt wird es etwas komplexer. Wenn wir mit MQTT Explorer oder auf der Tasmota-Weboberfläche des Smartplugs in die Console gehen, sehen wir in regelmäßigen abständen die eine Nachricht auf dem Kanal „tele“.

Hier wird ein komplexer String durchgeschickt, der allelei nützliche Informationen trägt. Diese können wir wieder mit einem Sensor empfangen, müssen hier allerdings genau den richtigen Wert für uns filtern, da es wenig Sinn macht, ganze JSON Strings im Sensor zu speichern.

Wir erweitern unseren Code im File Editor (config.yaml) also wie folgt:

mqtt:
  switch:
#--- ggf. schon andere mqtt switches

#--- waschmaschine und trockner
    - name: "Waschmaschine Switch"
      unique_id: waschmaschine_switch
      state_topic: "stat/waschmaschine/POWER"
      command_topic: "cmnd/waschmaschine/power"

    - name: "Trockner Switch"
      unique_id: trockner_switch
      state_topic: "stat/trockner/POWER"
      command_topic: "cmnd/trockner/power"


  sensor:
#--- ggf. schon andere mqtt sensoren

#--- waschmaschine und trockner
    - name: "Waschmaschine Sensor"
      state_topic: "stat/waschmaschine/POWER"
      unique_id: waschmaschine_sensor
      
    - name: "Waschmaschine voltage"
      state_topic: "tele/waschmaschine/SENSOR"
      unique_id: waschmaschine_voltage
      value_template: >-
        {{ value_json.ENERGY.Voltage|float(0.0) }}
      unit_of_measurement: "V"
      device_class: voltage
      state_class: measurement
       
    - name: "Waschmaschine current"
      state_topic: "tele/waschmaschine/SENSOR"
      unique_id: waschmaschine_current
      value_template: >-
        {{ value_json.ENERGY.Current|float(0.0) }}
      unit_of_measurement: "A"
      device_class: current
      state_class: measurement
      
    - name: "Waschmaschine power"
      state_topic: "tele/waschmaschine/SENSOR"
      unique_id: waschmaschine_power
      value_template: >-
        {{ value_json.ENERGY.Power|float(0.0) }}
      unit_of_measurement: "W"
      device_class: power
      state_class: measurement
      
    - name: "Trockner Sensor"
      state_topic: "stat/trockner/POWER"
      unique_id: trockner_sensor
      
    - name: "Trockner voltage"
      state_topic: "tele/trockner/SENSOR"
      unique_id: trockner_voltage
      value_template: >-
        {{ value_json.ENERGY.Voltage|float(0.0) }}
      unit_of_measurement: "V"
      device_class: voltage
      state_class: measurement
       
    - name: "Trockner current"
      state_topic: "tele/trockner/SENSOR"
      unique_id: trockner_current
      value_template: >-
        {{ value_json.ENERGY.Current|float(0.0) }}
      unit_of_measurement: "A"
      device_class: current
      state_class: measurement
      
    - name: "Trockner power"
      state_topic: "tele/trockner/SENSOR"
      unique_id: trockner_power
      value_template: >-
        {{ value_json.ENERGY.Power|float(0.0) }}
      unit_of_measurement: "W"
      device_class: power
      state_class: measurement

Kurze Erläuterung:

Name: Das ist der Name des neuen Sensors

state_topic: Hier wird der Nachrichten-Kanal aboniert. Im MQTT spricht man von Topics.

unique_id: wir brauchen eine einzigartige id, mit der homeassistant arbeitet.

value_template: hier legen wir fest, wo im JSON string gesucht wird. Der String ist ja verschachtelt. Also suchen wir faktisch unter Energy – Voltage und speichern den verknüpften wert (hinter dem = Zeichen) als float mit einer Komma stelle.

unit_of_measurement: Wir können noch die Einheit angeben: V für Volt

device_class: die Klasse ist natürlich auch Volt (englisch voltage)

state_class: und es handelt sich um eine Messung.

    - name: "Waschmaschine voltage"
      state_topic: "tele/waschmaschine/SENSOR"
      unique_id: waschmaschine_voltage
      value_template: >-
        {{ value_json.ENERGY.Voltage|float(0.0) }}
      unit_of_measurement: "V"
      device_class: voltage
      state_class: measurement

Ihr könnt nach dem gleichen Schema auch Sensoren erstellen, um die anderen Werte auszulesen. Die Gesamtenergie ist sicherlich für manche interessant.

Template Sensor

Damit wir auf unserem Dashboard eine schöne Anzeige über den Status bekommen, können wir einen Input select erstellen, der durch die Automation aktualisiert wird. Wenn die Maschine fertig ist, wird fertig angezeigt, aus aus und so weiter. Damit wir aber keine echte Dropdown liste im Dashboard haben, legen wir darüber einen template Sensor, der den aktuellen wert einfach darstellt.

Im File-Editor in der config.yaml können wir also eine neue Plattform namens input_select erstellen. Im Userinterface im Webbrowser wäre dieser unter Helfer zu finden.

Wir legen zwei input selects an:

    #--- waschmaschine und trockner
input_select:
    waschmaschine_status:
        name: Waschmaschine Status
        options:
         - aus
         - läuft
         - fertig
        initial: aus
    
    trockner_status:
        name: Trockner Status
        options:
         - aus
         - läuft
         - fertig
        initial: aus

Für die Status-Anzeige im Dashboard legen wir einen Template Sensor an. Dieser fragt einfach den Status vom input-select ab.

    #--- waschmaschine und trockner
template:
  sensor:
    - name: Waschmaschine
      unique_id: waschmaschine_status_display
      state: '{{ states.input_select.waschmaschine_status.state}}'
    - name: Trockner
      unique_id: trockner_status_display
      state: '{{ states.input_select.trockner_status.state}}'

Update: hier hat sich die syntax geändert:

    #--- waschmaschine und trockner
template:
  sensor:
    - name: Waschmaschine
      unique_id: waschmaschine_status_display
      state: '{{ states("input_select.waschmaschine_status") }}'
    - name: Trockner
      unique_id: trockner_status_display
      state: '{{ states("input_select.trockner_status") }}'

Automation

Da wir insgesamt 6 Automationen brauchen, machen wir das am besten per File Editor. Diesmal gehen wir in die automations.yaml

Hier können wir einfach unten, unter die anderen Automationen folgenden code einfügen:

- id: '1122334455018'
  alias: Waschmaschine arbeitet
  description: Wenn Steckdose über 10 Watt verbraucht, wird Zustand des Sensors Waschmaschine
    auf "läuft" gesetzt.
  trigger:
  - above: '10'
    entity_id: sensor.waschmaschine_power
    for: 00:00:30
    platform: numeric_state
  condition: []
  action:
  - alias: ''
    data:
      option: läuft
    entity_id: input_select.waschmaschine_status
    service: input_select.select_option

- id: '1122334455019'
  alias: Waschmaschine fertig
  description: ''
  trigger:
  - above: '0.5'
    below: 3
    entity_id: sensor.waschmaschine_power
    for:
      hours: 0
      minutes: 1
      seconds: 30
      milliseconds: 0
    platform: numeric_state
  condition:
  - condition: state
    entity_id: input_select.waschmaschine_status
    state: läuft
  action:
  - data:
      option: fertig
    entity_id: input_select.waschmaschine_status
    service: input_select.select_option
  - data:
      message: Die Waschmaschine ist fertig und möchte ausgeräumt werden!
    service: notify.mobile_app_daniel_phone

- id: '1122334455020'
  alias: Waschmaschine aus
  description: ''
  trigger:
  - below: '0.5'
    entity_id: sensor.waschmaschine_power
    for: 00:00:30
    platform: numeric_state
  condition: []
  action:
  - data:
      option: aus
    entity_id: input_select.waschmaschine_status
    service: input_select.select_option

- id: '1673300661964'
  alias: Trockner Arbeitet
  description: Wenn Steckdose über 10 Watt verbraucht, wird Zustand des Sensors Trockner
    auf "läuft" gesetzt.
  trigger:
  - above: '10'
    entity_id: sensor.trockner_power
    for: 00:00:30
    platform: numeric_state
  condition: []
  action:
  - alias: ''
    data:
      option: läuft
    service: input_select.select_option
    target:
      entity_id: input_select.trockner_status
  mode: single

- id: '1673300702165'
  alias: Trockner aus
  description: ''
  trigger:
  - below: '0.5'
    entity_id: sensor.trockner_power
    for: 00:00:30
    platform: numeric_state
  condition: []
  action:
  - data:
      option: aus
    service: input_select.select_option
    target:
      entity_id:
      - input_select.trockner_status
  mode: single

- id: '1673300824224'
  alias: Trockner fertig
  description: ''
  trigger:
  - above: '0.5'
    below: '7'
    entity_id: sensor.trockner_power
    for: 00:01:30
    platform: numeric_state
  condition:
  - condition: state
    entity_id: input_select.trockner_status
    state: läuft
  action:
  - data:
      option: fertig
    service: input_select.select_option
    target:
      entity_id:
      - input_select.trockner_status
  - data:
      message: Der Trockner ist fertig und möchte ausgeräumt werden!
    service: notify.mobile_app_daniel_phone

Kurze Erläuterung:

id: Einzigartige Nummer oder Name für HomeAssistant

alias: Name den wir gut verstehen – Spitzname sozusagen

description: Hier kann man eine Beschreibung der Automation einfügen

trigger: Löst die Automation aus

above: Wenn der Wert der bei entity_id Verknüpften Entität, hier unser power sensor der Waschmaschine, über 10 W liegt

entity_id: Hier verknüpfen wir den Gewünschten Sensor bzw. die gewünschte Entität.

for: Trigger löst erst aus, wenn die Bedingung für 30 sekunden erfolgt ist.

platform: numeric_state bedeutet es ist ein numerischer Zustand, also eine Zahl.

action: Hier wir etwas ausgeführt

data: Wir möchten den zustand „läuft“ in die Entität bei entity_id schreiben

entity_id: Hier verknüpfen wir unseren input_select

service: Der Dienst, den wir brauchen, um den Zustand des input_select zu ändern.

- id: '1122334455018'
  alias: Waschmaschine arbeitet
  description: Wenn Steckdose über 10 Watt verbraucht, wird Zustand des Sensors Waschmaschine
    auf "läuft" gesetzt.
  trigger:
  - above: '10'
    entity_id: sensor.waschmaschine_power
    for: 00:00:30
    platform: numeric_state
  condition: []
  action:
  - alias: ''
    data:
      option: läuft
    entity_id: input_select.waschmaschine_status
    service: input_select.select_option

Zusätzlich haben wir beim Wechsel auf den Zustand „fertig“ noch eine Bedingung und einen anderen Service:

- id: '1673300824224'
  alias: Trockner fertig
  description: ''
  trigger:
  - above: '0.5'
    below: '7'
    entity_id: sensor.trockner_power
    for: 00:01:30
    platform: numeric_state
  condition:
  - condition: state
    entity_id: input_select.trockner_status
    state: läuft
  action:
  - data:
      option: fertig
    service: input_select.select_option
    target:
      entity_id:
      - input_select.trockner_status
  - data:
      message: Der Trockner ist fertig und möchte ausgeräumt werden!
    service: notify.mobile_app_daniel_phone

Hier prüfen wir, wenn wir für 1,5 Minuten unter 7W und über 0,5w sind, ob vorher der Status läuft war. Wenn das so war, ist die Maschine fertig.

Diesmal senden wir mit dem service: notify-mobile… eine message an das entsprechende Smartphone mit der HomeAssistant app.

Alternative

Man kann die automationen auch per Automations Bereich, manuell erstellen:

Wenn alles geklappt hat, werden die Automationen in der Übersicht angezeigt:

Wenn wir unter Einstellungen – Integrationen auf den Reiter Entitäten wechseln, können wir die Icons noch anpassen, damit wir später im Dashboard ein intuitiveres Verständnis für die Kachel erreichen.

Karte

Im Dashboard können wir eine neue Karte vom Typ Glance anlegen.

Hier könnt ihr einfach die beiden Template Sensoren wählen. Ich habe außerdem meine Lichtergruppe und eine Gruppe für alle Fenster und Türen hinzugefügt.

$ Die mit einem $ gekennzeichneten Links, sind Affiliate Links. Wenn du über diese in den Shop gelangst und etwas kaufst, bekomme ich eine kleine Provision

Schreibe einen Kommentar

Geb mir einen aus :)

Wenn du das Zeug hier magst, denk doch über eine Spende nach um Server und Domain zu finanzieren.

$ Die mit einem $ gekennzeichneten Links, sind Affiliate Links. Wenn du über diese in den Shop gelangst und etwas kaufst, bekomme ich eine kleine Provision.

Suche & Filter