Hauptmenü

Umstellung auf NOTIFYDEV-Filter

Begonnen von Damian, 31 August 2019, 16:10:46

Vorheriges Thema - Nächstes Thema

Sany

ich schließe mich Enno an und kann berichten: mein Testsystem seit gestern morgen und mein "Haupt"system seit heute morgen laufen mit der eingecheckten Version ohne Probleme. Nix im Log, alles geht soweit. Ein paar DOIFs habe ich mir angesehen, die haben jetzt alle ein Notifydef, so wie es aussieht nur mit den Devices, die triggern sollen. Das war vorher nicht so, oft stand da ein DOIFnotifydef oder so, oder auch gar nix, wenn die Regex nicht gut gewählt war.
Performancemäßig kann ich nicht viel sagen, läuft so wie vorher, was die CPU-Last angeht. Ich habe aber auch schon so ziemlich alles an Events rausgefiltert, was nicht gebraucht wird.

Gruß


Sany
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Damian

Zitat von: Sany am 29 Januar 2022, 21:05:32
ich schließe mich Enno an und kann berichten: mein Testsystem seit gestern morgen und mein "Haupt"system seit heute morgen laufen mit der eingecheckten Version ohne Probleme. Nix im Log, alles geht soweit. Ein paar DOIFs habe ich mir angesehen, die haben jetzt alle ein Notifydef, so wie es aussieht nur mit den Devices, die triggern sollen. Das war vorher nicht so, oft stand da ein DOIFnotifydef oder so, oder auch gar nix, wenn die Regex nicht gut gewählt war.
Performancemäßig kann ich nicht viel sagen, läuft so wie vorher, was die CPU-Last angeht. Ich habe aber auch schon so ziemlich alles an Events rausgefiltert, was nicht gebraucht wird.

Gut - das hört sich gut an. Die meisten DOIF-Definitionen hatten vorher schon NOTIFYDEV gehabt, wenn es um konkrete Readings ging. Bei bestimmten Ereignistriggern mit einer Regex für Devices der Art ["<Device-Regex>:<Event-Regex>] konnte die bisher genutzt Routine in fhem.pl keinen NOTIFY-Filter setzen. Allerdings habe ich auch für solche Fälle DOIF seinerzeit durch einen eigenen Filter optimiert. FHEM hat dann mit DOIF etwas Ping-Pong gespielt (0,02 Millisekunden pro Ping beim Pi 4). Da jetzt immer der NOTIFY-Filter im DOIF gesetzt werden kann, ist der interne Filter hinfällig. Die Performanceunterschiede werden höchstens in sehr stark belasteten Systemen messbar sein.

Viel effektiver ist es, unnötige Events im System zu eliminieren.  :D
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Neue DOIF Version ist jetzt offiziell, morgen per Update verfügbar.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sirel

Hallo,
ich beobachte seit der Anpassung bei einem meiner DOIF ein unterschiedliches Verhalten - es triggers nicht mehr.

(["Thermo_SZ:^temperature"])
(setreading di_heizen_Schlafzimmer is_temp {("$EVENT" =~ /[^\:]*: (\d*\.\d*)/;$1)})


Das NotifyDev sieht so aus. Hier werden die Devices welche triggers sollen in Klammern gesetzt - dann gilt die Expression nicht mehr.

NOTIFYDEV
.*(Thermo_Bad).*,.*(Thermo_SZ).*,global


Kann man das irgendwie ändern?

Viele Grüße und Dank vorab,

Max

Damian

Zitat von: Sirel am 19 Februar 2022, 08:30:58
Hallo,
ich beobachte seit der Anpassung bei einem meiner DOIF ein unterschiedliches Verhalten - es triggers nicht mehr.

(["Thermo_SZ:^temperature"])
(setreading di_heizen_Schlafzimmer is_temp {("$EVENT" =~ /[^\:]*: (\d*\.\d*)/;$1)})


Das NotifyDev sieht so aus. Hier werden die Devices welche triggers sollen in Klammern gesetzt - dann gilt die Expression nicht mehr.

NOTIFYDEV
.*(Thermo_Bad).*,.*(Thermo_SZ).*,global


Kann man das irgendwie ändern?

Viele Grüße und Dank vorab,

Max

Ich kann kein Problem erkennen. Dein einziger gezeigter Trigger ist ["Thermo_SZ:^temperature"], daraus resultiert .*(Thermo_SZ).*, alle anderen Devices dürfen nicht durchkommen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sirel

Hi Damian,
ich sehe grnds. auch keinen Fehler.

Hier mal das gesamte Set an Infos:

Internals:
   DEF        (["Thermo_SZ:^temperature"])
(setreading di_heizen_Schlafzimmer is_temp {("$EVENT" =~ /[^\:]*: (\d*\.\d*)/;$1)})

DOELSEIF
(["Thermo_Bad:^temperature"])
(setreading Temp_bad is_temp {("$EVENT" =~ /[^\:]*: (\d*\.\d*)/;$1)})


DOELSE
   FUUID      5e1f6422-f33f-f340-4cfe-7846b26e7c974b96
   MODEL      FHEM
   NAME       di_reading_generator
   NOTIFYDEV  .*(Thermo_Bad).*,.*(Thermo_SZ).*,global
   NR         341
   NTFY_ORDER 50-di_reading_generator
   STATE      cmd_2
   TYPE       DOIF
   VERSION    25663 2022-02-09 17:05:11
   READINGS:
     2022-02-19 09:27:41   Device          Thermo_Bad
     2020-01-17 09:45:03   Temperatur      T: 20.9 H: 57.1
     2022-02-19 09:27:41   cmd             2
     2022-02-19 09:27:41   cmd_event       Thermo_Bad
     2022-02-19 09:27:41   cmd_nr          2
     2022-02-19 00:37:59   mode            enabled
     2022-02-19 09:27:41   state           cmd_2
   Regex:
     accu:
     collect:
     cond:
       :
         0:
           "Thermo_SZ:^temperature" Thermo_SZ:^temperature
         1:
           "Thermo_Bad:^temperature" Thermo_Bad:^temperature
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::EventDoIf('Thermo_SZ',$hash,'^temperature',0)
     1          ::EventDoIf('Thermo_Bad',$hash,'^temperature',0)
   do:
     0:
       0          setreading di_heizen_Schlafzimmer is_temp {("$EVENT" =~ /[^\:]*: (\d*\.\d*)/;$1)}
     1:
       0          setreading Temp_bad is_temp {("$EVENT" =~ /[^\:]*: (\d*\.\d*)/;$1)}
     2:
       0         
   helper:
     NOTIFYDEV  .*(Thermo_Bad).*,.*(Thermo_SZ).*,global
     event      temperature: 20.9
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Thermo_Bad
     timerevent temperature: 20.9
     triggerDev Thermo_Bad
     timerevents:
       temperature: 20.9
     timereventsState:
       temperature: 20.9
     triggerEvents:
       temperature: 20.9
     triggerEventsState:
       temperature: 20.9
   internals:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always
   room       Unsorted


Die Triggernde Instanz ist ein Sensor der via Fhem2Fhem seine Daten ins Hauptsystem liefert. Vor dem Update funktioniert dieses DOIF ohne Probleme, jetzt aber nicht mehr. Es hat sich sonst nichts mehr geändert.

Darüber läuft unsere Heizung  :-X

Viele Grüße,
Max

Damian

Poste mal die Events vom betroffenen Device.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sirel

Hi Damian,
das sind die Events:
19 19:30:07 XiaomiBTLESens Thermo_Bad temperature: 23.0
2022-02-19 19:30:07 XiaomiBTLESens Thermo_Bad humidity: 45.8
2022-02-19 19:30:07 XiaomiBTLESens Thermo_Bad T: 23.0 H: 45.8


Viele Grüße und Dank vorab,

Max

Damian

Zitat von: Sirel am 19 Februar 2022, 19:32:15
Hi Damian,
das sind die Events:
19 19:30:07 XiaomiBTLESens Thermo_Bad temperature: 23.0
2022-02-19 19:30:07 XiaomiBTLESens Thermo_Bad humidity: 45.8
2022-02-19 19:30:07 XiaomiBTLESens Thermo_Bad T: 23.0 H: 45.8


Viele Grüße und Dank vorab,

Max

Ich habe mal eine Anfrage dazu im Developer-Board gestellt. Meine Vermutung ist, dass es daran liegt, dass du im FHEM-System, wo dein DOIF definiert ist, kein Device namens Thermo_Bad hast.

Zum testen könntest du einen Dummy namens Thermo_Bad definieren und schauen, ob es dann geht, ggf. danach noch defmod auf das DOIF ausführen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sirel

Dank Dir für Deine schnelle Einschätzung.
Ich teste es morgen mit dem Dummy. Ist diese Bedingung neu? Vorher hat es alles problemlos funktioniert.

Hab ein schönen Samstagabend!
Max


Damian

Zitat von: Sirel am 19 Februar 2022, 20:30:39
Dank Dir für Deine schnelle Einschätzung.
Ich teste es morgen mit dem Dummy. Ist diese Bedingung neu? Vorher hat es alles problemlos funktioniert.

Hab ein schönen Samstagabend!
Max

Ich hoffe, dass es keine neue Bedingung sein wird :)  Ich warte noch auf Feedback vom Master, ansonsten werde ich mir schon etwas einfallen lassen ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sirel


Sirel

Guten Morgen Damian,
nachdem ich im Host-System die Dummys erstellt habe funktioniert es. Das hat gleichzeitig das DOIF als solches überflüssig gemacht.
Ist so ok, ich fand meine andere Lösung nur etwas kompakter, ist aber vllt auch nur Geschmacksache.

Hab vielen Dank und einen schönen Sonntag,

Max

Damian

#43
Zitat von: Sirel am 20 Februar 2022, 10:39:14
Guten Morgen Damian,
nachdem ich im Host-System die Dummys erstellt habe funktioniert es. Das hat gleichzeitig das DOIF als solches überflüssig gemacht.
Ist so ok, ich fand meine andere Lösung nur etwas kompakter, ist aber vllt auch nur Geschmacksache.

Hab vielen Dank und einen schönen Sonntag,

Max

Dadurch arbeitet dein System effizienter. Wenn kein Device existiert, kann der NOTIFY-Filter nicht sinnvoll gesetzt werden, was dazu führt, dass ein DOIF sich mit allen Events des Systems unnötig beschäftigen müsste. Die aktuelle DOIF-Version setzt nun immer den NOTIFY-Filter, um eben solche Dinge zu vermeiden, dafür müssen aber die entsprechenden Devices im Host-System existieren.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sirel

Dann weiß ich für das nächste Mal Bescheid.

Wie immer, besten Dank!

Max