Im vorherigen Artikel habe ich kurz die Anforderung dargestellt und eine kurzes Beispiel für eine Messung unter HomeMatic beschrieben.
Inbetriebnahme openHAB
Im ersten Schritt habe ich noch einmal meine notwendigen Räume und Variablen in der generellen Haus.items-Datei kontrolliert und ein paar neue Räume eingefügt (das ist individuell pro Installation).
Da meine HomeMatic-Anlage bereits vorhanden war, war keine Anpassung der HomeMatic.things-Datei bei mir notwendig.
Nach der Inbetriebnahme waren die neuen Items bereits in der Inbox vorhanden. Die weitere Konfiguration habe ich manuell in der Konfiguration und nicht im Webclient vorgenommen.
HomeMatic.items
In der Items-Datei habe ich folgende Kanäle für die Steckdose zugeordnet:
// 14.01.2020 - Steckdose Waschmaschine mit Leistungsmessung
Number hmSteckdose_KG_Heizungsraum_Washingmachine_SIGNAL_STRENTH "Waschmaschine Funk-Steckdose KG - Heizungsraum (HM-ES-PMSw1-Pl-DN-R1) - Signal Strength" (gKG_Heizungsraum) {channel="homematic:HM-ES-PMSw1-Pl-DN-R1:ccu:SERIAL:0#SIGNAL_STRENGTH"}
Switch hmSteckdose_KG_Heizungsraum_Washingmachine_STATE "Waschmaschine Funk-Steckdose KG - Heizungsraum (HM-ES-PMSw1-Pl-DN-R1) - State [%d]" (gKG, gKG_Heizungsraum, gSteckdose, gSteckdose_KG, gSteckdose_KG_Heizungsraum) [ "Lighting" ] {channel="homematic:HM-ES-PMSw1-Pl-DN-R1:ccu:SERIAL:1#STATE"}
Number:Energy hmSteckdose_KG_Heizungsraum_Washingmachine_ENERGY_COUNTER "Waschmaschine Funk-Steckdose KG - Heizungsraum (HM-ES-PMSw1-Pl-DN-R1) - Energy Counter" (gKG_Heizungsraum) {channel="homematic:HM-ES-PMSw1-Pl-DN-R1:ccu:SERIAL:2#ENERGY_COUNTER"}
Number:Frequency hmSteckdose_KG_Heizungsraum_Washingmachine_FREQUENCY "Waschmaschine Funk-Steckdose KG - Heizungsraum (HM-ES-PMSw1-Pl-DN-R1) - Frequency" (gKG_Heizungsraum) {channel="homematic:HM-ES-PMSw1-Pl-DN-R1:ccu:SERIAL:2#FREQUENCY"}
Number:Power hmSteckdose_KG_Heizungsraum_Washingmachine_POWER "Waschmaschine Funk-Steckdose KG - Heizungsraum (HM-ES-PMSw1-Pl-DN-R1) - Power" (gKG_Heizungsraum) {channel="homematic:HM-ES-PMSw1-Pl-DN-R1:ccu:SERIAL:2#POWER"}
Number hmSteckdose_KG_Heizungsraum_Washingmachine_CURRENT "Waschmaschine Funk-Steckdose KG - Heizungsraum (HM-ES-PMSw1-Pl-DN-R1) - Current" (gKG_Heizungsraum) {channel="homematic:HM-ES-PMSw1-Pl-DN-R1:ccu:SERIAL:2#CURRENT"}
Number:ElectricPotential hmSteckdose_KG_Heizungsraum_Washingmachine_VOLTAGE "Waschmaschine Funk-Steckdose KG - Heizungsraum (HM-ES-PMSw1-Pl-DN-R1) - Voltage" (gKG_Heizungsraum) {channel="homematic:HM-ES-PMSw1-Pl-DN-R1:ccu:SERIAL:2#VOLTAGE"}
Number hmSteckdose_KG_Heizungsraum_Washingmachine_OpState "Waschmaschine Status [MAP(HomeMatic.map):%s]"
Die ersten 7 Variablen stellen die Kanäle des Aktors dar. Die letzte Variable nutze ich für die Visualisierung des Status in der Oberfläche.
Aus dem Beispiel bitte die SERIAL mit der entsprechenden Seriennummer des Aktors austauschen.
HomeMatic.map
Die Mapping-Datei für die Oberfläche kann mit folgenden Statuswerten versehen werden:
0=Aus
1=Standby
2=Aktiv
3=Fertig
NULL=Unbekannt
Leistungswerte herausfinden
Nun kann man je nach Systemumgebung die Leistungswerte des Verbrauchers bzw. der Waschmaschine herausfinden. Dazu lässt man den Aktor entsprechend einen Waschgang in Betrieb und kann per grep-Befehl unter Linux entsprechend die erfassten Werte aus den Log-Dateien lesen:
grep "Washingmachine_POWER changed" /var/log/openhab2/events.log | sed 's/.[0-9]* \[ItemStateChangedEvent.* to /;/'
Danach habe ich die Ergebnisse in Notepad++ als CSV-Datei kopiert und etwas für die weitere Excel-Auswertung vereinfacht. In Excel lädt man die CSV-Datei entsprechend der Trennzeichen oder festen Breite entsprechend in die Applikation und fügt ein Diagramm für die Visualisierung des Stromverbrauchs in dem definierten Zeitraum ein.
Ein einfaches Beispiel-Ergebnis kann wie folgt aussehen:
Hier sind klar die Leistungsspitzen und die geringeren Aktivitäten erkennbar. Abgeleitet ergeben sich daraus folgende Werte:
- > 10 W = ACTIVE d.h. Waschmaschine läuft
- < 4,5 W = STANDBY d.h. Waschmaschine ist fertig, aber eingeschalten
- < 0,2 W = OFF d.h. Waschmaschine ist aus
Integration Alexa
Das Amazon Echo Control Binding ist bei mir bereits eingebunden. Folgendes Item ist für “Text to Speech” bereits bei mir vorhanden und muss evtl. ergänzt werden:
String Echo_Living_Room_TTS "Text to Speech" (Alexa_Living_Room) {channel="amazonechocontrol:echo:acc:dev1:textToSpeech"}
String Echo_Office_TTS "Text to Speech" (Alexa_Office) {channel="amazonechocontrol:echo:add:dev2:textToSpeech"}
acc bitte entsprechend eures Accounts ändern und dev1 bzw. dev2 an eure Endgeräte anpassen.
HomeMatic.rules
Eine einfache Automatisierung kann wie folgt hinzugefügt werden:
val Number MODE_OFF = 0
val Number MODE_STANDBY = 1
val Number MODE_ACTIVE = 2
val Number MODE_FINISHED = 3
rule "Washingmachine Consumption State Machine"
when
Item hmSteckdose_KG_Heizungsraum_Washingmachine_POWER changed
then
if (hmSteckdose_KG_Heizungsraum_Washingmachine_POWER.state < 0.2) {
hmSteckdose_KG_Heizungsraum_Washingmachine_OpState.postUpdate(MODE_OFF)
logInfo("INFO","Waschmaschine: MODE_OFF")
}
else if (hmSteckdose_KG_Heizungsraum_Washingmachine_POWER.state > 10) {
hmSteckdose_KG_Heizungsraum_Washingmachine_OpState.postUpdate(MODE_ACTIVE)
logInfo("INFO","Waschmaschine: MODE_ACTIVE")
}
else if (hmSteckdose_KG_Heizungsraum_Washingmachine_POWER.state < 4.5) {
if (hmSteckdose_KG_Heizungsraum_Washingmachine_OpState.state == MODE_OFF) {
hmSteckdose_KG_Heizungsraum_Washingmachine_OpState.postUpdate(MODE_STANDBY)
logInfo("INFO","Waschmaschine: MODE_STANDBY")
}
else if (hmSteckdose_KG_Heizungsraum_Washingmachine_OpState.state == MODE_ACTIVE) {
hmSteckdose_KG_Heizungsraum_Washingmachine_OpState.postUpdate(MODE_FINISHED)
logInfo("INFO","Waschmaschine: MODE_FINISHED")
}
}
end
rule "Washingmachine Notifications"
when
Item hmSteckdose_KG_Heizungsraum_Washingmachine_OpState changed
then
if (hmSteckdose_KG_Heizungsraum_Washingmachine_OpState.state == MODE_FINISHED) {
Echo_Living_Room_TTS.sendCommand('Die Waschmaschine ist fertig.')
Echo_Office_TTS.sendCommand('Die Waschmaschine ist fertig.')
logInfo("INFO","Waschmaschine fertig")
}
end
Wenn die Waschmaschine fertig ist, wird entsprechend in die Log-Datei geschrieben und eine Status-Information per Alexa ausgegeben. Nachträglich habe ich noch eine Information per Telegram eingebaut.
Haus.sitemap
Nun müssen in der App und im Webclient noch die Ergebnisse visualisiert werden. Ein einfaches Beispiel kann so aussehen:
Frame label="Verbraucher" {
Text label="Waschmaschine" item=hmSteckdose_KG_Heizungsraum_Washingmachine_OpState icon=whitegood
}
Ein paar Bilde für die “weiße Ware” können hier zur optischen Verbesserung auch noch verwendet werden: https://www.openhab.org/docs/configuration/iconsets/classic/
Fazit
Mit den zur Verfügung stehenden Informationen ist es recht einfach einen Verbraucher im Haushalt in das SmartHome zu integrieren. Das Beispiel mit openHAB, HomeMatic und Alexa ist recht einfach und schnell umgesetzt.
Welche Szenarien fallen euch bei der Leistungsüberwachung im SmartHome ein? Gibt es noch weitere Ideen und Verbesserungen für das Szenario?