[Beta] Waschmaschinenstatus

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

Vorheriges Thema - Nächstes Thema

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