Waschmaschine & Geschirrspüler mit Sonoff-POW und Tasmota

Begonnen von Dlay, 18 Juni 2017, 21:37:43

Vorheriges Thema - Nächstes Thema

Dlay

Hallo zusammen,

ich würde gern meine Waschmaschine und meinen Geschirrspüler smarter machen.

Zuerst hatte ich dieses "Setup" getestet:
https://forum.fhem.de/index.php/topic,39498.0.html

Leider lief es bei mir nicht wirklich gut so dass ich dieses hier genommen habe:
https://forum.fhem.de/index.php/topic,60336.msg632598.html#msg632598

Aber auf diese Lösung funktioniert nicht recht. Entweder spielt ein Dummy verrückt und schaltet sich ständig ein ohne das ich es verstehen kann, mal kommt keine Benachrichtigung via Telegram, dann wieder jede Stunde eine, ohne das die Maschine gelaufen wäre.

Daher meine Frage:

Gibt es noch irgendwo abseits dieser zwei Beispiele eine Waschmaschinenüberwachung welche eine Benachrichtigung verschickt ? Natürlich nachdem eine Weile keine "Leistungsdaten" von dem POW gesendet wurden.

Leider bin ich nicht in der Lage sowas selbst zu kreieren und daher auf eure Hilfe angewiesen.

Vorab schon mal vielen Dank für eure Mühe!

Gruß
Dlay

panzi


Dlay

Zitat von: panzi am 19 Juni 2017, 01:46:50
ich verwende folgende lösung -> https://haus-automatisierung.com/hardware/fhem/2017/03/03/fhem-tutorial-reihe-part-28-energiemessung-notification-spuelmaschine-fertig.html
wird auch super im video erklärt

funktioniert perfekt und die "schwellen" kannst du ja ändern

Ja das sieht ganz gut aus. Wird für mich aber nicht so einfach funktionieren weil meine Geräte auch gern mal eine längere Pause machen.
Es müsste also dahingehend geändert werden das die Fertig-Meldung nur dann kommt wenn es für 5 Minuten keine Änderung des Powerwertes mehr gab.

Das wird in den Kommentaren auf der Website auch erwähnt, aber leider nur mit dem Hinweis auf einen Watchdog und ich weiß leider nicht wie man den einbindet.


pink99panther

Hab das hier https://forum.fhem.de/index.php/topic,29502.0.html auf meine bedürfnisse angepasst.

Auszug aus 99_myUtils.pm
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,'sonos_devRegExp','0') && AttrVal($dummyDevice,'sonos_volume','0') && AttrVal($dummyDevice,'sonos_stopMsg','0') ) {
                fhem("set ".AttrVal($dummyDevice,'sonos_devRegExp','')." Speak ".AttrVal($dummyDevice,'sonos_volume','')." de ".AttrVal($dummyDevice,'sonos_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
}


MQTT_Device:
define Sonoff_Pow1 MQTT_DEVICE
attr Sonoff_Pow1 IODev MyBroker
attr Sonoff_Pow1 alias POW_Waschmaschine
attr Sonoff_Pow1 eventMap on:ON off:OFF
attr Sonoff_Pow1 genericDeviceType switch
attr Sonoff_Pow1 icon measure_power
attr Sonoff_Pow1 publishSet on off cmnd/sonoffpow1/power
attr Sonoff_Pow1 room Wäsche,Keller
attr Sonoff_Pow1 stateFormat {sprintf("akutelle Leistung: %.1f W Tagesverbrauch: %.2f Kw/h", ReadingsVal($name,"Power",undef), ReadingsVal($name,"Today",undef))}
attr Sonoff_Pow1 subscribeReading_ENERGY tele/sonoffpow1/ENERGY
attr Sonoff_Pow1 subscribeReading_STATE tele/sonoffpow1/STATE
attr Sonoff_Pow1 webCmd on:off


dummy:
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 25
attr Waschmaschine pushmsg_devRegExp Gabi_mobil
attr Waschmaschine pushmsg_startMsg in Betrieb...
attr Waschmaschine pushmsg_stopMsg ist fertig!
attr Waschmaschine room Keller,Wäsche
attr Waschmaschine wait_sec_before_off 480


notify:
define ntfy_waschmaschine notify Sonoff_Pow1:Power:.* { monitorDevicePower($EVENT,'Waschmaschine') }
attr ntfy_waschmaschine room Keller,Wäsche

Dlay

Puh das ist verglichen mit der Lösung darüber aber ein ziemlicher Hammer für mich als Laien.

Die Einrichtung würde ich ja hinbekommen, aber ich möchte auch sooo gern immer verstehen was da so passiert. Und das sieht mir doch sehr komplex aus.


panzi

und wenn deine geräte "pause" machen, fällt der verbrauch wirklich auf 0w?

Dlay

Ja, sieht so aus. Hin und wieder wenn die Trommel dann mal kurz andreht kommt er mal auf 3W aber solche Phasen gibts beim Waschgang.

Deswegen wäre ein Watchdog toll, der z.b. 7 Minuten auf das Power-Reading schaut sowie zusätzlich ob die Maschine an ist und dann entsprechend die Fertigmeldung verzögert.


Joker

Ich habs bei mir so gemacht, dass ich einen Dummy habe mit Status on, off oder standby.
Sobald der Verbrauch über einen bestimmten Wert steigt, wird der Status auf on gesetzt. Wenn er unter eine bestimmte Schwelle fällt, wird der Status zunächst auf standby gesetzt und ein 10 min Watchdog gestartet. Dieser schaut ob der Status innerhalb dieser Zeit wieder auf on gesetzt wird (Verbrauch doch noch mal gestiegen), und erst wenn er für 10min unter der Schwelle bleibt, setzt er den dummy auf off.

Auf den Status des Dummies habe ich dann notifys gelegt, z.B. für Push-Nachrichten.

Damian

Zitat von: Dlay am 20 Juni 2017, 23:28:11
Ja, sieht so aus. Hin und wieder wenn die Trommel dann mal kurz andreht kommt er mal auf 3W aber solche Phasen gibts beim Waschgang.

Deswegen wäre ein Watchdog toll, der z.b. 7 Minuten auf das Power-Reading schaut sowie zusätzlich ob die Maschine an ist und dann entsprechend die Fertigmeldung verzögert.

Hier ein einfach Beispiel aus der Commandref:


define di_washer DOIF ([power:watt]<2) {system("wmail washer finished")}
attr di_washer wait 300


mit Watchdog-Funktionalität.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

pink99panther

Kannst doch bei meinem Vorschlag alles einstellen im dummy.
wait_sec_before_off gibt an, wie lange die in min_watt angegebene Leistung
unterschritten sein muss, bevor ein "off" erkannt wird.

loescher

Hi!

Ich habs zwar mit Homematic gelöst, aber die FHEM Logik ist ja die gleiche, siehe:
http://www.loescher-online.de/smarthome.html#waschmaschine

Danke an alle FHEM Spezialisten und Entwickler! Ohne euch hätte ich das auch nicht hinbekommen  ;)

LG,
Stephan.

Dlay

Zitat von: panzi am 19 Juni 2017, 01:46:50
ich verwende folgende lösung -> https://haus-automatisierung.com/hardware/fhem/2017/03/03/fhem-tutorial-reihe-part-28-energiemessung-notification-spuelmaschine-fertig.html
wird auch super im video erklärt

funktioniert perfekt und die "schwellen" kannst du ja ändern

Jetzt hab ich das ja so umgesetzt. Nun ist allerdings das Problem das ich regelmäßig Nachrichten bekomme das die Spülmaschine fertig ist, da das Power reading ja im ausgeschalteten Zustand auch 0 W reportet. Wie kann ich das abstellen ?

Dlay

Zitat von: loescher am 22 Juni 2017, 21:54:34
Hi!

Ich habs zwar mit Homematic gelöst, aber die FHEM Logik ist ja die gleiche, siehe:
http://www.loescher-online.de/smarthome.html#waschmaschine

Danke an alle FHEM Spezialisten und Entwickler! Ohne euch hätte ich das auch nicht hinbekommen  ;)

LG,
Stephan.

Da Blicke ich als Anfänger schon wieder nicht mehr durch. Zu viele Dummys und Querverweise. Ich verstehe zwar was da passiert, aber die Syntax leider überhaupt nicht.
Ich versuche erstmal das DOIF zu übernehmen. Mal sehen wie weit ich damit komme.

Dlay

@loescher:

Bei mir funktioniert dein DOIF auch nicht richtig.
Es wird anscheinend nie CMD 4 erreicht, so dass ich keine Info über eine fertige Maschine auf mein Handy bekomme.
Kannst du mir helfen ?

Internals:
   DEF        ([mqtt_pow_wasch:Power] < 1)
(setreading mqtt_pow_wasch running off)
DOELSEIF ([mqtt_pow_wasch:Power] >= 5 and [mqtt_pow_wasch:running] eq 'off')
(setreading mqtt_pow_wasch running on)
DOELSEIF ([mqtt_pow_wasch:Power] >= 5)
(setreading mqtt_pow_wasch running running)
DOELSEIF ([mqtt_pow_wasch:Power] < 1 and [mqtt_pow_wasch:running] eq 'running')
(setreading mqtt_pow_wasch running done, set Telegram msg Die Waschmaschine ist fertig - Bitte ausräumen!)
   NAME       Waschmaschine.Programm
   NR         100
   NTFY_ORDER 50-Waschmaschine.Programm
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2017-07-19 20:19:41   Device          mqtt_pow_wasch
     2017-07-19 20:19:21   cmd             1
     2017-07-19 20:19:21   cmd_event       mqtt_pow_wasch
     2017-07-19 20:19:21   cmd_nr          1
     2017-07-19 20:19:41   e_mqtt_pow_wasch_Power 0
     2017-07-19 20:19:41   e_mqtt_pow_wasch_running off
     2017-07-19 20:19:21   state           cmd_1
     2017-07-19 20:19:21   wait_timer      no timer
   condition:
     0          ReadingValDoIf($hash,'mqtt_pow_wasch','Power') < 1
     1          ReadingValDoIf($hash,'mqtt_pow_wasch','Power') >= 5 and ReadingValDoIf($hash,'mqtt_pow_wasch','running') eq 'off'
     2          ReadingValDoIf($hash,'mqtt_pow_wasch','Power') >= 5
     3          ReadingValDoIf($hash,'mqtt_pow_wasch','Power') < 1 and ReadingValDoIf($hash,'mqtt_pow_wasch','running') eq 'running'
   devices:
     0           mqtt_pow_wasch
     1           mqtt_pow_wasch
     2           mqtt_pow_wasch
     3           mqtt_pow_wasch
     all         mqtt_pow_wasch
   do:
     0:
       0          setreading mqtt_pow_wasch running off
     1:
       0          setreading mqtt_pow_wasch running on
     2:
       0          setreading mqtt_pow_wasch running running
     3:
       0          setreading mqtt_pow_wasch running done, set Telegram msg Die Waschmaschine ist fertig - Bitte ausräumen!
     4:
   helper:
     event      Today: 0.409,Current: 0,Period: 0,Total: 4.344,Factor: 0,Time: 2017-07-19T20:19:41,Voltage: 227,Yesterday: 0.022,Power: 0
     globalinit 1
     last_timer 0
     sleepdevice mqtt_pow_wasch
     sleepsubtimer -1
     sleeptimer -1
     timerdev   mqtt_pow_wasch
     timerevent Today: 0.409,Current: 0,Period: 0,Total: 4.344,Factor: 0,Time: 2017-07-19T20:19:41,Voltage: 227,Yesterday: 0.022,Power: 0
     triggerDev mqtt_pow_wasch
     timerevents:
       Today: 0.409
       Current: 0
       Period: 0
       Total: 4.344
       Factor: 0
       Time: 2017-07-19T20:19:41
       Voltage: 227
       Yesterday: 0.022
       Power: 0
     timereventsState:
       Today: 0.409
       Current: 0
       Period: 0
       Total: 4.344
       Factor: 0
       Time: 2017-07-19T20:19:41
       Voltage: 227
       Yesterday: 0.022
       Power: 0
     triggerEvents:
       Today: 0.409
       Current: 0
       Period: 0
       Total: 4.344
       Factor: 0
       Time: 2017-07-19T20:19:41
       Voltage: 227
       Yesterday: 0.022
       Power: 0
     triggerEventsState:
       Today: 0.409
       Current: 0
       Period: 0
       Total: 4.344
       Factor: 0
       Time: 2017-07-19T20:19:41
       Voltage: 227
       Yesterday: 0.022
       Power: 0
   internals:
   itimer:
   readings:
     0           mqtt_pow_wasch:Power
     1           mqtt_pow_wasch:Power mqtt_pow_wasch:running
     2           mqtt_pow_wasch:Power
     3           mqtt_pow_wasch:Power mqtt_pow_wasch:running
     all         mqtt_pow_wasch:Power mqtt_pow_wasch:running
   regexp:
     0:
     all:
   state:
     STATE:
   trigger:
Attributes:
   room       Waschmaschine
   wait       10:300:0:300

kleineslichtHH

cmd4 kommt nicht weil cmd1 vorher schon erfüllt ist. ich würde bei cmd1 einfach mal ab 2W den set Befehl setzen

Zitat von: Dlay am 19 Juli 2017, 20:41:23
@loescher:

Bei mir funktioniert dein DOIF auch nicht richtig.
Es wird anscheinend nie CMD 4 erreicht, so dass ich keine Info über eine fertige Maschine auf mein Handy bekomme.
Kannst du mir helfen ?

Internals:
   DEF        ([mqtt_pow_wasch:Power] < 1)
(setreading mqtt_pow_wasch running off)
DOELSEIF ([mqtt_pow_wasch:Power] >= 5 and [mqtt_pow_wasch:running] eq 'off')
(setreading mqtt_pow_wasch running on)
DOELSEIF ([mqtt_pow_wasch:Power] >= 5)
(setreading mqtt_pow_wasch running running)
DOELSEIF ([mqtt_pow_wasch:Power] < 1 and [mqtt_pow_wasch:running] eq 'running')
(setreading mqtt_pow_wasch running done, set Telegram msg Die Waschmaschine ist fertig - Bitte ausräumen!)
   NAME       Waschmaschine.Programm
   NR         100
   NTFY_ORDER 50-Waschmaschine.Programm
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2017-07-19 20:19:41   Device          mqtt_pow_wasch
     2017-07-19 20:19:21   cmd             1
     2017-07-19 20:19:21   cmd_event       mqtt_pow_wasch
     2017-07-19 20:19:21   cmd_nr          1
     2017-07-19 20:19:41   e_mqtt_pow_wasch_Power 0
     2017-07-19 20:19:41   e_mqtt_pow_wasch_running off
     2017-07-19 20:19:21   state           cmd_1
     2017-07-19 20:19:21   wait_timer      no timer
   condition:
     0          ReadingValDoIf($hash,'mqtt_pow_wasch','Power') < 1
     1          ReadingValDoIf($hash,'mqtt_pow_wasch','Power') >= 5 and ReadingValDoIf($hash,'mqtt_pow_wasch','running') eq 'off'
     2          ReadingValDoIf($hash,'mqtt_pow_wasch','Power') >= 5
     3          ReadingValDoIf($hash,'mqtt_pow_wasch','Power') < 1 and ReadingValDoIf($hash,'mqtt_pow_wasch','running') eq 'running'
   devices:
     0           mqtt_pow_wasch
     1           mqtt_pow_wasch
     2           mqtt_pow_wasch
     3           mqtt_pow_wasch
     all         mqtt_pow_wasch
   do:
     0:
       0          setreading mqtt_pow_wasch running off
     1:
       0          setreading mqtt_pow_wasch running on
     2:
       0          setreading mqtt_pow_wasch running running
     3:
       0          setreading mqtt_pow_wasch running done, set Telegram msg Die Waschmaschine ist fertig - Bitte ausräumen!
     4:
   helper:
     event      Today: 0.409,Current: 0,Period: 0,Total: 4.344,Factor: 0,Time: 2017-07-19T20:19:41,Voltage: 227,Yesterday: 0.022,Power: 0
     globalinit 1
     last_timer 0
     sleepdevice mqtt_pow_wasch
     sleepsubtimer -1
     sleeptimer -1
     timerdev   mqtt_pow_wasch
     timerevent Today: 0.409,Current: 0,Period: 0,Total: 4.344,Factor: 0,Time: 2017-07-19T20:19:41,Voltage: 227,Yesterday: 0.022,Power: 0
     triggerDev mqtt_pow_wasch
     timerevents:
       Today: 0.409
       Current: 0
       Period: 0
       Total: 4.344
       Factor: 0
       Time: 2017-07-19T20:19:41
       Voltage: 227
       Yesterday: 0.022
       Power: 0
     timereventsState:
       Today: 0.409
       Current: 0
       Period: 0
       Total: 4.344
       Factor: 0
       Time: 2017-07-19T20:19:41
       Voltage: 227
       Yesterday: 0.022
       Power: 0
     triggerEvents:
       Today: 0.409
       Current: 0
       Period: 0
       Total: 4.344
       Factor: 0
       Time: 2017-07-19T20:19:41
       Voltage: 227
       Yesterday: 0.022
       Power: 0
     triggerEventsState:
       Today: 0.409
       Current: 0
       Period: 0
       Total: 4.344
       Factor: 0
       Time: 2017-07-19T20:19:41
       Voltage: 227
       Yesterday: 0.022
       Power: 0
   internals:
   itimer:
   readings:
     0           mqtt_pow_wasch:Power
     1           mqtt_pow_wasch:Power mqtt_pow_wasch:running
     2           mqtt_pow_wasch:Power
     3           mqtt_pow_wasch:Power mqtt_pow_wasch:running
     all         mqtt_pow_wasch:Power mqtt_pow_wasch:running
   regexp:
     0:
     all:
   state:
     STATE:
   trigger:
Attributes:
   room       Waschmaschine
   wait       10:300:0:300