[Beta] Waschmaschinenstatus

Begonnen von traxanos, 27 Juli 2015, 23:50:40

Vorheriges Thema - Nächstes Thema

traxanos

Ich möchte euch heute mein Waschmaschinenstatus vorstellen. Das Ganze gilt erstmal als Beta, da noch paar Anpassungen im DOIF fehlen. Außerdem möchte ich noch etwas länger testen bevor ich sagen kann, dass alles läuft.




Zuerst definieren wir einen Dummy. Auf diesem werden per Syncscript alle Werte von
einer Steckdose mit Leistungsmessung übertragen sowie der Status der Waschmaschine gespeichert.

define Waschmaschine.Status dummy
attr Waschmaschine.Status userattr configPowerOff configWaitOff configPowerDone configWaitDone configTimerAutoOff
attr Waschmaschine.Status configPowerDone 3
attr Waschmaschine.Status configPowerOff 1
attr Waschmaschine.Status configTimerAutoOff 900
attr Waschmaschine.Status configWaitDone 60
attr Waschmaschine.Status configWaitOff 5
attr Waschmaschine.Status event-on-change-reading state, energy
attr Waschmaschine.Status event-on-update-reading power
attr Waschmaschine.Status stateFormat { my $state = ReadingsVal($name, "state", "");; my $power = ReadingsVal($name, "power", "");; if($state eq 'on') { "An" } elsif($state eq "done") { "Fertig" } elsif($state eq "running") { "Läuft ($power W)" } else { "Aus" } }


Folgende Readings existieren:

  • state Aktueller Zustand der Waschmaschine (on, off, done, running)
  • switch Aktueller Zustand der Steckdose (on, off)
  • energy Aktueller Energiezähler
  • power Aktueller Verbrauch
  • preEnergy Energiezähler vor dem Waschgang
  • lastEngery Verbrauch des letzten Waschgangs

Folgende Attribute können angepasst werden:

  • configPowerOff Angabe in Watt. Bei Unterschreitung ändert sicht der Status zu "Aus" unter Beachtung des configWaitOff
  • configPowerDone Angabe in Watt. Bei Unterschreitung ändert sicht der Status zu "Fertig" unter Beachtung des configWaitDone
  • configWaitOff Angabe in Sekunden. Wie lange muss der Wert configPowerOff unterschritten sein, damit sich der Status auf "Aus" ändert (! Wir noch nicht beachtet da eine anpassung im DOIF fehlt.)
  • configWaitDone Angabe in Sekunden. Wie lange muss der Wert configPowerDone unterschritten sein, damit sich der Status auf "Fertig" ändert (! Wir noch nicht beachtet da eine anpassung im DOIF fehlt.)




Dann definieren wir ein Syncscript, welches eine Steckdose an den Waschmaschinenstatus anbindet.
Dieses Script muss entsprechend der eigenen Steckdose mit Leistungsmessung angepasst werden.
Ansonsten existeren keine Abhängigkeiten zur Steckdose.

define Programm.Waschmaschine.Sync DOIF ([Waschmaschine_Pwr:power] or [Waschmaschine_Pwr:energy] or [Waschmaschine_Sw:state]) (\
  setreading Waschmaschine.Status power [Waschmaschine_Pwr:power],\
  setreading Waschmaschine.Status energy [Waschmaschine_Pwr:energy],\
  setreading Waschmaschine.Status switch [Waschmaschine_Sw:state]\
)
attr Programm.Waschmaschine.Sync do always





Hier habe ich das Herzstück, die Statusermittlung.

define Programm.Waschmaschine.Status DOIF ([Waschmaschine.Status:power] < AttrVal("Waschmaschine.Status", "configPowerOff", 1)) (\
  \
  set Waschmaschine.Status off,\
  setreading Waschmaschine.Status preEnergy 0\
\
) DOELSEIF ([Waschmaschine.Status:power] >= AttrVal("Waschmaschine.Status", "configPowerOff", 1) and [Waschmaschine.Status:state] eq 'off') (\
\
  set Waschmaschine.Status on,\
  setreading Waschmaschine.Status preEnergy [Waschmaschine.Status:energy]\
\
) DOELSEIF ([Waschmaschine.Status:power] >= AttrVal("Waschmaschine.Status", "configPowerDone", 3)) (\
\
  set Waschmaschine.Status running\
\
) DOELSEIF ([Waschmaschine.Status:power] < AttrVal("Waschmaschine.Status", "configPowerDone", 3) and [Waschmaschine.Status:state] eq 'running') (\
\
  set Waschmaschine.Status done,\
  setreading Waschmaschine.Status lastEnergy {([Waschmaschine.Status:energy]-[Waschmaschine.Status:preEnergy])},\
  setreading Waschmaschine.Status totalEnergy {([Waschmaschine.Status:totalEnergy]+[Waschmaschine.Status:lastEnergy])},\
  setreading Waschmaschine.Status lastCost {([Waschmaschine.Status:lastEnergy]/1000*0.25)},\
  setreading Waschmaschine.Status totalCost {([Waschmaschine.Status:totalEnergy]/1000*0.25)},\
  setreading Waschmaschine.Status preEnergy [Waschmaschine.Status:energy]\
\
)
attr Programm.Waschmaschine.Status wait 5:0:0:60


Hier muss leider der Wait-Wert configWaitOff (Spalte 1) und configWaitDone (Spalte 4) noch manuell gepflegt werden.
Sobald Damian sein DOIF gefixt hat, werden diese Werte aus der entsprechenden Konfiguration (Attribute) ausgelesen.

Außerdem muss man den totalEnergy Wert auf 0 setzten. Das kann man immer wieder wiederholen um den Zähler zu resetten.

setreading Waschmaschine.Status totalEnergy 0




Nun können wir eine Benachrichtigung auf den Status "Fertig" einrichten. Wie Ihr Benachrichtig werden wollt, müsst Ihr selber entscheiden.
Ich schicke in dieser Vorlage z.B. eine Nachricht per Pushover auf das Handy und per Enigma2 auf den TV. Das Ganze ist natürlich Optional.

define Programm.Waschmaschine.Benachrichtigung DOIF ([Waschmaschine.Status:state] eq 'done') (\
  set Wohnzimmer.PVR showText Die Waschmaschine ist fertig,\
  set Pushover msg 'FHEM' 'Die Waschmaschine ist fertig'\
)





Das letzte DOIF soll die Steckdose automatisch nach X Minuten abschalten, wenn die Waschmaschine nicht läuft.
Hier muss ebenfalls das Device für das set_off angepasst werden. Wielange gewartet wird, ist abhängig vom Wait-Wert der in Sekunden arbeitet. Das ist ebenfalls optional.

define Programm.Waschmaschine.AutoOff DOIF ([Waschmaschine.Status:state] ne "running" and [Waschmaschine.Status:switch] eq "on") (set Waschmaschine_Sw off)
attr Programm.Waschmaschine.AutoOff wait 900
attr Programm.Waschmaschine.AutoOff do always





Ich hoffe euch gefällt das Ganze! Übrigens, das ganze geht natürlich auch bei einer Spülmaschine oder einem Trockner :D
Im Einsatz:
FHEM: Latest auf RPi2
HM: vCCU, HMLAN, HMUSB2, HM-CC-RD-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-ES-PMWs1-Pl, HM-LC-Sw1PBU-FM, HM-PB-2-WM55-2, HM-RC-8, HM-BP-6-WM55
CUL: ESA2000, Intertechno

traxanos

So habe eine kleine Anpassung am AutoOff vorgenommen. Die Waschmaschine soll nicht automatisch abgeschaltet werden, wenn sie nur eingeschaltet wurde. Das ist notwendig, damit einer Timer der Waschmaschine nicht unterbrochen wird.
Im Einsatz:
FHEM: Latest auf RPi2
HM: vCCU, HMLAN, HMUSB2, HM-CC-RD-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-ES-PMWs1-Pl, HM-LC-Sw1PBU-FM, HM-PB-2-WM55-2, HM-RC-8, HM-BP-6-WM55
CUL: ESA2000, Intertechno

spilu

schau mal hier: http://www.meintechblog.de/2014/01/homematic-funk-steckdose-mit-leistungsmessung-deine-waschmaschine-ist-fertig/

das dürfte doch in etwa das sein, was du gebaut hast? In den Kommentaren findest du auch die Variante mit DOIF. Ansonsten ist auch
http://www.meintechblog.de/2014/02/homematic-funk-steckdose-mit-leistungsmessung-dein-trockner-ist-fertig-0-31-eur/ sicher einen Blick wert.

Lief bei mir hervorragend :-)

Viele Grüße
spilu

traxanos

Ja das kannte ich schon und das hat mich überhaupt auf die Idee gebracht. Aber die Umsetzung hat mir nicht gefallen.

Zum Beispiel möchte ich über Attribute das Verhalten kontrollieren. Auch möchte ich über einen DOIF die Readings auf den Status kopiert werden um so die Abhäningkeiten zu reduzieren.
Im Einsatz:
FHEM: Latest auf RPi2
HM: vCCU, HMLAN, HMUSB2, HM-CC-RD-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-ES-PMWs1-Pl, HM-LC-Sw1PBU-FM, HM-PB-2-WM55-2, HM-RC-8, HM-BP-6-WM55
CUL: ESA2000, Intertechno

harway2007

wo wird das den eingebaut ?
Das letzte DOIF soll die Steckdose automatisch nach X Minuten abschalten, wenn die Waschmaschine nicht läuft.
Hier muss ebenfalls das Device für das set_off angepasst werden. Wielange gewartet wird, ist abhängig vom Wait-Wert der in Sekunden arbeitet. Das ist ebenfalls optional.

Code: [Auswählen]
([Waschmaschine.Status:state] ne "running" and [Waschmaschine.Status:state] ne "on" and [Waschmaschine.Status:switch] ne "off") (set Waschmaschine_Sw off)
attr Programm.Waschmaschine.AutoOff wait 900
attr Programm.Waschmaschine.AutoOff do always

andiw

ich lasse mich regelmäßig erinnern dass die Wäsche fertig gewaschen ist, solange bis ich die Maschine ausgeschaltet habe:

([WaschmaschineStatus] eq "ready" or ([+900] and [WaschmaschineStatus:?ready])) (set PushAndreasJasmin msg 'Waschmaschine' 'Wäsche fertig!' '' 0 'tugboat')

traxanos

@harway2007

Hab die Schreibweise mit dem DOIF ergänzt. Ist beim letzten aktualisieren verloren gegangen.
Im Einsatz:
FHEM: Latest auf RPi2
HM: vCCU, HMLAN, HMUSB2, HM-CC-RD-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-ES-PMWs1-Pl, HM-LC-Sw1PBU-FM, HM-PB-2-WM55-2, HM-RC-8, HM-BP-6-WM55
CUL: ESA2000, Intertechno

traxanos

Zitat von: andiw am 01 August 2015, 11:03:26
ich lasse mich regelmäßig erinnern dass die Wäsche fertig gewaschen ist, solange bis ich die Maschine ausgeschaltet habe:

([WaschmaschineStatus] eq "ready" or ([+900] and [WaschmaschineStatus:?ready])) (set PushAndreasJasmin msg 'Waschmaschine' 'Wäsche fertig!' '' 0 'tugboat')

Hatte ich auch mal überleg brauche ich für mich nicht. Aber gut umgesetzt!
Im Einsatz:
FHEM: Latest auf RPi2
HM: vCCU, HMLAN, HMUSB2, HM-CC-RD-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-ES-PMWs1-Pl, HM-LC-Sw1PBU-FM, HM-PB-2-WM55-2, HM-RC-8, HM-BP-6-WM55
CUL: ESA2000, Intertechno

Damian

Zitat von: andiw am 01 August 2015, 11:03:26


([+900] and [WaschmaschineStatus:?ready])
kann eigentlich nicht sinnvoll sein, denn der Timer und das Ereignis können nie zum gleichen Zeitpunkt wahr sein.

Du meinst wahrscheinlich eine Statusabfrage ohne Trigger:

([+900] and [?WaschmaschineStatus] eq "ready")

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

andiw

@Damian: jetzt wo du es sagst ... ;-) aber es hat bisher trotzdem funktioniert, nur die erste zyklische Meldung kam nicht unbedingt 15min nach der aller ersten ...

Damian

Zitat von: andiw am 01 August 2015, 20:00:32
@Damian: jetzt wo du es sagst ... ;-) aber es hat bisher trotzdem funktioniert, nur die erste zyklische Meldung kam nicht unbedingt 15min nach der aller ersten ...

ja, dann kannst du auch gleich schreiben:

([WaschmaschineStatus] eq "ready" or ![+900]) (set PushAndreasJasmin msg 'Waschmaschine' 'Wäsche fertig!' '' 0 'tugboat')

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

andiw

OK, danke! das sieht noch eleganter aus ;-)

Damian

Zitat von: andiw am 01 August 2015, 21:04:26
OK, danke! das sieht noch eleganter aus ;-)
wenn einem die Wiederholung zuviel wird, kann man auch

attr <di_modul> reapeatsame 5

setzen.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

inesa394

Hi

Ein zusätzliches reading wie
DOELSEIF ([Trockner.Status:power] < AttrVal("Trockner.Status", "configPowerDone", 3) and [Trockner.Status:state] eq 'running') (

  set Trockner.Status done,
  setreading Trockner.Status lastEnergy {([Trockner.Status:energy]-[Trockner.Status:preEnergy])},
  setreading Trockner.Status lastEeuro {([Trockner.Status:energy]-[Trockner.Status:preEnergy] /1000 *0,312)},
  setreading Trockner.Status GesamtEuro {([Trockner.Status:energy] /1000 *0,312)},
  setreading Trockner.Status preEnergy [Trockner.Status:energy]

)

schluckt dein dummy nicht. Wollte mir noch zum Energieverbrauch die Kosten in euro anzeigen lassen.

cu

traxanos

Da bin ich aktuell auch noch dran. Ich will global einen Preis definieren. Und dann überall verwenden. Sobald ich das fertig habe, aktualisiere ich das noch.
Im Einsatz:
FHEM: Latest auf RPi2
HM: vCCU, HMLAN, HMUSB2, HM-CC-RD-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-ES-PMWs1-Pl, HM-LC-Sw1PBU-FM, HM-PB-2-WM55-2, HM-RC-8, HM-BP-6-WM55
CUL: ESA2000, Intertechno

inesa394

Ich habe mir im Aktor HR.Waschmaschine_Power ein userReading angelegt

energy_kwh:energy { ReadingsVal("HR.Waschmaschine_Power","energy",0)/1000 . " kWh";;},kosten:energy {ReadingsVal("HR.Waschmaschine_Power","energy",0)/1000*0.29 . "€";; },einwaschvorgang:energy {(ReadingsVal("HR.Waschmaschine_Power","energy","0") - ReadingsVal("HR.WaschmaschineBetrieb","energy","0"))/1000*0.29 . "€";;}

aber um den vieleicht in dein dummy zu bekommen reichen meine Kenntnisse leider nocht nicht  :-[

traxanos

Habe das Hauptscript um eine Berechnung für die Kosten erweitert. Leider klappt das AttrVal noch nicht, so dass die Kosten im Script direkt angepasst werden müssen. Bei uns liegt der Preis aktuell bei 25 Cent und habe daher 0.25 eingetragen.
Im Einsatz:
FHEM: Latest auf RPi2
HM: vCCU, HMLAN, HMUSB2, HM-CC-RD-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-ES-PMWs1-Pl, HM-LC-Sw1PBU-FM, HM-PB-2-WM55-2, HM-RC-8, HM-BP-6-WM55
CUL: ESA2000, Intertechno

inesa394

#17
Bei mir funktioniert das mit den readings "lastCost" "totalCost" nicht
seitdem ich sie mit dazu genommen habe erfolgt keine aktualisierung,
die werte ändern sich einfach nicht.

Maschine war seitdem zweimal in Betrieb

HoTi

Schön schön, danke. werde das jetzt mal testen.

Ich muss es aber noch erweitern da bei meinem Hutschienen Leistungsmessung Waschmaschine und Trockner zusammen dran hängen.

Muss mal sehen wie ich die beiden unterscheiden kann.
Viele Grüße aus  Oberbayern
Tim (RettungsTim)

kvo1

Hallo traxanos
coole Idee, danke ! werd ich mal testen  ;)
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

hjjk

Ich habe mal versucht den Waschmaschinenstatus bei mir einzusetzen.
Nach vielen Versuchen komme ich nicht weiter und trete auf der Stelle.

Den Syn Bereich habe ich angepasst.
Als Meldung im Log erhalte ich
Programm.Waschmaschine.Status: reading does not exist: [Waschmaschine.Status:state]

Ich habe mal in die Zeile zu Anfang mit dem attr Waschmaschine.Status stateFormat
in die geschweiften Klammern ein print "State=$state" eingesetzt und sehe das State nie einen Wert zugewiesen bekommt.
Was mache ich falsch ?

tomster

Zitat von: hjjk am 27 Januar 2016, 15:40:04
Als Meldung im Log erhalte ich
Programm.Waschmaschine.Status: reading does not exist: [Waschmaschine.Status:state]

Was mache ich falsch ?
Ich glaub da hat sich ein Fehler eingeschlichen...
Probier Mal:

define Programm.Waschmaschine.Sync DOIF ([Waschmaschine_Pwr:power] or [Waschmaschine_Pwr:energy] or [Waschmaschine_Sw:state]) (\
  setreading Waschmaschine.Status power [Waschmaschine_Pwr:power],\
  setreading Waschmaschine.Status energy [Waschmaschine_Pwr:energy],\
  setreading Waschmaschine.Status state [Waschmaschine_Sw:state]\
)
attr Programm.Waschmaschine.Sync do always


Also setreading Waschmaschine.Status state [Waschmaschine_Sw:state] an Stelle von setreading Waschmaschine.Status switch [Waschmaschine_Sw:state]

DJ-Mix

Hallo,

habe auch ein Problem - es schaltet mir immer den Switch nach 15 Minuten aus (und somit den Waschgang)????
Kann aber den Fehler nicht wirklich finden . . .
Mein Code anbei . . .
define Waschmaschine.Status dummy
attr Waschmaschine.Status userattr configPowerOff configWaitOff configPowerDone configWaitDone configTimerAutoOff
attr Waschmaschine.Status configPowerDone 3
attr Waschmaschine.Status configPowerOff 1
attr Waschmaschine.Status configTimerAutoOff 900
attr Waschmaschine.Status configWaitDone 60
attr Waschmaschine.Status configWaitOff 5
attr Waschmaschine.Status event-on-change-reading state, energy
attr Waschmaschine.Status event-on-update-reading power
attr Waschmaschine.Status room Testraum
attr Waschmaschine.Status stateFormat { my $state = ReadingsVal($name, "state", "");;;; my $power = ReadingsVal($name, "power", "");;;; if($state eq 'on') { "An" } elsif($state eq "done") { "Fertig" } elsif($state eq "running") { "Läuft ($power W)" } else { "off" } }
define Programm.Waschmaschine.Sync DOIF ([Waschmaschine_Pwr:power] or [Waschmaschine_Pwr:energy] or [Waschmaschine_Sw:state]) (setreading Waschmaschine.Status power [Waschmaschine_Pwr:power], setreading Waschmaschine.Status energy [Waschmaschine_Pwr:energy], setreading Waschmaschine.Status switch [Waschmaschine_Sw:state])
attr Programm.Waschmaschine.Sync do always
attr Programm.Waschmaschine.Sync room Testraum
define Programm.Waschmaschine.Status DOIF ([Waschmaschine.Status:power] < AttrVal("Waschmaschine.Status", "configPowerOff", 1)) (set Waschmaschine.Status off, \
setreading Waschmaschine.Status preEnergy 0) DOELSEIF ([Waschmaschine.Status:power] >= AttrVal("Waschmaschine.Status", "configPowerOff", 1) and [Waschmaschine.Status:state] eq 'off') (set Waschmaschine.Status on, \
setreading Waschmaschine.Status preEnergy [WK_Waschmaschine_Power:energy]) DOELSEIF ([Waschmaschine.Status:power] >= AttrVal("Waschmaschine.Status", "configPowerDone", 3)) \
(set Waschmaschine.Status running) DOELSEIF ([Waschmaschine.Status:power] < AttrVal("Waschmaschine.Status", "configPowerDone", 3) and [Waschmaschine.Status:state] eq 'running') (set Waschmaschine.Status done, \
setreading Waschmaschine.Status lastEnergy {([Waschmaschine.Status:energy]-[Waschmaschine.Status:preEnergy])}, \
setreading Waschmaschine.Status totalEnergy {([Waschmaschine.Status:totalEnergy]+[Waschmaschine.Status:lastEnergy])}, \
setreading Waschmaschine.Status lastCost {([Waschmaschine.Status:lastEnergy]/1000*0.25)},\
setreading Waschmaschine.Status totalCost {([Waschmaschine.Status:totalEnergy]/1000*0.25)}, \
setreading Waschmaschine.Status preEnergy [Waschmaschine.Status:energy])
attr Programm.Waschmaschine.Status room Testraum
attr Programm.Waschmaschine.Status wait 5:0:0:60
define Programm.Waschmaschine.Benachrichtigung DOIF ([Waschmaschine.Status:state] eq 'done') (set Pushover1 msg 'FHEM' 'Die Waschmaschine ist fertig' )
attr Programm.Waschmaschine.Benachrichtigung room Testraum
define Programm.Waschmaschine.AutoOff DOIF ([Waschmaschine.Status:state] ne "running" and [Waschmaschine.Status:switch] eq "on") (set Waschmaschine_Sw off)
attr Programm.Waschmaschine.AutoOff do always
attr Programm.Waschmaschine.AutoOff room Testraum
attr Programm.Waschmaschine.AutoOff wait 900


Gruß
DJ-Mix
FHEM - RaspberryPi/Fritz!Box 7390 - 1x HM-CFG-LAN - 3x HM-CC-RT-DN - 3x HM-LC-Bl1PBU-FM - 1x HM-LC-Sw1PBU-FM

wibi_

Bei 15 Minuten sind würde ich auf
"attr Waschmaschine.Status configTimerAutoOff 900"
tippen und das mal rausnehmen.

Gruß
RPI4, RPI3, RPI2, CULV3_HM, CULV3_FS20, CULV3_RFR, ZWave, 1-Wire, ESPEasy, Signalduino

DJ-Mix

Ok, werde ich ausprobieren. Habe den Code 1zu1 übernommen.
Wundert mich das ich das Problem alleine scheinbar habe ???

Und es soll ja nach Fertigstellung auch ausgeschaltet werden.
Nur nicht schon bereits bei Beginn.

Gruß
DJ-Mix
FHEM - RaspberryPi/Fritz!Box 7390 - 1x HM-CFG-LAN - 3x HM-CC-RT-DN - 3x HM-LC-Bl1PBU-FM - 1x HM-LC-Sw1PBU-FM

uniqueck

Guten Abend,

ich habe auch versucht diese Anleitung mal umzusetzen, allerdings habe ich eine Steckdose von Edimax, diese liefert die Leistungsdaten im Format xxx W für Watt. Wie kann ich denn in einem DOIF beim Übernehmen der Werte aus der Schaltsteckdose, dass W weglassen?
Ich habe es schon mit einem Regex in der Form /(\d+)/ versucht, allerdings steht dann immer im Dummy der Regex direkt hinten am Wert mit dran.
Mit Hilfe von einer Hilfevariable my $power = [DeviceName:power], allerdings funktioniert das anwenden des regex auch nicht hierauf.

Kann mir hier jemand einen Denkanstoß geben?

Eisix

Hallo,

falls noch jemand ein StatusIcon für TabletUI braucht


<div data-type="symbol"
                data-device="Waschmaschine.Status"
                data-get-on='["on","off","running","done"]'                 
                data-icons='["oa-scene_washing_machine","oa-scene_washing_machine","oa-scene_washing_machine fa-spin","oa-scene_washing_machine"]'
                data-colors='["white","darkgray","blue","#21a000"]'
                class="cell small">
          </div>
          <div data-type="label" class="cell narrow small">Waschmaschine</div>


Gruß
Eisix

turo

@uniqueck:
Problem inzwischen gelöst?

Sonst fällt mir das [DeviceName:power:d] ein oder wenn man es selber machen will:
(my $power = [DeviceName:power]) =~ s/ W//

Gruss,
turo
3xRaspberry PI, Homematic, SELVE Rollos, 1-wire, Logitech Harmony, Alexa, Fussbodenheizung (ESP8266), Netatmo

uniqueck

@turo: jap vielen dank, ich hatte ein neuen thread explizit zum thema doif erstellt und damian war so freundlich mir auf die sprünge zu helfen. Wobei der Part mit dem regex auch interessant ist, da habe ich nämlich ne ganze Weile rum gebastelt. Die obere Variante habe ich aber nun im Einsatz [DeviceName:power:d].

gruß uniqueck

Kermit20

Hallo Gemeinde,

ich wollte mich mal nachfragen, ob das hier erwähnte Teil


Folgende Attribute können angepasst werden:
•configPowerOff Angabe in Watt. Bei Unterschreitung ändert sicht der Status zu "Aus" unter Beachtung des configWaitOff
•configPowerDone Angabe in Watt. Bei Unterschreitung ändert sicht der Status zu "Fertig" unter Beachtung des configWaitDone
•configWaitOff Angabe in Sekunden. Wie lange muss der Wert configPowerOff unterschritten sein, damit sich der Status auf "Aus" ändert (! Wir noch nicht beachtet da eine anpassung im DOIF fehlt.)
•configWaitDone Angabe in Sekunden. Wie lange muss der Wert configPowerDone unterschritten sein, damit sich der Status auf "Fertig" ändert (! Wir noch nicht beachtet da eine anpassung im DOIF fehlt.)

im DOIF Modul mittlerweile integriert wurde. Und was dann evtl. abgeändert werden kann.
RPi1: FHEM mit HMLAN und CUL Eigenbau: diverse Homematic Geräte; Technoline Temp/Feuchte 868 MHz // Schalsteckdosen 433 MHz
RPi2: FHEM mit Viessmann(optolink) mit VControl und 1W Sensoren
RPi3: Apache / Owncloud 9

miki

Zitat von: traxanos am 10 August 2015, 21:22:48
Habe das Hauptscript um eine Berechnung für die Kosten erweitert. Leider klappt das AttrVal noch nicht, so dass die Kosten im Script direkt angepasst werden müssen. Bei uns liegt der Preis aktuell bei 25 Cent und habe daher 0.25 eingetragen.

Markus80

Hi,
Ist hier noch jemand, der sich mit diesem Thema beschäftigt?

Liebe Grüße

Gesendet von meinem C6903 mit Tapatalk


Markus80

Hi,
Ist hier noch jemand, der sich mit diesem Thema beschäftigt?

Liebe Grüße

Gesendet von meinem C6903 mit Tapatalk


olliwood

Hallo Markus,

ich habe heute auch damit begonnen, mich mit dieser Funktion zu beschäftigen. Bisher hab ich den Code allerdings nur theoretisch implementiert. Waschtag ist erst übermorgen.  ;D

Gruß
Oliver

Markus80

Habe die Lösung über das Doif Modul dafür gewählt und Fertigmeldung über Telegram...
Läuft bisher sehr gut

Gesendet von meinem C6903 mit Tapatalk


Devender

Zitat von: Markus80 am 15 Februar 2017, 21:37:18
Habe die Lösung über das Doif Modul dafür gewählt und Fertigmeldung über Telegram...
Läuft bisher sehr gut

Gesendet von meinem C6903 mit Tapatalk

Könntest du deinen Code bitte mal Posten?
Ich habs es auch per DoIF geloest. Leider bekomme ich eine Endlosschleife im DoIF wenn die WaMa fertig ist :(
Vielleicht bekomme ich durch dein laufendes Skript den richtigen Denkanstoß.

Danke
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

Christian Uhlmann

Hallo zusammen,

mich würde auch interessieren, ob dies mittlerweile im DOIF eingebunden ist und dort irgendwie dynamisch ohne Attribute genutzt werden kann:
Zitat von: traxanos am 27 Juli 2015, 23:50:40
Folgende Attribute können angepasst werden:

  • configWaitOff Angabe in Sekunden. Wie lange muss der Wert configPowerOff unterschritten sein, damit sich der Status auf "Aus" ändert (! Wir noch nicht beachtet da eine anpassung im DOIF fehlt.)
  • configWaitDone Angabe in Sekunden. Wie lange muss der Wert configPowerDone unterschritten sein, damit sich der Status auf "Fertig" ändert (! Wir noch nicht beachtet da eine anpassung im DOIF fehlt.)

Die Lösung ist die für mich bisher die beste Lösung.
Hat das vielleicht jemand schon eingebaut?

@traxanos: vielen Dank für das bereitstellen der Lösung.


Danke und Grüße

Christian
Host: Debian Buster als VM / XCP-NG
Gateways: DuoFern Stick, CUL433 Revolt, CUL MAX, HMLan, HM-USB 2, LaCrosseGateway
Devices: 12x Rademacher Rollos, 6x TX 29 DT-HT, 10x HM-CC-RT-DN, 14x MAX Fensterkontakte, Diverse HM Aktoren für Licht, Klingel, Gong, Eingangstür, ESPEasy, Sonoff mit Tasmota

loescher

Hi!

Das  mit den Attributen müsste doch so funktionieren:

attr Programm.Waschmaschine.Status wait Attr("Waschmaschine.Status","configPowerDone",5):0:0:Attr("Waschmaschine.Status","configWaitDone",60)


LG,
Stephan.

bstaeheli

#38
Fast richtig:
attr Programm.Waschmaschine.Status wait Attr("Waschmaschine.Status","configWaitOff",5):0:0:Attr("Waschmaschine.Status","configWaitDone",60)

Auch das AutoPowerOff kann im Wait-Attribut angepasst werden:
attr Programm.Waschmaschine.AutoOff wait Attr("Waschmaschine.Status","configTimerAutoOff",900)

Dlay

Hallo zusammen,

ich möchte das auch gern umsetzen aber irgendwie will es nicht funktionieren.
Die Readings werden schon mal ausgelesen (vom mqtt Gerät).

Aber im Waschmaschinen Status wird nur angezeigt das sie angeschaltet ist. Nichts weiter.
So wie ich als Laie das sehe sollte er doch den aktuellen Verbrauch "Läuft (200W)" irgendwo anzeigen.. macht er aber nicht :-(

Oder muss die Waschmaschine einmal durchgelaufen sein ?

Wo ist der Fehler ?

Das dummy Waschmaschine.Status sieht so aus:
---------------------------------------------------
configPowerDone 3
configPowerOff 1
configTimerAutoOff 900
configWaitDone 60
configWaitOff 5
event-on-change-reading state, energy
event-on-update-reading power
room Waschmaschine
stateFormat { my $state = ReadingsVal($name, "state", ""); my $power = ReadingsVal($name, "power", ""); if($state eq '1') { "An" } elsif($state eq "done") { "Fertig" } elsif($state eq "running") { "Läuft ($power W)" } else { "Aus" } }

userattr configPowerOff configWaitOff configPowerDone configWaitDone configTimerAutoOff

Programm.Waschmaschine.Sync sieht wie folgt aus:
------------------------------------------------------
DEF   
([mqtt_pow_wasch:apower] or [mqtt_pow_wasch:energy] or [Schalter_Keller:state]) (setreading Waschmaschine.Status power [mqtt_pow_wasch:apower],setreading Waschmaschine.Status energy [mqtt_pow_wasch:energy],setreading Waschmaschine.Status state [Schalter_Keller:state])

do always

Programm.Waschmaschine.Status sieht wie folgt aus:
--------------------------------------------------------

DEF   
([Waschmaschine.Status:power] < AttrVal("Waschmaschine.Status", "configPowerOff", 1)) (set Waschmaschine.Status off,setreading Waschmaschine.Status preEnergy 0) DOELSEIF ([Waschmaschine.Status:power] >= AttrVal("Waschmaschine.Status", "configPowerOff", 1) and [Waschmaschine.Status:state] eq 'off') (set Waschmaschine.Status on,setreading Waschmaschine.Status preEnergy [Waschmaschine.Status:energy]) DOELSEIF ([Waschmaschine.Status:power] >= AttrVal("Waschmaschine.Status", "configPowerDone", 3)) (set Waschmaschine.Status running) DOELSEIF ([Waschmaschine.Status:power] < AttrVal("Waschmaschine.Status", "configPowerDone", 3) and [Waschmaschine.Status:state] eq 'running') (set Waschmaschine.Status done,setreading Waschmaschine.Status lastEnergy {([Waschmaschine.Status:energy]-[Waschmaschine.Status:preEnergy])},setreading Waschmaschine.Status totalEnergy {([Waschmaschine.Status:totalEnergy]+[Waschmaschine.Status:lastEnergy])},setreading Waschmaschine.Status lastCost {([Waschmaschine.Status:lastEnergy]/1000*0.25)},setreading Waschmaschine.Status totalCost {([Waschmaschine.Status:totalEnergy]/1000*0.25)},setreading Waschmaschine.Status preEnergy [Waschmaschine.Status:energy])

wait 5:0:0:60

Ich brüte schon seit Stunden und verstehe es einfach nicht :-(

Vielen lieben Dank falls jemand helfen sollte..

Dlay

Bitte nicht alle auf einmal  :-\

CoolTux

Hast Du Dir mal angeschaut wie das aus sieht. Das kann und will doch keiner lesen.
Bitte verwende für Code und Logausgaben die Codetags des Forums. Oben Symbolleiste vom Forumeditor das # Symbol.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Benni

Und von den beteiligten devices ein vollständiges list (gerne natürlich in Code-Tags) ist auch nie verkehrt. ;)

https://forum.fhem.de/index.php/topic,71806.0.html

CoolTux

Leider ist der Verursacher des Codes seit 27. November nicht mehr hier gewesen. Wie ich sowas liebe.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Benni

Zitat von: CoolTux am 16 Mai 2017, 08:17:33
Leider ist der Verursacher des Codes seit 27. November nicht mehr hier gewesen. Wie ich sowas liebe.

Nun gut, aber wir sind ja hier aber auch unter "Codeschnipsel" und nicht bei den betreuten Modulen ;)

l2r

Bist du dir sicher dass das Reading apower heißt?

[mqtt_pow_wasch:apower]

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

Dlay

#46
Hallo zusammen,

da vor mir bereits andere User Fragen in diesem Thread gestellt haben dachte ich das ich das auch dürfte, scheint wohl Unterschiede im Userstatus geben wer wo was fragen darf..  ::)

Also hier das "list" von meinem mqtt_pow_wasch Device:
Internals:
   DEF        pow_wasch
   IODev      MQTTBroker
   NAME       mqtt_pow_wasch
   NOTIFYDEV  pow_wasch
   NR         34
   STATE      incoming publish received
   TYPE       MQTT_DEVICE
   qos        0
   retain     0
   Readings:
     2017-05-16 21:23:09   apower          0
     2017-05-16 21:23:09   current         0.00
     2017-05-16 21:23:09   energy          0.000
     2017-05-16 21:19:18   rssi            -60
     2017-05-11 21:13:15   state           0
     2017-05-16 21:23:09   transmission-state incoming publish received
     2017-05-16 21:23:09   voltage         218
   Message_ids:
   Publishsets:
     :
       topic      /zuhause/schalter/mqtt_pow_wasch/relay/0
       values:
         0
         1
     Led:
       topic      /zuhause/schalter/mqtt_pow_wasch/led/
       values:
   Sets:
     0
     1
     led
   subscribe:
     /zuhause/schalter/mqtt_pow_wasch/apower
     /zuhause/schalter/mqtt_pow_wasch/current
     /zuhause/schalter/mqtt_pow_wasch/energy
     /zuhause/schalter/mqtt_pow_wasch/rssi
     /zuhause/schalter/mqtt_pow_wasch/voltage
   subscribeExpr:
     ^\/zuhause\/schalter\/mqtt_pow_wasch\/apower$
     ^\/zuhause\/schalter\/mqtt_pow_wasch\/current$
     ^\/zuhause\/schalter\/mqtt_pow_wasch\/energy$
     ^\/zuhause\/schalter\/mqtt_pow_wasch\/rssi$
     ^\/zuhause\/schalter\/mqtt_pow_wasch\/voltage$
   Subscribereadings:
     /zuhause/schalter/mqtt_pow_wasch/apower apower
     /zuhause/schalter/mqtt_pow_wasch/current current
     /zuhause/schalter/mqtt_pow_wasch/energy energy
     /zuhause/schalter/mqtt_pow_wasch/rssi rssi
     /zuhause/schalter/mqtt_pow_wasch/voltage voltage
Attributes:
   IODev      MQTTBroker
   publishSet 0 1 /zuhause/schalter/mqtt_pow_wasch/relay/0
   publishSet_led /zuhause/schalter/mqtt_pow_wasch/led/
   stateFormat transmission-state
   subscribeReading_apower /zuhause/schalter/mqtt_pow_wasch/apower
   subscribeReading_current /zuhause/schalter/mqtt_pow_wasch/current
   subscribeReading_energy /zuhause/schalter/mqtt_pow_wasch/energy
   subscribeReading_rssi /zuhause/schalter/mqtt_pow_wasch/rssi
   subscribeReading_voltage /zuhause/schalter/mqtt_pow_wasch/voltage


"list" Waschmaschine.Status beinhaltet:
Internals:
   CHANGED
   NAME       Waschmaschine.Status
   NR         82
   STATE      Aus
   TYPE       dummy
   Readings:
     2017-05-16 21:27:09   energy          0.000
     2017-05-16 21:27:09   power           0
     2017-05-14 13:38:24   preEnergy       0
     2017-05-16 21:27:09   state           0
     2017-05-11 19:19:08   totalEnergy     0
Attributes:
   configPowerDone 3
   configPowerOff 1
   configTimerAutoOff 900
   configWaitDone 60
   configWaitOff 5
   event-on-change-reading state, energy
   event-on-update-reading power
   room       Waschmaschine
   stateFormat { my $state = ReadingsVal($name, "state", ""); my $power = ReadingsVal($name, "power", ""); if($state eq '1') { "An" } elsif($state eq "done") { "Fertig" } elsif($state eq "running") { "Läuft ($power W)" } else { "Aus" } }
   userattr   configPowerOff configWaitOff configPowerDone configWaitDone configTimerAutoOff


und das "list" vom Programm.Waschmaschine.Sync
Internals:
   DEF        ([mqtt_pow_wasch:apower] or [mqtt_pow_wasch:energy] or [Schalter_Keller:state]) (setreading Waschmaschine.Status power [mqtt_pow_wasch:apower],setreading Waschmaschine.Status energy [mqtt_pow_wasch:energy],setreading Waschmaschine.Status state [Schalter_Keller:state])
   NAME       Programm.Waschmaschine.Sync
   NR         84
   NTFY_ORDER 50-Programm.Waschmaschine.Sync
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-05-16 21:28:09   Device          mqtt_pow_wasch
     2017-05-16 21:28:09   cmd             1
     2017-05-16 21:28:09   cmd_event       mqtt_pow_wasch
     2017-05-16 21:28:09   cmd_nr          1
     2017-05-11 21:13:15   e_Schalter_Keller_state 0
     2017-05-16 21:28:09   e_mqtt_pow_wasch_apower 0
     2017-05-16 21:28:09   e_mqtt_pow_wasch_energy 0.000
     2017-05-11 20:00:38   mode            enable
     2017-05-16 21:28:09   state           cmd_1
   Condition:
     0          ReadingValDoIf($hash,'mqtt_pow_wasch','apower') or ReadingValDoIf($hash,'mqtt_pow_wasch','energy') or ReadingValDoIf($hash,'Schalter_Keller','state')
   Devices:
     0           mqtt_pow_wasch Schalter_Keller
     all         mqtt_pow_wasch Schalter_Keller
   Do:
     0:
       0          setreading Waschmaschine.Status power [mqtt_pow_wasch:apower],setreading Waschmaschine.Status energy [mqtt_pow_wasch:energy],setreading Waschmaschine.Status state [Schalter_Keller:state]
     1:
   Helper:
     event      apower: 0
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   mqtt_pow_wasch
     timerevent apower: 0
     triggerDev mqtt_pow_wasch
     timerevents:
       apower: 0
     timereventsState:
       apower: 0
     triggerEvents:
       apower: 0
     triggerEventsState:
       apower: 0
   Internals:
   Itimer:
   Readings:
     0           mqtt_pow_wasch:apower mqtt_pow_wasch:energy Schalter_Keller:state
     all         mqtt_pow_wasch:apower mqtt_pow_wasch:energy Schalter_Keller:state
   Regexp:
     0:
     All:
   State:
     State:
   Trigger:
Attributes:
   do         always
   room       Waschmaschine


braucht ihr noch weitere Informationen ?

l2r

ich schau mir das nachher mal in ruhe an und vergleiche mit meiner config.


Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

l2r

hi,

durch dein Snyc-DOIF überträgst du den Status von dem Schalter in State von Waschmaschine.Status
... setreading Waschmaschine.Status state [Schalter_Keller:state])

Da diese ausgelöst wird, sobald sich der Schalter, aber auch die Power und energy-Readings ändern, also ich würde mal tippen ständig, wird das state-Reading ständig mit "an" (oder wie der Status von deinem Schalter auch immer ist) überschrieben und das letzte DOIF, welches den erweiterten Status darstellt kommt nicht richtig zum Zug, so zumindest meine Vermutung.

ich lasse das den Status in ein Reading switch bei mir schreiben.

hier die Definition vom Sync-DOIF:
Define di_WaschmaschineSync DOIF
([sw_Waschmaschine_Pwr:power] or [sw_Waschmaschine_Pwr:energy] or [Waschmaschine_sw:state]) (setreading Waschmaschine.Status power [sw_Waschmaschine_Pwr:power],setreading Waschmaschine.Status energy [sw_Waschmaschine_Pwr:energy],setreading Waschmaschine.Status switch [Waschmaschine_sw:state])

attr di_WaschmaschineSync do always


und hier mit Status-DOIF:
Define di_WaschmaschineStatus DOIF([Waschmaschine.Status:power] >= AttrVal("Waschmaschine.Status", "configPowerOff", 1) and [Waschmaschine.Status:state] eq 'off') (
set Waschmaschine.Status on,
setreading Waschmaschine.Status preEnergy [Waschmaschine.Status:energy]
)
DOELSEIF ([Waschmaschine.Status:power] >= AttrVal("Waschmaschine.Status", "configPowerDone", 3)) (
set Waschmaschine.Status running,
{fhem 'setreading Waschmaschine.Status ZeitStart '.strftime('%H:%M', localtime)},
)
DOELSEIF ([Waschmaschine.Status:state] eq 'done' and [Waschmaschine.Status:power] < AttrVal("Waschmaschine.Status", "configPowerOff", 1)) (
set Waschmaschine.Status off
)
DOELSEIF ([Waschmaschine.Status:power] < AttrVal("Waschmaschine.Status", "configPowerDone", 3) and [Waschmaschine.Status:state] eq 'running') (
set Waschmaschine.Status done,
{fhem 'setreading Waschmaschine.Status ZeitFertig '.strftime('%H:%M', localtime)},
setreading Waschmaschine.Status lastEnergy {([Waschmaschine.Status:energy]-[Waschmaschine.Status:preEnergy])},
setreading Waschmaschine.Status totalEnergy {([Waschmaschine.Status:totalEnergy]+[Waschmaschine.Status:lastEnergy])},
setreading Waschmaschine.Status lastCost {(round(([Waschmaschine.Status:lastEnergy]/1000*0.25),2))},
setreading Waschmaschine.Status totalCost {(round(([Waschmaschine.Status:totalEnergy]/1000*0.25),2))},
setreading Waschmaschine.Status preEnergy [Waschmaschine.Status:energy],
msg @rr_Michael -1 |WASCHRAUM| Waschmaschine fertig. Bitte die Wäsche aufhängen! - [Waschmaschine.Status:lastCost]€,
(msg push,audio @rr_Ursula |WASCHRAUM| Die Waschmaschine ist fertig. Bitte die Wäsche aufhängen! - [Waschmaschine.Status:lastCost]€)
)

attr di_WaschmaschineStatus wait 60:60:60:180


Ich hoffe das hilft dir ein bisschen weiter. Ich würde das
setreading Waschmaschine.Status state [Schalter_Keller:state]

zunächst weglassen oder in
setreading Waschmaschine.Status switch [Schalter_Keller:state]

ändern.

Gruß Michael

Wissen ist Macht.
Ich weiß nix.
Macht nix.

Dlay

#49
Hallo Michael,

danke für deine Mühe!

Ich habe alles so übernommen wie du geschrieben hast.
Allerdings funktionierte es danach noch nicht.

Dafür musste ich bei Waschmaschine.Status das StateFormat auch noch auf "switch" anpassen:

{ my $state = ReadingsVal($name, "switch", "");


Jetzt habe ich eine Wäsche angeworfen, allerdings funktioniert es noch immer nicht korrekt.
Im StateFormat steht ja folgendes:

elsif($state eq "running") { "Läuft ($power W)" }

trotzdem zeigt er mir nirgends "Läuft (322W)" an. Obwohl das state auf running ist, also er die Ausgabe ja dann eigentlich gegen "Läuft..." ersetzen sollte. Auch power wird mit den aktuellen Werten befüllt..

irgendwo scheint noch der Wurm drin zu stecken.

Hast du noch eine Idee ?

Gruß
Stefan

P. S. : Maschine ist gelaufen. Am Ende kriege ich sogar eine Telegram Nachricht. Das ist schon mal super. Aber die Zusammenfassung der Kosten in Euro bleibt bei 0.00, also irgendwo liest er die Daten nicht, angezeigt werden sie allerdings. (also die readings von energy und power etc...)

l2r

das mit der Kostenberechnung könnte an Fehlenden Readings bei der ersten Berechnung liegen.

Setzt die Readings einmalig mal manuell und schau dann, ob die beim nächsten Waschgang übernommen werden.

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

Dlay

Tja da tut sich nichts bezüglich der Kosten.

Das gleiche bei meinem Geschirrspüler, auch da 0.00 Kosten.


tomspatz

@l2r

Hey Michael

Falls das Gerät nur mal an und dann wieder ausgeschaltet wird bleibt es trotzdem auf an.
Ich glaube das sollte man so ändern:
Define di_WaschmaschineStatus DOIF([Waschmaschine.Status:power] >= AttrVal("Waschmaschine.Status", "configPowerOff", 1) and [Waschmaschine.Status:state] eq 'off') (
set Waschmaschine.Status on,
setreading Waschmaschine.Status preEnergy [Waschmaschine.Status:energy]
)
DOELSEIF ([Waschmaschine.Status:power] >= AttrVal("Waschmaschine.Status", "configPowerDone", 3)) (
set Waschmaschine.Status running,
{fhem 'setreading Waschmaschine.Status ZeitStart '.strftime('%H:%M', localtime)},
)
DOELSEIF (([Waschmaschine.Status:state] eq 'done' or [Waschmaschine.Status:state] eq 'on') and [Waschmaschine.Status:power] < AttrVal("Waschmaschine.Status", "configPowerOff", 1)) (
         set Waschmaschine.Status off
)
DOELSEIF ([Waschmaschine.Status:power] < AttrVal("Waschmaschine.Status", "configPowerDone", 3) and [Waschmaschine.Status:state] eq 'running') (
set Waschmaschine.Status done,
{fhem 'setreading Waschmaschine.Status ZeitFertig '.strftime('%H:%M', localtime)},
setreading Waschmaschine.Status lastEnergy {([Waschmaschine.Status:energy]-[Waschmaschine.Status:preEnergy])},
setreading Waschmaschine.Status totalEnergy {([Waschmaschine.Status:totalEnergy]+[Waschmaschine.Status:lastEnergy])},
setreading Waschmaschine.Status lastCost {(round(([Waschmaschine.Status:lastEnergy]/1000*0.25),2))},
setreading Waschmaschine.Status totalCost {(round(([Waschmaschine.Status:totalEnergy]/1000*0.25),2))},
setreading Waschmaschine.Status preEnergy [Waschmaschine.Status:energy],
msg @rr_Michael -1 |WASCHRAUM| Waschmaschine fertig. Bitte die Wäsche aufhängen! - [Waschmaschine.Status:lastCost]€,
(msg push,audio @rr_Ursula |WASCHRAUM| Die Waschmaschine ist fertig. Bitte die Wäsche aufhängen! - [Waschmaschine.Status:lastCost]€)
)



NOCH nicht getestet.  ;)

LG
Tom

l2r

da hast du recht. Werde ich bei Gelegenheit mal testen.

Danke


Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

tomspatz

#54
Hey Michael
Noch etwas ist mir aufgefallen, bei cmd_1 wird ja das Reading setreading Waschmaschine.Status preEnergy [Waschmaschine.Status:energy] "gespeichert"

Dann allerdings bei cmd_4 wieder, das sollte m.E. raus sonst hast du Null Kosten weil Null Verbrauch, vielleicht hat das @Dlay diese Auswirkung.

Falls du das so schon am laufen hast probiere mal aus.

Ich mache das hier erst in Trockenübung.


EDIT: Der TE hat das genauso geschrieben, das kann nicht funktionieren, werde das am WE mal Test weise umsetzten !!


LG
Tom

l2r

Das mit den Kosten funktioniert. Es ist aber in cmd4 überflüssig und wird nach der Berechnung erst gesetzt. Somit habe ich schon kosten[emoji57]

Der Code stammt auch noch aus meinen Anfangszeiten von Fame und Doif[emoji6] wird glaub ich mal Zeit ein bisschen aufzuräumen und zu optimieren

Gruß Michael


Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

shrek71

Hallo,

gibt es  die Konfiguration auch in einem Guss, Sprich eine RAW Definition.
Das wäre super  ;)
Alle einzelne Nachrichten durchzulesen und die Einstellungen zu machen ist sehr fehleranfällig.

Gruß,
Shrek

Benni

Zitat von: shrek71 am 31 Mai 2018, 12:35:12
gibt es  die Konfiguration auch in einem Guss, Sprich eine RAW Definition.
Das wäre super  ;)
Alle einzelne Nachrichten durchzulesen und die Einstellungen zu machen ist sehr fehleranfällig.

Sorry, aber das ist leider die falsche Einstellung!
Nur wenn du verstehst, wie's funktioniert, kommst du auf lange Sicht weiter.
Einfach abzuschreiben ist zwar bequem aber letztendlich nicht Zielführend.
Kann mir auch nicht vorstellen, dass du auf die Art viel Unterstützung bekommst.

gb#

shrek71

Hallo,
Danke für die Nachricht.
Ging mir nicht um das Lernen sondern ob es das Ganze in kompakter Form gibt um des dann zu
analysieren und anzupassen. Ansonsten muss ich Konfiguration aus Nachricht 1 nehmen und dann die
weiteren 40 Nachrichten zu lesen um am Ende eventuelle Bugs entfernt zu haben. Zum Beispiel, kann man
eine funktionsfähige Einstellung mit einer Version versehen und an die erste Nachricht anhängen. Als
Software-Entwickler und Teamleiter mache ich das so.
War aber nur eine Frage, weiteres hat sich hiermit erledigt.

Gruß,
Shrek

Eistee

Hi,

ich möchte auch mal meinen Ansatz zeigen. ich verwende eine Revolt Steckdose und mit diesem DOIF mache ich die Auswertung:
defmod bz.Waschmaschine DOIF ([bz.Waschmaschine.power:power] >= 15.0)\
(setreading $SELF energyStart [bz.Waschmaschine.power:energy])\
DOELSEIF ([bz.Waschmaschine.power:power] <= 2.5 and [bz.Waschmaschine.power:current] > 0.02 and [$SELF:cmd] eq 1)\
DOELSEIF ([bz.Waschmaschine.power:current] <= 0.02)\
(setreading $SELF energyLast {([bz.Waschmaschine.power:energy]-[$SELF:energyStart])},\
setreading $SELF Waschladungen {([$SELF:Waschladungen,0]+1)})\

attr bz.Waschmaschine alias Waschmaschine
attr bz.Waschmaschine cmdState on|standby|off
attr bz.Waschmaschine devStateIcon on:general_an@green standby:general_aus@orange off:general_aus@red
attr bz.Waschmaschine icon scene_washing_machine
attr bz.Waschmaschine wait 180:180:180


LG Alina

ReneH87

Hier mal mein Ansatz als eigenes Modul, mit nachfolgendem Notify als Trigger. Die Variablen "espInterval" (= Interval in welchem Daten von der Steckdose abgefragt werden), "configPowerOff" (=Leistung, wenn WaMa aus), "configPowerDone" (=Leistung, wenn WaMa fertig), "configWaitDone" (=Wartezeit, wenn Wert unter "configPowerDone" fällt. Danach wird nochmal geprüft, ob WaMa weiterhin unter diesem Schwellwert ist. Erst danach wird der Waschgang als fertig gemeldet.) sind im Device der Steckdose zu definieren.


Keller.Waschmaschine:P.* {
Waschmaschine_onNotify($NAME);
}



##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;

sub
Waschmaschine_Utils_Initialize($$)
{
  my ($hash) = @_;
}

sub Waschmaschine_onNotify($) {
my ($Device) = @_;

my $espInterval = AttrVal($Device, "espInterval", "60");
my $configPowerOff = AttrVal($Device, "configPowerOff", "1");
my $configPowerDone = AttrVal($Device, "configPowerDone", "10");
my $configWaitDone = AttrVal($Device, "configWaitDone", "60");

my $maschineStatus = ReadingsVal($Device,"maschineStatus","off");
my $power = ReadingsVal($Device,"P",0);
my $consumption = ReadingsVal($Device,"consumption",0);
my $difTimeLastUpdate = time() - time_str2num(ReadingsTimestamp($Device, "consumption","2000-01-01 00:00:00"));

my $consumptionNew = sprintf("%.3f", $consumption) + sprintf("%.3f", $power * ($espInterval/3600));
if($difTimeLastUpdate > 1){
fhem('setreading '.$Device.' consumption '.$consumptionNew.';');

if($power < $configPowerOff && $maschineStatus ne "off") {
fhem('setreading '.$Device.' maschineStatus off;');
fhem('setreading '.$Device.' consumptionOnStart 0;');
} elsif($power >= $configPowerOff && $maschineStatus eq "off") {
fhem('setreading '.$Device.' maschineStatus on;');
fhem('setreading '.$Device.' consumptionOnStart '.$consumption.';');
} elsif ($power >= $configPowerDone && $maschineStatus ne "running") {
fhem('setreading '.$Device.' maschineStatus running;');
fhem("set chatBot _msg Die Waschmaschine wurde gestartet.");
} elsif ($power < $configPowerDone && $maschineStatus eq "running" && !functionExist("Waschmaschine_checkIfDone")) {
InternalTimer(gettimeofday() + $configWaitDone, "Waschmaschine_checkIfDone", $Device);
}
}
}

sub Waschmaschine_checkIfDone($) {
my ($Device) = @_;

my $power = ReadingsVal($Device,"P",0);
my $configPowerDone = AttrVal($Device, "configPowerDone", "10");
my $maschineStatus = ReadingsVal($Device,"maschineStatus","off");
my $consumptionOnStart = ReadingsVal($Device,"consumptionOnStart",0);
my $consumption = ReadingsVal($Device,"consumption",0);
my $lastPowerConsumption = $consumption - $consumptionOnStart;
my $duration = ReadingsVal($Device,"elapsedTime","0:00h");

my $currentHour = POSIX::strftime("%H",localtime(time));

if ($power < $configPowerDone && $maschineStatus eq "running") {
fhem('setreading '.$Device.' maschineStatus done;');
fhem("set chatBot _msg Die Waschmaschine ist nach ".$duration."h fertig. Es wurden ".sprintf("%.2f", $lastPowerConsumption/1000)."kWh verbraucht.");
if($currentHour > 8 && $currentHour < 23) {
googleBroadcast("Die Waschmaschine ist fertig.");
}
}
}


1;