Ich habe eine Entkalkungsanlage, die keine digitale Schnittstelle besitzt. Ich möchte auslesen, wann sich diese Anlage regeneriert (ca alle 24-48 Stunden, sie schaltet sich dann für 1h ab). Mit einem DECT 200-Gerät kann ich nun den Strom messen und habe gesehen, dass bei Regeneration eine kleine Stromspitze entsteht, siehe Anhang.
Das will ich nun ausnutzen und in FHEM auswerten. Ich dachte, ich programmiere das wie folgt:
- Es wird ein userReading eingeführt, InProgress oder wie auch immer.
- Dieser userReading ändert sich wie folgt: Wenn das Reading 0 ist und power>6, dann wird es 1 gesetzt. Wenn das Reading 1 ist und power<5, dann wird es 0 gesetzt.
- So kann ich auswerten, wann die Regeneration einsetzt (nämlich wenn das Reading 1 wurde).
Das wird man alles per Hand programmieren müssen. Hat jemand einen Tipp, ob das geht oder ob es einfacher geht?
Ich mache das so mit meiner Waschmaschine...
Wenn der Stromverbrauch von vorher 0 auf mehr als x ansteigt, dann userreading "running" setzten..
Wenn das Userreading "Running" gesetzt ist und der Stromverbrauch unter einen bestimmten Wert fällt, (dann ist die Maschine fertig..) und ein Alarm wird auf Lametric ausgegeben..
Wenn das Userreading "Running" gesetzt ist und der Stromverbrauach auf 0 sinkt , dann wurde die Maschine ausgeschaltet... Also Reading "Running" wieder auf 0 ....
Ich habe mir die Ideen auch zusammengefunden (Danke an den ursprünglichen Autor), ich denke aber, es wird Dir helfen..
DOIF ...
FBDECT_WaMaschine:power:.* {
if (ReadingsNum("FBDECT_WaMaschine", "power", 0) > 10 && ReadingsVal("FBDECT_WaMaschine", "running", "off") eq "off") {
fhem("setreading FBDECT_WaMaschine running on");
}
if (ReadingsNum("FBDECT_WaMaschine", "power", 0) < 3.2 && ReadingsVal("FBDECT_WaMaschine", "running", "off") eq "on") {
fhem("setreading FBDECT_WaMaschine running off");
fhem("define at_LametricWaMa at +*00:00:15 set lametric msg 'i59' 'Waschmaschine fertig !' 'notifications:notification4' '1'");
}
if (ReadingsNum("FBDECT_WaMaschine", "power", 0) < 1 && ReadingsVal("FBDECT_WaMaschine", "running", "off") eq "off") {
fhem("setreading FBDECT_WaMaschine running off");
fhem("delete at_LametricWaMa");
}
}
Danke, ich habe das jetzt so gemacht. Zuerst das dummy
defmod Entkalker dummy
attr Entkalker userReadings InProgress
und dazu eine DOIF:
defmod EntkalkerPruefen DOIF ( [DECT1:power_no]>6 && [Entkalker:InProgress]==0 ) (setreading Entkalker InProgress 1) DOELSE ( [DECT1:power_no]<6 && [Entkalker:InProgress]==1 ) (setreading Entkalker InProgress 0)
Dabei habe ich im device DECT1 das Reading power_no definiert (vermutlich ist das zu umständlich):
userReadings power_no { ReadingsNum($name,"power",0)}
um die Einheit Watt loszuwerden.
Geht, glaube ich, noch viel einfacher - man kann das sogar im device DECT1 unterbringen:
userReadings EntkalkungLaeuft {if (ReadingsNum($name,"power",0)>6) {return 1;;} else {return 0;;}}
Und vermutlich kann man selbst diese Abfrage noch eleganter formulieren.