Hi,
ich hätte gerne eine Nachricht, wenn meine Spülmaschine fertig ist. Dazu habe ich einen Zwischenstecker an den Stromanschluß der Spülmaschine gehängt und mir gedacht, ich lass mich einfach benachrichtigen, wenn der Stromverbrauch länger auf 1W ist. 1W zieht die Spülmaschine, wenn sie einfach nur eingeschaltet ist, ohne dass sie was tut.
Es hat sich nun leider herauskristallisiert, dass der Verbrauch im Laufe des Waschzyklus öfter auf 1W sinkt. Am Schluss sogar für fast 45min. Ich könnte mich also frühestens 50min nach dem wirklichen Ende benachrichtigen lassen. Das ist etwas sehr spät.
Ich suche daher nach Ideen, wie ich das jetzt mitbekommen könnte, wenn die Spülmaschine wirklich fertig ist und wäre über eure Denkunterstützung dankbar.
BG
Stefan
kannst du auch den strom messen? vielleicht sind so unterschiede zu erkennen.
ansonsten zb mit einem watchdog arbeiten, der erst nach einer gewissen zeit mit kleiner leistung reagiert.
Du müsstest die längste Pause vor den 45 min ermitteln. Wenn diese Zeit überschritten wird, dann nach 45 min minus Erkennungszeitdauer (längste Pause) das Programmende signalisieren.
Ich überwache meine Spühlmaschine auch. Und die 45 Minuten die Du erwähnst sind der Trocknungsmodus. Sprich, sie spühlt nicht mehr und nimmt die Resthitze zum trocken. Ich habe das so gemacht das ich einmal einen Status Spühlen habe und einmal einen Status trocknen. Und dann natürlich den Status fertig.
Lass also einfach mal den Verbrauch kleiner 1 auswerten, das sollte fertig sein. Ich kann mal heute Abend oder morgen schauen wie ich da mein DOIF für gemacht habe.
Grüße
Ich hab keinen Verbrauch <1 ;). Solange der Schalter an der Spülmaschine ein ist, hab ich immer 1. Wie auch im Trocknungsmodus.
Das mit der längsten Pause wird nicht funktionieren, da die Maschine ja nach den 45min nochmal anspringt.
Wie's aussieht, dauert das ECO-Programm aber immer so um die 170 Minuten. Das wäre ein Ansatz. Funktioniert aber nur, wenn immer das ECO-Programm ausgewählt wird. Und darauf kann ich mich auch nicht verlassen.
ZitatDas mit der längsten Pause wird nicht funktionieren, da die Maschine ja nach den 45min nochmal anspringt.
Aber danach hast Du, dann ein definiertes Ende, also Spülen,Pause,Spülen,Pause ... sehr lange Pause, Anspringen. Wenn nach dem Anspringen die Leistung wieder auf 1 geht, ist Ende. Welche Leistung gilt für Anspringen, wie lange?
Zwischen 2 und 14W für ca. 20 Sekunden.
Ich habe etwas Ähnliches für meine Waschmaschine realisiert, da messe ich mit einem HM Zwischenstecker die Leistung.
Die Lösung Deines Problems könnte etwa so aussehen:
Code: [Auswählen]
define Waschmasch_di DOIF ([Waschmaschine_Pwr:power] > 10 and ([?Waschmasch_di] eq "cmd_4" or [Waschmasch_di] eq "initialized"))
(({Log 3, "spülen beendet"}))## Schalter ein, nicht länger als 300 s < 10, sonst Spülende
DOELSEIF ([Waschmaschine_Pwr:power] < 10 and [?Waschmasch_di] eq "cmd_1")
(({Log 3, "grosse Pause"}))
DOELSEIF ([Waschmaschine_Pwr:power] > 2 and [?Waschmasch_di] eq "cmd_2")
({Log 3, "anspringen beendet"})##nicht länger als 20 s < 2, sonst anspringen beendet
DOELSEIF ([Waschmaschine_Pwr:power] < 1 and [?Waschmasch_di] eq "cmd_3")
(({Log 3, "ausgeschaltet"}))
attr Waschmasch_di do resetwait
attr Waschmasch_di wait 300:0:20:0
Voraussetzung: Die Leistungswerte müssen regelmäßig aktualisiert werden. Der Aktualisierungsabstand darf nicht länger sein, als die bei wait angegebenen kürzeste Wartezeit, sonst wird wait nicht zurückgesetzt. Die der Leistungsanstieg beim Abpumpen muss sicher detektiert werden.
300 der Wert muss größer sein als die längste Pause vor den 45 min
1, 2, 10 die Leistungswerte kannst Du natürlich auch noch optimieren
Hmm, ok, sieht super aus! Die [?Waschmasch_di]-Geschichte ist nett.
Probier ich dann mal aus.
Vielen Dank!
Ein Plot über die Leistung eines Spülgangs wäre auch hilfrech. Besser noch ein normaler, ein eco.
Ich bekomm den Plot leider nicht so her, als das man was vernünftiges erkennen könnte. Weiß nicht, wie ich einstellen könnte, dass man den Unterschied zw. 1W und 10W erkennen könnte ;).
Zum einen kannst du dir die Werte anzeigen lassen (auf die Legende klicken, Display Plot Values anklicken und dann mit dem Mauszeiger die Linie entlang fahren) und du kannst über die Navigation heranzoomen und navigieren.
Der Zoom geht leider nicht weit genug. Kann ich den Plot so einstellen, dass mir nur Werte zwischen 0 und 100 angezeigt werden? Ich hätt's mit Range as versucht, aber das war's wohl nicht.
Doch. range ist das richtige Mittel.
Im Plot-Editor kannst Du den Bereich umstellen, "Range as [min:max]" mal [0:200] eingeben, links und/oder rechts.
Und zusätzlich bei "Y-Axis,Plot-Type,Style,Width" das mittlere Feld auf "steps" stellen, dann verschwinden die schrägen Linien.
Tja, die fehlenden eckigen Klammern waren's ;). Und danke für's Hellsehen und den Hinweis mit "steps", das hat mich nämlich auch gequält.
Ich würde sagen, das DOIF müsste funktionieren, für das "Anspringen" am Ende gibt es Werte.
Die "20" kannst Du auch kleiner machen.
Ob Du mit "300" (5 Minuten) für die Zwischenpausen auskommst kann ich nicht sehen, könntest Du vorsichtshalber auf 600 stellen.
Ja. Wird auf jeden Fall ausprobiert. Dauert halt bei einem 2-Personen-Haushalt immer länger, bis die Spülmaschine das nächste Mal läuft ;).
Ich melde mich dann wieder.
Danke einstweilen!
Ich habe versprchen, dass ich mich wieder melde. Von einem Jahr später hab ich nichts gesagt ;)
Auf jeden Fall hab ich's noch immer nicht kapiert.
Spiele noch immer mit dem Beispiel von Ellert herum und die erste Frage dazu wäre, warum da die Ausführung des ersten Befehls verzögert wird?
Eigentlich möchte ich ja überprüfen, ob Power länger als 300s kleiner 10 bleibt. Nach meiner Logik müsste ja da eigentlich der Wait-Counter auf den zweiten Befehl, oder? Dummerweise bleibt dann aber der Counter aktiv, auch wenn der Power-Wert wieder steigt. Nützt mir also gar nichts.
Hätte da noch jemand eine Möglichkeit, mich vom Schlauch runter zu holen?
Danke!
Stefan
Hier mal das aktuell bei mir laufende Geschirrspüler DOIF.
define Geschirrspu_di DOIF ## 1
([Geschirrspueler_Pwr:power] > 20 and ([?$SELF] eq "cmd_6" or [?$SELF] eq "initialized"))
({Log 3, "Geschirrspueler: Programmstart"},
setreading $SELF energy_start [Geschirrspueler_Pwr:energy],
set SagEs1 tts Der Geschirrspüler wurde eingeschaltet,
set SagEs1Pi2 tts Der Geschirrspüler wurde eingeschaltet)
## 2
DOELSEIF ([Geschirrspueler_Pwr:power] > 20 and [?$SELF] eq "cmd_1")
({Log 3, "Geschirrspueler: Spülende"})
## 3
DOELSEIF ([Geschirrspueler_Pwr:power] < 1 and [?$SELF] eq "cmd_2")
({Log 3, "Geschirrspueler: Troknen"})
## 4
DOELSEIF ([Geschirrspueler_Pwr:power] > 40 and [?$SELF] eq "cmd_3")
({Log 3, "Geschirrspueler: Abpumpen"})
## 5
DOELSEIF ([Geschirrspueler_Pwr:power] < 1 and [?$SELF] eq "cmd_4")
({Log 3, "Geschirrspueler: Programmende"},
setreading $SELF energy {(int([Geschirrspueler_Pwr:energy] - [$SELF:energy_start]))},
set SagEs1 tts Das Geschirr ist gespült,
set SagEs1Pi2 tts Das Geschirr ist gespült)
## 6
DOELSEIF ([Geschirrspueler_Pwr:power] < 0.1)
({Log 3, "Geschirrspueler: ausgeschaltet"},
setreading $SELF energy {(int([Geschirrspueler_Pwr:energy] - [$SELF:energy_start]))})
(set SagEs1 tts Das Geschirr ist abgekühlt,
set SagEs1Pi2 tts Das Geschirr ist abgekühlt)## Schalter aus
attr Geschirrspu_di do resetwait
attr Geschirrspu_di notexist "0"
attr Geschirrspu_di repeatcmd 0:0:0:0:300:0
attr Geschirrspu_di wait 0:300:0:0:0:0,900
Zweig 1 wird ausgeführt, wenn power das erste Mal über 20 ist.
power wird regelmässig aktualisiert.
Zweig 2 wird ausgeführt, wenn power nicht innerhalb von 300s > 20 liegt und Zweig 1 ausgeführt wurde
Zu Deiner Frage: Die 300s Pause werden benötigt , damit das Spülende erkannt wird. Das geschieht dadurch, das der Timer zurückgesetzt wird (do resetwait), wenn innerhalb von 300s power mit über 20 aktualisiert wird (Spülphase).
Zweig 3 wird ausgeführt, wenn nach der Spülphase power < 1 also die große Pause stattfindet.
Zweig 4 wird ausgeführt, wenn nach der großen Pause power > 40 aktualisiert wird, dann wird abgepumpt.
Zweig 5 wird ausgeführt, wenn abgepumpt wurde und power wieder < 1 liegt, die Befehle (Ansage) werden alle 5 min. wiederholt (repeatcmd 300) bis
Zweig 6 ausgeführt wird, weil der Geschirrspüler ausgeschaltet und die Tür geöffnet wurde und power dadurch unter 0.1 liegt, die Ansage, dass das Geschirr abgekühlt ist erfolgt einmalig eine viertel Stunde später (wait 900) zur Erinnerung zum Ausräumen.
Mit and [?$SELF] eq "cmd_x" wird sichergestellt, dass ein Zweig nach dem anderen ausgeführt wird.
Ich glaub, ich hab vor kurzem auch ein funktionierendes DoIf herbekommen. Während ich mich über Civilization VI geärgert habe ;).
Geschirrspüler rennt gerade, ich werde dann berichten.
Die Sache mit dem "repeatcmd" habe ich mir auch überlegt, aber mir war nicht klar, wie genau ich das einbaue.
Wie gesagt, melde mich in 2h wieder.
Danke Ellert!
Ich erlaube mir, den uralt-Thread wieder aufzuwärmen.
Hab's dank eurer Hilfe dann irgendwann geschafft, ein funktionierendes DOIF herzubekommen. Aber wie's so ist, hatte ich natürlich kein Backup davon. Und mich in dem Thread schändlicherweise nicht mehr gemeldet.
Auf jeden Fall habe ich am DOIF etwas geändert und seit damals (ca. 1 Jahr) bekomme ich das nicht mehr zum Laufen. Ganz egal, was ich auch versuche. Kann mich aber natürlich auch nicht mehr erinnern, was ich geändert habe.
Auf jeden Fall bitte ich nochmal um eure Mithilfe.
Im Anhang ein Plot des Stromverbrauches und das vollständige Log des Zwischensteckers.
Je nachdem, was ich am DOIF ändere, bleibt es bei "cleaning" (cmd_2) oder "drying" (cmd_3) hängen und macht nicht mehr weiter. Aktuell bei cmd_2.
defmod diSpuelmaschine2 DOIF ([enoAcSpuelmaschine:power] == 1 and ([?$SELF] =~ "initialized|off|initialize"))({Log 3,"diSpuelmaschine2 Spüli ein"})\
DOELSEIF ([enoAcSpuelmaschine:power] > 1 and ([?$SELF] eq "on"))({Log 3,"diSpuelmaschine2 Spüli gestartet"})\
DOELSEIF ([enoAcSpuelmaschine:power] >= 1 and ([?$SELF] eq "started"))({Log 3,"diSpuelmaschine2 Spüli spült"})\
DOELSEIF ([enoAcSpuelmaschine:power] == 1 and ([?$SELF] eq "cleaning"))({Log 3,"diSpuelmaschine2 Spüli trocknet"})\
DOELSEIF ([enoAcSpuelmaschine:power] > 1 and ([?$SELF] eq "drying"))({Log 3,"diSpuelmaschine2 Spüli läßt Wasser ab"})\
DOELSEIF ([enoAcSpuelmaschine:power] == 1 and [?$SELF] eq "draining")\
({Log 3,"diSpuelmaschine2 Spüli fertig"},\
set TV:FILTER=STATE=on screenMsg Spuelmaschine ist fertig,\
msg Spülmaschine fertig)\
DOELSEIF ([enoAcSpuelmaschine:power] == 0 and [?$SELF] eq "finished")({Log 3,"diSpuelmaschine2 Spüli aus"})
attr diSpuelmaschine2 cmdState on|started|cleaning|drying|draining|finished|off
attr diSpuelmaschine2 do resetwait
attr diSpuelmaschine2 group Haushaltsgeräte
attr diSpuelmaschine2 room DoIf,Haushaltsgeraete
attr diSpuelmaschine2 wait 0:0:720:0:0:0:0
Für den Zwischenstecker - falls das relevant ist - habe ich angegeben:
attr enoAcSpuelmaschine event-min-interval power:600
attr enoAcSpuelmaschine event-on-change-reading power,state
Und jetzt die Frage: Was habe ich übersehen, dass das DOIF den kurzen Verbrauchsanstieg am Ende nicht mehr erkennt und dementsprechend weiterschaltet?
Danke vielmalst für jede Hilfestellung! Mich bringt das jetzt langsam zur Verzweiflung ;).