Brauche Hilfe, Bedingungsausdruck fehlerhaft?

Begonnen von wowogiengen, 27 Dezember 2019, 23:46:17

Vorheriges Thema - Nächstes Thema

wowogiengen

Hallo,
ich habe ein DoIf definiert, welches immer, wenn ein Missing Ack erkannt wird (sollte ja eigentlich nie vorkommen, aber ich habs hier manchmal, da funkt mir irgendwas dazwischen... vlt. LED-Birnen?), das Device einfach toggled, und somit versucht, wieder einen gültigen Zustand herzustellen....

Aber das geht wohl so nicht?
Die Devices fangen alle  mit HzgAktor an, und danach kommt der Raum, also z.B.:

  • HzgAktorSchlafzimmer
  • HzgAktorWohnzimmer
  • HzgAktorBad

defmod di_MissingAck DOIF (["^HzgAktor:state"]) (define a5 at +00:00:10 set $DEVICE toggle)
attr di_MissingAck verbose 5


Am Anfang hatte ich es wohl einmal zum laufen gebracht, hab dazu das hier modifiziert:

define di_window_open DOIF (["^window_:open"]) (set Pushover msg 'alarm' 'open windows $DEVICE' '' 2 'persistent' 30 3600)
attr di_window_open do always


Mir fehlt jetzt aber wohl der korrekte Text für "Missing ACK" anstelle "open" und grade sehe ich, dass ich ja vielleicht noch das attrib di_MissingAck do always aktivieren müsste, oder?
Aber es ist schon spät, das mach ich dann morgen...

Viele Grüße
und Danke für den kleinen Denkanstoss...

Wolfgang

wowogiengen

Hallo,
ich habe gestern Nacht noch die Definition geändert:

defmod di_MissingAck DOIF (["^HzgAktor:MISSING"]) (define a5 at +00:00:05 set $DEVICE toggle)
attr di_MissingAck do always
attr di_MissingAck verbose 5

setstate di_MissingAck cmd_1
setstate di_MissingAck 2019-12-28 10:12:27 Device HzgAktorBad
setstate di_MissingAck 2019-12-28 10:12:27 cmd 1
setstate di_MissingAck 2019-12-28 10:12:27 cmd_event HzgAktorBad
setstate di_MissingAck 2019-12-28 10:12:27 cmd_nr 1
setstate di_MissingAck 2019-12-27 23:56:46 mode enabled
setstate di_MissingAck 2019-12-28 10:12:27 state cmd_1



Damit funktioniert es offensichtlich - hatte heute früh wieder ein paar Aussetzer, wo ich nicht weiss woher die gekommen sind. Wenn ich die Aktoren manuell durch toggle, funktioniert jeder.

Obwohl ich verbose = 5 eingestellt habe, sehe ich nirgends Einträge, die auf das DOIF hindeuten...

Viele Grüße

Wolfgang

KernSani

Wenn es jetzt grundsätzlich funktioniert ist es ja gut :-)
Du musst übrigens kein at definieren, einfacher wäre einfach das wait Attribut zu nutzen, wenn du eine Verzögerung im DOIF willst.
Grüße,
Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

wowogiengen

Hallo Oli,
hab das attrib wait mal durchgelesen... wenn ich bei mir dann

attrib di_MissingAck wait 5

angebe, ist es genau das selbe?

In meinen Logs gestern abend habe ich auch noch gesehen, wenn mehrfach die Bedingung zutrifft (weil z.B. mehrere Aktoren den State-Wechsel melden), dass dann das definierte "at a5" zu Fehlern führt. Wird das dann auch mit dem wait-Attribut verbessert?

Und gleich nochmal eine Frage :-)

Wenn ich im DOIF


set $DEVICE toggle


angebe, wird ja das $DEVICE geschalten, welches das DOIF ausgelöst hat.

Ich möchte jetzt ein DOIF haben, welches nach diesem Schema arbeitet:
Quelle des Events ist HzgThermostatBuero
Ziel 1 soll dann sein HzgAktorBuero
Ziel 2 soll dann sein PWMRBuero


Für einen Raum sieht das dann so aus (hab den "Fliesstext" aus der Rohdefinition mal bisschen lesbarer gemacht):


defmod HzgSteuerungBuero
DOIF ([HzgThermostatBuero:desired-temp] eq "on")
(
  set HzgAktorBuero on;;
  attr PWMRBuero disable 1
)
DOELSEIF ([HzgThermostatBuero:desired-temp] eq "off")
(
  set HzgAktorBuero off;;
  attr PWMRBuero disable 1
)
DOELSE
(
  deleteattr PWMRBuero disable
)


D.h. Ich möchte alle Devices, die mit HzgThermostat anfangen, also

^HzgThermostat

abfragen, und die sollen dann das entsprechende Device, welches mit HzgAktor bzw. PWMR anfängt schalten...

Viele Grüße
Wolfgang.