Waschmaschine fertig

Begonnen von moes, 07 Februar 2016, 09:19:27

Vorheriges Thema - Nächstes Thema

hoppel118

Zitat von: majorshark am 02 Juni 2019, 04:59:31
Bei Dir müsstest Du dem Threshold nur sagen das der maximale Wert größer als die 350 und den Whatchdog auf die Zeit anpassen. Dann könntest Du auch das Knitterprogramm eingeschaltet lassen.

Die DOIFs sind für mich einfacher zu verstehen. So wie es jetzt bei mir gelöst ist, kann ich das Knitterprogramm auch einschalten. Das Knitterprogramm kommt niemals über 400 Watt. Trockenprogramme kommen immer über 400 Watt. Das ist nun einer der Anhaltspunkte für das DOIF.

Aber Danke für das Posten deiner Lösung. Mir hilft das jetzt zwar nicht, aber da wird sich schon wer finden. ;)

Viele Grüße Hoppel
Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic | HomeConnect | MQTT | Philips Hue | Sonos | Unifi Network & Protect | vbus | Xiaomi

Heimweh

Ich versuche das gerade für mich umzuschreiben, aber woher kommt das MqttDevice06?
Dein MqttDevice236 - das ist der SONOFF, aber der 06er? Kannst Du mir auf die Sprünge helfen?

Zitat von: majorshark am 02 Juni 2019, 04:59:31
Ich habe es bei mir in drei Devices verpackt. Das Gerät selbst,
defmod MqttDevice236 MQTT2_DEVICE MqttDevice236
attr MqttDevice236 DbLogInclude ENERGY_Power
attr MqttDevice236 IODev MQTT2_SERVER
attr MqttDevice236 alias Trockner
attr MqttDevice236 autocreate 1
attr MqttDevice236 devStateIcon on:rc_GREEN:off off:rc_RED:on
attr MqttDevice236 icon hue_filled_outlet
attr MqttDevice236 model A_01c_tasmota_POW
attr MqttDevice236 readingList tele/MqttDevice06/LWT:.* LWT\
  tele/MqttDevice06/STATE:.* { json2nameValue($EVENT) }\
  tele/MqttDevice06/SENSOR:.* { json2nameValue($EVENT) }\
  tele/MqttDevice06/INFO.:.* { json2nameValue($EVENT) }\
  stat/MqttDevice06/RESULT:.* { json2nameValue($EVENT) }\
MqttDevice236:stat/MqttDevice06/POWER1:.* POWER1\
MqttDevice236:tele/MqttDevice06/UPTIME:.* { json2nameValue($EVENT) }\
MqttDevice236:cmnd/MqttDevice06/POWER:.* POWER\
MqttDevice236:stat/MqttDevice06/STATUS:.* { json2nameValue($EVENT) }\
MqttDevice236:stat/MqttDevice06/STATUS1:.* { json2nameValue($EVENT) }\
MqttDevice236:stat/MqttDevice06/STATUS2:.* { json2nameValue($EVENT) }\
MqttDevice236:stat/MqttDevice06/STATUS3:.* { json2nameValue($EVENT) }\
MqttDevice236:stat/MqttDevice06/STATUS4:.* { json2nameValue($EVENT) }\
MqttDevice236:stat/MqttDevice06/STATUS5:.* { json2nameValue($EVENT) }\
MqttDevice236:stat/MqttDevice06/STATUS6:.* { json2nameValue($EVENT) }\
MqttDevice236:stat/MqttDevice06/STATUS7:.* { json2nameValue($EVENT) }\
MqttDevice236:stat/MqttDevice06/STATUS9:.* { json2nameValue($EVENT) }\
MqttDevice236:stat/MqttDevice06/STATUS10:.* { json2nameValue($EVENT) }\
MqttDevice236:stat/MqttDevice06/STATUS11:.* { json2nameValue($EVENT) }
attr MqttDevice236 room 1.18_Hauswirtschaft,9.6_Homekit,9.8_MQTT
attr MqttDevice236 setList off:noArg    cmnd/MqttDevice06/POWER1 0\
  on:noArg     cmnd/MqttDevice06/POWER1 1
attr MqttDevice236 setStateList on off
attr MqttDevice236 stateFormat POWER1
attr MqttDevice236 webCmd on:off

ein Threshold um eine Leistung richtig zu interpretieren
defmod TH_Trockner THRESHOLD MqttDevice236:ENERGY_Power:0.5:1.5||||active:done|_sc
attr TH_Trockner room 1.18_Hauswirtschaft
attr TH_Trockner state_cmd1_gt active
attr TH_Trockner state_cmd2_lt done
attr TH_Trockner state_format _sc

und einen Watchdog um das eindeutig zu erkennen.
defmod WD_Trockner watchdog TH_Trockner:done.* 00:05:00 TH_Trockner:active.* {\
fhem("set telegram message Der Trockner ist fertig.");;\
fhem("set MqttDevice236 off");;\
}
attr WD_Trockner autoRestart 1
attr WD_Trockner room 9.3_Watchdog

Das läuft problemlos und ist immer auf andere Geräte abbildbar. Nur so als Anregung. Ist natürlich halt old School.  ;) Bei Dir müsstest Du dem Threshold nur sagen das der maximale Wert größer als die 350 und den Whatchdog auf die Zeit anpassen. Dann könntest Du auch das Knitterprogramm eingeschaltet lassen.
RaspberryPi, 8 x Intertechnosteckdosen, ETA PU15 über HTTPMOD, Youless Eneergiemonitor, 8 x Technoline Funk Temperatur / Feuchtesensoren über jeeLink, Fritzbox Anbindung, Homematic Rolladen Aktoren, MAX Heizkörperventile + Cube, SONOFF S20, S26, POW, 4ch, OWD, Alexa-fhem, enOcean / Eltako,

majorshark

Das ist ein Überbleibsel nach dem Umbenennen. Das Device heißt in FHEM Device236 sendet aber selbst unter dem MQTT topic Device06. Das ist mir gar nicht aufgefallen. Das muss ich mal noch gerade ziehen.

Lass doch das Mqtt Device einfach vom MQTT2 Server automatisch anlegen. Letztendlich brauchst Du doch nur die aktuelle Leistung des Gerätes.
Grüße aus Dewitz

VM auf Synology DS718+ mit FHEM 5.9 auf Debian 9.5/32-Bit (stretch)
Nächster Leipziger Stammtisch:

Heimweh

Zitat von: majorshark am 11 Juni 2019, 18:23:42
Das ist ein Überbleibsel nach dem Umbenennen. Das Device heißt in FHEM Device236 sendet aber selbst unter dem MQTT topic Device06. Das ist mir gar nicht aufgefallen. Das muss ich mal noch gerade ziehen.

Lass doch das Mqtt Device einfach vom MQTT2 Server automatisch anlegen. Letztendlich brauchst Du doch nur die aktuelle Leistung des Gerätes.

Ja stimmt, da hast Du Recht! Ich danke Dir...
RaspberryPi, 8 x Intertechnosteckdosen, ETA PU15 über HTTPMOD, Youless Eneergiemonitor, 8 x Technoline Funk Temperatur / Feuchtesensoren über jeeLink, Fritzbox Anbindung, Homematic Rolladen Aktoren, MAX Heizkörperventile + Cube, SONOFF S20, S26, POW, 4ch, OWD, Alexa-fhem, enOcean / Eltako,

hoppel118

Hallo Leute,

ich beschäftige mich gerade etwas intensiver mit DOIF und versuche das alles mehr zu verstehen. Für meine Waschmaschine verwende ich das hier im Thread besprochene DOIF:

([EG_HWR_Strom_Waschmaschine_Pwr:power:d] > 0.1 and [?di_Waschmaschine] =~ "cmd_4|initialized")
  (({Log 3, "Waschmaschine: an"}))
DOELSEIF ([EG_HWR_Strom_Waschmaschine_Pwr:power:d] > 20 and [?di_Waschmaschine] eq "cmd_1")
  (({Log 3, "Waschmaschine: Programmstart"}),(set Unser_WhatsApp send Waschmaschine: Programmstart))
DOELSEIF ([EG_HWR_Strom_Waschmaschine_Pwr:power:d] < 2.5 and [?di_Waschmaschine]  eq "cmd_2")
  (({Log 3, "Waschmaschine: Programmende"}),(set Unser_WhatsApp send Waschmaschine: Programmende -> Denk dran: Wasser entleeren!!!))
DOELSEIF ([EG_HWR_Strom_Waschmaschine_Pwr:power:d] < 0.1 or [EG_HWR_Strom_Waschmaschine_Pwr:power:d] > 20 and [?di_Waschmaschine] eq "cmd_3")
  (({Log 3, "Waschmaschine: aus"}))


Wofür stehen die folgenden Ergänzungen in dem vorangegangenen DOIF:

and [?di_Waschmaschine] =~ "cmd_4|initialized
and [?di_Waschmaschine] eq "cmd_1"
and [?di_Waschmaschine]  eq "cmd_2"
and [?di_Waschmaschine] eq "cmd_3"


Braucht man das wirklich? Im Wiki finde ich dazu nichts oder ich suche an der falschen stelle im Wiki.

Danke und Gruß Hoppel
Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic | HomeConnect | MQTT | Philips Hue | Sonos | Unifi Network & Protect | vbus | Xiaomi

Damian

Damit wird abgefragt in welchem Zustand sich das Modul zuletzt befunden hat, damit eine bestimmte Abfolge eingehalten werden kann. So funktioniert ein "Zustandsautomat".
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

willib

Ja, das ist der Trick an der Sache. Damit wird das DOIF zur Zustandsmaschine. Es wird damit der interne Zustand des DOIF geprüft. Damit wird sichergestellt, dass du zb den Status "Programmende" nur erreichen kannst wenn du aus dem Status "Programmstart" kommst.
https://de.wikipedia.org/wiki/Endlicher_Automat
FHEM in Debian 10 LXC unter Proxmox auf NUC, Homematic, Hue, Intertechno, Jeelink, RFXTRX, Harmony Hub, VU+ Uno 4K, Sonos, AMAD

hoppel118

OK, ich glaube ich verstehe es nun. Wenn ich diese Zustände in ein DOIF einfüge, wird es sequenziell abgearbeitet.

Im Umkehrschluss heißt das also, dass wenn ich ein DOIF mit mehreren DOELSEIF habe und auf diese Zustände verzichten würde, dass das DOIF nicht sequenziell abgearbeitet wird, sondern das DOELSEIF, welches den richtigen Zustand trifft, kommt zum Tragen. Anschließend geht es dann wieder von vorn (erste Zeile des DOIFs) los.

Habe ich das so richtig verstanden? :)

Danke euch und Gruß Hoppel
Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic | HomeConnect | MQTT | Philips Hue | Sonos | Unifi Network & Protect | vbus | Xiaomi

Damian

Zitat von: hoppel118 am 03 Dezember 2019, 15:12:29
OK, ich glaube ich verstehe es nun. Wenn ich diese Zustände in ein DOIF einfüge, wird es sequenziell abgearbeitet.

Im Umkehrschluss heißt das also, dass wenn ich ein DOIF mit mehreren DOELSEIF habe und auf diese Zustände verzichten würde, dass das DOIF nicht sequenziell abgearbeitet wird, sondern das DOELSEIF, welches den richtigen Zustand trifft, kommt zum Tragen. Anschließend geht es dann wieder von vorn (erste Zeile des DOIFs) los.

Habe ich das so richtig verstanden? :)

Danke euch und Gruß Hoppel

So ist es.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

hoppel118

Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic | HomeConnect | MQTT | Philips Hue | Sonos | Unifi Network & Protect | vbus | Xiaomi

God-of-Games

Hallo Zusammen,
ich habe nun auch versucht über den DOIF Befehl aus dem zweiten Post
define Waschmasch_di DOIF ([Waschmaschine:ENERGY_Power] > 0.1 and [?Waschmasch_di] =~ "cmd_4|initialized")
      (({Log 3, "Waschmaschine: Ein"}))## Schalter ein
DOELSEIF ([Waschmaschine:ENERGY_Power] > 20 and [?Waschmasch_di] eq "cmd_1")
     (({Log 3, "Waschmaschine: Programmstart"}))
DOELSEIF ([Waschmaschine:ENERGY_Power] > 20 and [?Waschmasch_di] eq "cmd_2") ## Ende (wenn länger als 5 min < 20)
     (({Log 3, "Waschmaschine: Programmende"}))
DOELSEIF ([Waschmaschine:ENERGY_Power] < 0.1 or [Waschmaschine:ENERGY_Power] > 20 and [?Waschmasch_di] eq "cmd_3")
     (({Log 3, "Waschmaschine: Aus"}))## Schalter aus oder Neustart ohne aus

mir eine Benachrichtigung zu erstellen.
Jedoch erhalte ich beim Ausführen des Befehls die Meldung
ZitatUnknown command (({Log, try help.

Was ich jetzt schon herausgefunden habe, das die Syntax auf Log3 umgestellt wurde, aber das ist schon älter aus dieses Thema.
Hat jemand einen Tipp wo der Fehler liegt?

andies

Probier mal Log 1 statt Log 3
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

amenomade

Und warum sooo viele Klammern? Es reicht schon {} statt (({}))
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

statt: (({Log 3, "Waschmaschine: Ein"}))

{Log3 undef, 3, "Waschmaschine: Ein"}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

God-of-Games

Hallo Zusammen,
danke für die Antworten.
Zitat von: amenomade am 10 November 2020, 21:15:47
Und warum sooo viele Klammern? Es reicht schon {} statt (({}))
Ich habe hier einfach das Beispiel übernommen. Ich bin beim Wiki-Eintag davon ausgegangen, dass hier die "," unkenntlich gemacht werden müssen.

Am Ende war das Problem, dass ich einfach den Text über das "+" oben eingefügt habe. Der verlangt aber scheinbar einen Befehl pro Zeile. Beim ersten Mal waschen hat es zumindest funktioniert.