udo1toni hat geschrieben: ↑13. Jan 2022 15:55
Diese Zeile:
Code: Alles auswählen
022-01-13 00:23:01.200 [INFO ] [org.openhab.core.model.script.Water ] - Entwässerungspumpe ist angelaufen.
stammt nicht aus dieser Rule! Oder Du hast nicht den aktuellen Code gepostet... Im Code steht nur an zwei Stellen das Wort "angelaufen", und die eine Stelle ist ein pushover, welches nicht im log landet. Die andere Stelle wird nur ausgeführt, wenn das Hauswasserwerk läuft. und muss entsprechend ein anderes Label ausgeben.
Klassisches Jain
Ja, es ist (war) der aktuelle Code.
Nein, es stammt nicht aus der zuletzt geposteten Rule. Die Rule, aus der dies stammt war im ersten Thread und triggered quasi die andere und diese hatte ich nicht noch einmal gepostet, da es ja keine Änderungen gab.
Ich habe dies zum Anlass genommen und das Logging für alle 3 Pumpen gerade gezogen und ein weiteres generelles Logging eingebaut.
Die nun aktiven Rules lauten
Code: Alles auswählen
var long Drainage_Starttime
var Number Drainage_Length
var Timer t_watchdogdrainage = null //Timer zur Überwachung der Entwässerungspumpe
var Timer t_watchdogfeeding = null //Timer zur Überwachung des Hauswasserwerks
rule PumpMonitor
when
Member of gPump changed
then
val myPump = gPumpOn.members.filter[ i|i.name.contains(triggeringItem.name.split("_").get(0))].head
if (triggeringItem.state > 0 && previousState == 0 && myPump.state != ON) {
myPump.postUpdate(ON)
logInfo("Water", "{} wurde aktiviert.", triggeringItem.label) // <------ angelaufen geändert um Verwechslung zu vermeiden,
} else if (triggeringItem.state > 0 && previousState > 0) {
logInfo("Water", "{} zieht derzeit {} mA.", triggeringItem.label, triggeringItem.state)
} else if (triggeringItem.state == 0 && previousState > 0 && myPump.state != OFF) {
myPump.postUpdate(OFF)
logInfo("Water", "{} hat abgeschaltet.", triggeringItem.label)
}
end
rule "Pump Action" //(Aktion und Meldung)
when
Member of gPumpOn received update
then
val actions = getActions("pushover", "pushover:pushover-account:account")
logInfo("Water", "{} ist angelaufen mit Status: {}", triggeringItem.name.split("_").get(0), triggeringItem.state) // <------ Generelles Logging
switch(triggeringItem.name.split("_").get(0)) {
case "PumpDrainage" : { // Entwässerungspumpe EIN
val strLabel = PumpDrainage_vSwitch.label
if (triggeringItem.state == ON) {
logInfo("Water", "{} ist angelaufen", strLabel)
if (t_watchdogdrainage === null) {
Drainage_Starttime = new DateTimeType().zonedDateTime.toInstant.toEpochMilli / 1000
logInfo("Water", Drainage_Starttime.toString)
logInfo("Water", "Watchdog für {} gestartet", strLabel) // <------ Standadisiert
actions.sendMessageToDevice("iPhone", strLabel + " ist angelaufen.", "Notification")
t_watchdogdrainage = createTimer(now.plusSeconds(45),[ |
if (PumpDrainage_vSwitch.state == ON) {
Drainage_Length = (new DateTimeType().zonedDateTime.toInstant.toEpochMilli / 1000) - Drainage_Starttime
actions.sendMessageToDevice("iPhone", PumpDrainage_vSwitch.label + " läuft seit " + Drainage_Length.toString + " Sekunden!", "Alert")
if (Parents.state == ON) {
if (SleepMode.state == 1) {
Steckd_OG_Schlafz_Schrank.sendCommand(ON)
Lampe_OG_Flur_Deko.sendCommand(ON)
} else if (Night.state == ON && SleepMode.state == 0) {
Lampe_EG_Deko_Wand.sendCommand(ON)
}
}
logInfo("Water","Watchdog für {} wird erneut gestartet", strLabel)
t_watchdogdrainage.reschedule(now.plusSeconds(30))
} else if (PumpDrainage_vSwitch.state == (OFF)) {
logInfo("Water","Watchdog für {} wird gelöscht", strLabel)
t_watchdogdrainage = null
}
])
}
} else { // Entwässerungspumpe AUS (zur Überwachung)
Drainage_Length = (new DateTimeType().zonedDateTime.toInstant.toEpochMilli / 1000) - Drainage_Starttime
actions.sendMessageToDevice("iPhone", strLabel + " hat nach " + Drainage_Length.toString + " Sekunden abgeschaltet.", "Notification")
logInfo("Water", "{} lief {} Sekunden", strLabel, Drainage_Length.toString)
t_watchdogdrainage.cancel
t_watchdogdrainage = null
return;
}
}
case "PumpFeedingWater" : { // Hauswasserwerk EIN
val strLabel = PumpFeedingWater_vSwitch.label // <------ Standadisiert
if(triggeringItem.state == ON) { //raus weil Gardena Binding noch nicht aktiv && myIrrigationSwitchVis.state == ON)
logInfo("Water", "{} ist angelaufen", strLabel) // <------ Standadisiert
if (t_watchdogfeeding === null) {
logInfo("Water", "Watchdog für {} gestartet", strLabel)
t_watchdogfeeding = createTimer(now.plusSeconds(10), [ |
if (PumpFeedingWater_vSwitch.state == (ON)) {
if(Parents.state == ON) {
logInfo("Water", "Lampe_EG_Deko_Wand.sendCommand(ON)")
} else {
actions.sendMessageToDevice("iPhone", strLabel + " läuft seit 10 Sekunden!", "Alert")
t_watchdogfeeding.reschedule(now.plusSeconds(10))
logInfo("Water", "{} läuft 10 Sec.", strLabel)
}
} else {
t_watchdogfeeding = null
logInfo("Water", "Watchdog für {} beendet", strLabel)
}
])
}
}
}
case "PumpWasteWater" : { // Schmutzwasserpumpe EIN
val strLabel = PumpWasteWater_vSwitch.label // <------ Standadisiert
if (triggeringItem.state == ON && Washer_Power.state == 0) {
actions.sendMessageToDevice("iPhone", "Warum läuft die " + strLabel + "?", "Alert")
}
}
}
end
Ich werde zunächst noch einmal mit diesem Status testen, ob ich den Fehler forcieren kann.
udo1toni hat geschrieben: ↑13. Jan 2022 15:55
Eventuell läuft die Rule zeitgleich mehrfach. Eventuell wäre es besser, den Trigger auf changed zu ändern, statt received update.
Über die "Triggering-Rule" wird aber doch ein
postUpdate gesendet? Sollte ich trotzdem auf
changed ändern?
Viele Grüße