Vorstellung Mini-Lösung: Waschmaschine Fertig-Meldung

Begonnen von gotmoon, 28 März 2019, 19:56:56

Vorheriges Thema - Nächstes Thema

gotmoon

Hi,

eigentlich poste ich immer nur etwas wenn ich Probleme habe. Ich dachte vielleicht ist jemand auch an einer fertigen Lösung interessiert :-)

In diesem Fall beschreibe ich einmal, wie ich mittels FritzBox, Fritz DECT 200 und des TelegramBot-Moduls über FHEM melde, wenn die Waschmaschine fertig ist. Geht natürlich auch mit einem Trockner.

An der Waschmaschine selbst ist ein FritzDect 200 installiert. Diese misst regelmäßig den Strom und meldet diesen an die FritzBox bzw. darüber an FHEM

Eingebunden habe ich das Gerät über FBAHAHTTP. Mehr Infos zum Gerät und installation siehe WIKI https://wiki.fhem.de/wiki/FRITZ!DECT_200

In der Config siehtes dann so aus.


define FBDECT_FB_AHA_11630_0006640 FBDECT FB_AHA:11630_0006640 powerMeter,tempSensor,switch
attr FBDECT_FB_AHA_11630_0006640 IODev FB_AHA
attr FBDECT_FB_AHA_11630_0006640 alias Waschmaschine
attr FBDECT_FB_AHA_11630_0006640 event-min-interval power:120
attr FBDECT_FB_AHA_11630_0006640 event-on-change-reading .*
attr FBDECT_FB_AHA_11630_0006640 group Energie
attr FBDECT_FB_AHA_11630_0006640 icon scene_washing_machine
attr FBDECT_FB_AHA_11630_0006640 room 00Wohnung,Flure
attr FBDECT_FB_AHA_11630_0006640 stateFormat power
attr FBDECT_FB_AHA_11630_0006640 webCmd :
define FileLog_FBDECT_FB_AHA_11630_0006640 FileLog ./log/FBDECT_FB_AHA_11630_0006640-%Y.log FBDECT_FB_AHA_11630_0006640:power\x3a.*
attr FileLog_FBDECT_FB_AHA_11630_0006640 logtype power4:Power,text
attr FileLog_FBDECT_FB_AHA_11630_0006640 room xLOG
define SVG_FBDECT_FB_AHA_11630_0006640 SVG FileLog_FBDECT_FB_AHA_11630_0006640:SVG_FBDECT_FB_AHA_11630_0006640:CURRENT
attr SVG_FBDECT_FB_AHA_11630_0006640 label "FBDECT_FB_AHA_11630_0006640 Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr SVG_FBDECT_FB_AHA_11630_0006640 room Plots


Die FBAHAHTTP:
define FB_AHA FBAHAHTTP 192.168.xx.xx
attr FB_AHA fritzbox-user fhem
attr FB_AHA polltime 60


Zusätzlich habe ich das TelegramBot Modul installiert. Mehr dazu im Wiki https://wiki.fhem.de/wiki/TelegramBot Mein TelegramBot heißt Charlie

Nun ist es so dass ich auf der einen Seite wissen wollte, wann die Waschmaschine fertig ist. Auf der anderen Seite wollte ich ein Gefühl dafür bekommen was das Ding so verbraucht. (60 Grad Hauptwäsche, 30 Grad Eco-Wäsche, 30 Grad Kurzwäsche etc.)
Daher habe ich mir einen zusätzlichen Dummy angelegt um den Start-Stromstand zwischenzuspeichen. Dieser ist auch der Trigger um zu erkennen, wann Start und wann Ende des Waschvorgangs ist.

define Waschmaschine_Energy dummy
-> Wichtig: Der Dummy muss einmal manuell auf 0 gesetzt werden.

Dazu gibt es ein Notify, welches wiederum eine Funktion triggert. Und zwar immer dann, wenn sich etwas an der Steckdose tut, bzw. Daten übermittelt werden.

define Waschmaschine_Aktivitaet notify FBDECT_FB_AHA_11630_0006640 {Check_Waschmaschine()}

Alle bisher genannten Code-Stückchen kommen in die fhem.cfg.

Die eigentliche "Intelligenz" aber sitzt in der 99_myUtils.pm

Es wird zunächste der aktuelle Stromverbauch (power) ausgelesen und auch der interne Zähler über den insgesamt verbauchten Strom (energy).
Es geht los, wenn der Energieverbrauch das erste mal höher 1 Watt ist und der Dummy auf 0 steht. Dann wird der Dummy Waschmaschine_Energy einmalig mit dem Startwert befüllt. Aber auch nur dann.
Sollte der Verbrauchswert wieder auf unter 1 Watt sinken, dann wird dieser Startwert gegen den dann aktuellen Wert gesetzt. Gleichzeit ist das der End-Zeitpunkt.
Sodann wird eine Telegram-Nachricht generiert, die mir sagt, dass die Waschmaschine eben fertig ist und wie viel Strom verbraucht wurde. Und zum Abschluss wird der Dummy-Wert wieder auf 0 gesetzt.

Hier der Code dazu (gehört in die myUtils):
sub Check_Waschmaschine()
{
my $powerWaschmaschine= ReadingsVal("FBDECT_FB_AHA_11630_0006640","power","Fehler");
$powerWaschmaschine =~ s/ .*//;
my $energyWaschmaschine= ReadingsVal("FBDECT_FB_AHA_11630_0006640","energy","Fehler");
$energyWaschmaschine =~ s/ .*//;

if ($powerWaschmaschine > 1 && ReadingsVal("Waschmaschine_Energy","state","Fehler") eq 0) {fhem("set Waschmaschine_Energy ".$energyWaschmaschine)};

if ($powerWaschmaschine < 1 && ReadingsVal("Waschmaschine_Energy","state","Fehler") > 0) {
my $energyAnfang= ReadingsVal("Waschmaschine_Energy","state","0");
my $energyVerbrauch= $energyWaschmaschine - $energyAnfang;
fhem("set Charlie message \@19xxxxx Die Waschmaschine ist fertig und hat ".$energyVerbrauch." Wh verbraucht");
fhem("set Waschmaschine_Energy 0");
};

}



Die Fritz Steckdose habe ich in der Fritzbox so konfiguriert, dass sie nicht schaltet und immer auf eingeschaltet steht.
Sollte das angeschlossene Gerät mehr als einen Watt im Standby verbrauchen, sollte man es der Umwelt zuliebe natürlich austauschen :-) Der obige Code lässt sich aber  an den stellen "> 1" und "< 1" auch auf z.B. "> 2" und "< 2" anpassen. Dann wird also angenommen, dass die Waschmaschine bei einem Verbrauch von unter 2 Watt eben nicht mehr arbeitet.

Grundsätzlich arbeitet das Stückchen Code bei mir sehr fehlerfrei. Hatte es vorher mit FS20 Master/Slave Steckdosen probiert, das war nicht immer der hit. Ein ähnlicher Code ist auch für den Trockner im Einsatz. Dann eben nur mit anderen Bezeichnungen.

Im übrigen kann man die Steckdose auch ganz toll im TabletUI visualisieren.

Dreggwatz


Guybrush

das über Fritz Dect Dosen zu machen ist eine gute Idee. Werde ich mal in Erwägung ziehen. Ich hab unsere 3. Waschmaschine nämlich nicht separat belegt...

Du dürftest aber bei deiner ggf. einen Logikfehler drin haben, was ggf. dazu führen kann, dass nicht alle Waschmaschinen damit funktionieren. Es gibt genug effiziente Modelle, die über einen längeren Zeitraum gar keine Energie beziehen. Das hab ich bei mir über wait 30:60 gelöst. Das ist dadurch zwar etwas träger, aber da kommts ja nun nicht auf ne Minute an:


defmod Waschen.Waschmaschine.Betrieb.Check DOIF ([Waschen.Waschmaschine.mA:state:d]>1000) (set Waschen.Waschmaschine.Betrieb on) DOELSEIF ([Waschen.Waschmaschine.mA:state:d]<100) (set Waschen.Waschmaschine.Betrieb off,{GetFileFromURL("***/***=".urlEncode("Die Waschmaschine ist fertig"));;prowl("Fertig!","Waschmaschine","1")})
attr Waschen.Waschmaschine.Betrieb.Check event-on-change-reading state
attr Waschen.Waschmaschine.Betrieb.Check wait 30:60

defmod Waschen.Waschmaschine.Betrieb dummy
attr Waschen.Waschmaschine.Betrieb event-on-change-reading state


Die Strom-Grenzwerte dürften je nach Waschmaschine anzupassen sein. Ich hab bei mir aber noch neben der Prowler App eine Sprachansage über NirCmd (https://www.nirsoft.net/utils/nircmd.html) integriert (dafür ist das GetFileFromURL()). Funktioniert von Haus aus auf jedem Windows 10 PC.

gotmoon

Ja das stimmt.
Jede Waschmaschine und auch Trockner hat so seinen eigenen Zyklus wann wie viel Strom benötigt wird. Mit meiner Einstellung komme ich super hin, habe die aber auch vorher ermittelt, indem ich die Logs bei laufender Maschine durchgegangen bin.
Die Ansage, dass die Maschine fertig ist, habe ich übrigens auch auf den Fernseher gebracht (Android). Früher hatte ich tatsächlich auch eine Ansage über die Bose Boxen, war mir aber irgendwann zu nervig.

Peteruser

Hallo,
coole Sache, geht auf mit den Mess-Steckdosen von Homematic.


Grüße Peter
Ubuntu+Debian FHEM + ESPEasy + Homematic + ConBee + DUROFERN