Hallo zusammen,
wiederverwendbares kleines Script zur Überwachung der Waschmaschine, Trockner usw. im Mehrparteienhaus, mit grafischer Darstellung in Fhem und Benachrichtigung über Sonos + Pushmsg.
Evtl. muss die RegExp ($power =~ s/^\D*(\d+)/$1/;) in der anhängenden myUtils.pm noch angepasst werden, diese ist auf den Homematic Leistungsmesser ausgelegt.
Definieren eines Gerätes (als Beispiel Waschmaschine) inkl. des benötigten Notifys, und eines Notfys welches die Überwachung über einen Funkschalter aktiviert.
#Dummy Waschmaschine
define Waschmaschine dummy
attr Waschmaschine userattr min_watt wait_sec_before_off pushmsg_devRegExp pushmsg_startMsg pushmsg_stopMsg sonos_devRegExp sonos_stopMsg sonos_volume
attr Waschmaschine event-on-change-reading state
attr Waschmaschine icon scene_washing_machine
attr Waschmaschine min_watt 8
attr Waschmaschine pushmsg_devRegExp pushmsg
attr Waschmaschine pushmsg_startMsg in Betrieb...
attr Waschmaschine pushmsg_stopMsg ist fertig!
attr Waschmaschine room Keller
attr Waschmaschine sonos_devRegExp (Sonos_Bad|Sonos_Schlafzimmer|Sonos_Kueche)
attr Waschmaschine sonos_stopMsg Die Waschmaschine ist fertig
attr Waschmaschine sonos_volume 10
attr Waschmaschine wait_sec_before_off 180
#notify Waschmaschine
define ntfy_waschmaschine notify kg_hr_steckdose_waschmaschine_Pwr:power.* { monitorDevicePower($EVENT,'Waschmaschine') }
#notify Wandtaster - Enable Monitoring
define ntfy_waschmaschine_wandtaster notify ^kg_hr_wandtaster_BtnWaschmaschine.(Short|LongRelease).* { fhem("setreading Waschmaschine monitoringEnabled 1") }
Beispiel wiederverwendung des Scripts bei einem zweiten Gerät:
#Dummy Trockner
define Trockner dummy
attr Trockner userattr min_watt wait_sec_before_off pushmsg_devRegExp pushmsg_startMsg pushmsg_stopMsg sonos_devRegExp sonos_stopMsg sonos_volume
attr Trockner event-on-change-reading state
attr Trockner icon scene_clothes_dryer
attr Trockner min_watt 2
attr Trockner pushmsg_devRegExp pushmsg
attr Trockner pushmsg_startMsg in Betrieb...
attr Trockner pushmsg_stopMsg ist fertig!
attr Trockner room Keller
attr Trockner sonos_devRegExp Sonos_.+
attr Trockner sonos_stopMsg Der Trockner ist fertig
attr Trockner sonos_volume 10
attr Trockner wait_sec_before_off 0
#notify Waschmaschine
define ntfy_trockner notify kg_hr_steckdose_trockner_Pwr:power.* { monitorDevicePower($EVENT,'Trockner') }
#notify Wandtaster - Enable Monitoring
define ntfy_trockner_wandtaster notify ^kg_hr_wandtaster_BtnTrockner.(Short|LongRelease).* { fhem("setreading Trockner monitoringEnabled 1") }
attr wait_sec_before_off - Gibt die mindest Anzahl der Sekunden an, welche zwischen einem < min-watt Events und einem >= min-watt Events vergehen müssen damit das Gerät als OFF erkannt wird. (Falls Gerät evtl. pausen ohne Stromverbrauch einlegt.)
attr min-watt - Gibt die mindest Watt an damit ein Gerät als ON erkannt wird.
Falls die Attribute für pushmsg bzw. sonos weggelassen werden, ist dieses feature deaktiviert.
Gruß Claudiu
Hallo Rapster,
vielen Dank für das Programm. Genau das was ich Suche. Kannst du bitte noch kurz angeben welche hardware du benutzt. Insbesondere würde mich interessieren, wie du die Leistung überwachst.
Dank dir.
Grüße
rebejja
Hi rebejja,
als Hardware werden 2x Homematic HM-ES-PMSw1-Pl verwendet (Als Energiemessgerät an WM/Trockner).
Die Überwachung erfolgt über das anhängende Skript, oder versteh ich deine Frage grad falsch :-)
Gruß rapster
Hi Rapster,
danke für deine Antwort. Mir ist allerdings noch nicht klar, wie du das Funksignal der angegebenen Funk-Steckdose Homematic HM-ES-PMSw1-Pl an den Pi übergibst. Hast du dazwischen noch ein HMLan geschaltet? Oder gibt es ein Funkempfänger für den Pi als zusatz zu kaufen?
liebe Grüße
rebejja
Hier mal den ersten Post nachlesen: http://forum.fhem.de/index.php?topic=9637.0
Hallo rapster,
kannst du mir sagen, wie ich dein Script abändern muss, damit es mit den AVM DECT 200 geht?
Gruss Bernhard-IN
Hallo
zunächst mal meinen Dank an rapster für diese Anleitung.
Lief bei mir Monate lang ohne Probleme.
Aber jetzt wird das Ende des Waschgangs nicht mehr erkannt.
Ich hab schon alles mögliche probiert, aber nichts hat geholfen.
Hier mal meine Subroutiene und meine Geräte.
package main;
use strict;
use warnings;
use POSIX;
sub
UtilsWaesche_Initialize($$)
{
my ($hash) = @_;
}
sub monitorDevicePower($$) {
my ($power,$dummyDevice) = @_;
$power =~ s/^\D*(\d+)/$1/; #Substitut $EVENT, z.B. $EVENT='power: 68.45' substitute auf '68.45'
if ( ReadingsVal("$dummyDevice",'monitoringEnabled','0') ) { #Nur überwachen wenn Reading 'monitoringEnabled' true ist
if ( $power >= AttrVal($dummyDevice,'min_watt','') ) { #Dummy einschalten
if ( Value($dummyDevice) ne 'on-till' && AttrVal($dummyDevice,'pushmsg_devRegExp','0') && AttrVal($dummyDevice,'pushmsg_startMsg','0') ) {
fhem("set ".AttrVal($dummyDevice,'pushmsg_devRegExp','')." send '$dummyDevice' ".AttrVal($dummyDevice,'pushmsg_startMsg',''));
}
fhem("set $dummyDevice on-till"); #Dummy Status setzen (benötigt für Timestamp)
}
elsif ( $power < AttrVal($dummyDevice,'min_watt','') #Dummy ausschalten
&& Value($dummyDevice) eq 'on-till'
&& ReadingsVal("$dummyDevice",'Power','') < AttrVal($dummyDevice,'min_watt','') #Es muss 2 mal hintereinander < min_watt sein
&& time-time_str2num(ReadingsTimestamp($dummyDevice,'state','')) >= AttrVal($dummyDevice,'wait_sec_before_off','') ) { #Zwischen letztem > min_watt Wert, und 2. < min_watt Wert wait_sec warten
fhem("set $dummyDevice off"); #Wenn beide Bedingungen erfüllt sind, Dummy ausschalten
fhem("setreading $dummyDevice monitoringEnabled 0"); #Monitoring deaktivieren
if ( Value($dummyDevice) eq 'off' && AttrVal($dummyDevice,'pushmsg_devRegExp','0') && AttrVal($dummyDevice,'pushmsg_stopMsg','0') ) {
fhem("set ".AttrVal($dummyDevice,'pushmsg_devRegExp','')." send '$dummyDevice' ".AttrVal($dummyDevice,'pushmsg_stopMsg',''));
}
if ( AttrVal($dummyDevice,'tts_devRegExp','0') && AttrVal($dummyDevice,'tts_stopMsg','0') ) {
fhem("set ".AttrVal($dummyDevice,'tts_devRegExp','')."".AttrVal($dummyDevice,'tts_stopMsg','')."");
}
}
}
elsif ( $power >= AttrVal($dummyDevice,'min_watt','' && Value($dummyDevice) ne 'on') ) {
fhem("set $dummyDevice on");
}
elsif( time-time_str2num(ReadingsTimestamp($dummyDevice,'state','')) >= AttrVal($dummyDevice,'wait_sec_before_off','') && ReadingsVal("$dummyDevice",'Power','') < AttrVal($dummyDevice,'min_watt','') && Value($dummyDevice) ne 'off' ) {
fhem("set $dummyDevice off");
}
fhem("setreading $dummyDevice Power $power"); #Power in Dummy schreiben
}
1;
Das Notify
Internals:
DEF Sonoff_Pow1:Power:.* { monitorDevicePower($EVENT,'Waschmaschine') }
NAME ntfy_waschmaschine
NOTIFYDEV Sonoff_Pow1
NR 91
NTFY_ORDER 50-ntfy_waschmaschine
REGEXP Sonoff_Pow1:Power:.*
STATE 2017-12-13 22:43:25
TYPE notify
READINGS:
2017-12-13 14:08:56 state active
Attributes:
room Keller,Wäsche
Die Waschmaschine
Internals:
CHANGED
NAME Waschmaschine
NR 209
STATE fertig
TYPE dummy
READINGS:
2017-12-13 22:44:25 Power 2
2017-12-13 09:40:22 monitoringEnabled 1
2017-12-13 09:38:00 state off
Attributes:
event-on-change-reading state
eventMap on:arbeite off:fertig
group Wäsche
icon scene_washing_machine
min_watt 25
readingList monitoringEnabled
room Keller,Wäsche
userattr min_watt wait_sec_before_off pushmsg_devRegExp pushmsg_startMsg pushmsg_stopMsg tts_devRegExp tts_stopMsg
wait_sec_before_off 480
und hier noch mein Gerät zur Verbrauchsmessung
Internals:
IODev MyBroker
NAME Sonoff_Pow1
NR 80
STATE akutelle Leistung: 2.0 W Tagesverbrauch: 0.05 Kw/h
TYPE MQTT_DEVICE
Helper:
DBLOG:
Power:
logdb:
TIME 1513201645.29702
VALUE 2
READINGS:
2017-12-13 22:47:25 Current 0.065
2017-12-13 22:47:25 ENERGY {"Time":"2017-12-13T22:47:24", "Total":12.993, "Yesterday":1.000, "Today":0.047, "Period":0, "Power":2, "Factor":0.13, "Voltage":231, "Current":0.065}
2017-12-13 22:47:25 Factor 0.13
2017-12-13 22:47:25 POWER on
2017-12-13 22:47:25 Period 0
2017-12-13 22:47:25 Power 2
2017-12-13 22:47:25 Power_avg_day 2.0
2017-12-13 22:47:25 Power_avg_month 9.2
2017-12-13 22:47:25 Power_cum_day 164090
2017-12-13 22:47:25 Power_cum_month 11062369
2017-12-13 00:00:51 Power_max_day 2.0
2017-12-09 09:29:03 Power_max_month 2248.0
2017-12-13 00:00:51 Power_min_day 2.0
2017-12-10 18:54:47 Power_min_month 0.0
2017-12-13 22:47:25 STATE {"Time":"2017-12-13T22:47:24", "Uptime":146, "Vcc":3.122, "POWER":"ON", "Wifi":{"AP":1, "SSId":"WLAN", "RSSI":64, "APMac":"XX:XX:XX:XX:XX:XX"}}
2017-12-13 22:47:25 Time 2017-12-13T22:47:24
2017-12-13 22:47:25 Today 0.047
2017-12-13 22:47:25 Total 12.993
2017-12-13 22:47:25 Uptime 146
2017-12-13 22:47:25 Vcc 3.122
2017-12-13 22:47:25 Voltage 231
2017-12-13 22:47:25 Wifi_AP 1
2017-12-13 22:47:25 Wifi_APMac XX:XX:XX:XX:XX:XX
2017-12-13 22:47:25 Wifi_RSSI 64
2017-12-13 22:47:25 Wifi_SSId WLAN
2017-12-13 22:47:25 Yesterday 1
2017-12-10 18:54:56 state ON
2017-12-13 22:47:25 transmission-state incoming publish received
message_ids:
publishSets:
:
topic cmnd/sonoffpow1/power
values:
on
off
sets:
off
on
subscribe:
tele/sonoffpow1/ENERGY
tele/sonoffpow1/STATE
subscribeExpr:
^tele\/sonoffpow1\/ENERGY$
^tele\/sonoffpow1\/STATE$
subscribeReadings:
tele/sonoffpow1/ENERGY:
cmd
name ENERGY
tele/sonoffpow1/STATE:
cmd
name STATE
Attributes:
DbLogInclude Power
IODev MyBroker
alias POW_Waschmaschine
eventMap ON:on OFF:off
genericDeviceType switch
icon measure_power
publishSet on off cmnd/sonoffpow1/power
room Wäsche,Keller
stateFormat {sprintf("akutelle Leistung: %.1f W Tagesverbrauch: %.2f Kw/h", ReadingsVal($name,"Power",undef), ReadingsVal($name,"Today",undef))}
subscribeReading_ENERGY tele/sonoffpow1/ENERGY
subscribeReading_STATE tele/sonoffpow1/STATE
webCmd on:off
In den "on-till" Modus wird geschaltet und eine Nachricht gesendet, wenn der eingestelle Minimalverbrauch überschritten wird und dann bleibts hängen.
Für Hilfe wäre ich sehr dankbar
LG
Manfred
Hallo,
also ich überwache das ganze einfach mit einem doif
([StromverbrauchWaschmaschineEC3000:power]>5) (set Waschmaschine An) DOELSEIF ([StromverbrauchWaschmaschineEC3000:power]<4) (set Waschmaschine Aus)
und habe dort das wait attr auf 60:300 gesetzt dadruch setzt er denn Dummy "Waschmaschine" nach einer Minute wenn der Power wert über 5 liegt auf An und wenn 5 Minuten der Powerwert wieder unter 4 liegt wird der Dummy Waschmaschine auf Aus gesetzt.
Das kann mit jedem beliebigen Powermesser gemacht werden der in FHEM die Leistungsaufnahme misst, maximal muss das reading power ersetzt werden.
Grüße
Swen
Hallo doman75
Danke für den Schubs.
Hatte den wait_timer garnicht mehr auf dem Radar, weshalb ich es anders gemacht hatte.
Hab jetzt auf DOIF umgebaut.
Trotzdem hätte mich interessiert, warum die sub nicht mehr funktioniert hat.
LG
Manfred