[Gelöst] DOIF zur Benachrichtung für Shelly Update

Begonnen von majestro84, 10 März 2020, 17:02:57

Vorheriges Thema - Nächstes Thema

majestro84

Hallo

Ich möchte gerne ein DOIF bauen was mir eine Nachricht schickt, wenn ein Update für ein Shelly Device vorhanden ist.
Im Shelly Device gibt es das reading firmware welches die aktuelle Version beinhaltet z.B. v1.5.10
Ist ein Update verfügbar sieht das reading folgendermaßen aus: v1.5.10(update needed to v1.6.0)

Jetzt haben ich mir folgendes DOIF gebaut:
defmod ShellyUpdate DOIF ([":^firmware"] =~ "update") (msg Shelly akualisierung vorhanden!)
attr ShellyUpdate do always


Wenn ich nun bei einem Shelly das Update durchführe und sich das reading von v1.5.10(update needed to v1.6.0)
auf v1.6.0 ändert wird es anscheint erkannt. Als reading Device steht dort das richtige. Ein List sieht dann so aus.
Internals:
   DEF        ([":^firmware"] =~ "update") (msg Shelly akualisierung vorhanden!)
   DOIFDEV    ^global$|
   FUUID      5e307b07-f33f-e69a-93d7-e88a053b8b2342cd
   MODEL      FHEM
   NAME       ShellyUpdate
   NR         729
   NTFY_ORDER 50-ShellyUpdate
   STATE      initialized
   TYPE       DOIF
   VERSION    21224 2020-02-18 18:45:49
   READINGS:
     2020-03-10 16:46:36   Device          K_Spuelmaschine
     2020-02-16 16:11:52   cmd             0
     2020-02-16 16:11:52   mode            enabled
     2020-02-16 16:11:52   state           initialized
   Regex:
     accu:
     cond:
       :
         0:
           ":^firmware" :^firmware
   condition:
     0          ::EventDoIf('',$hash,'^firmware',0) =~ "update"
   do:
     0:
       0          msg Shelly akualisierung vorhanden!
     1:
   helper:
     DEVFILTER  ^global$|
     NOTIFYDEV  global|.*
     event      firmware: v1.6.0
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev K_Spuelmaschine
     triggerEvents:
       power: 1.37
       energy: 0
       firmware: v1.6.0
       energyCons: 0.0000
     triggerEventsState:
       power: 1.37
       energy: 0
       firmware: v1.6.0
       energyCons: 0.0000
   internals:
   perlblock:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always


Allerdings klappt es nicht mit der Benachrichtigung, wenn das Reading firmware von v1.5.10 auf v1.5.10(update needed to v1.6.0) wechselt.
Das Event wir wohl erkannt nur Klappt das mit dem Suchen des Textes update nicht.
Internals:
   DEF        ([":^firmware"] =~ "update") (msg Shelly akualisierung vorhanden!)
   DOIFDEV    ^global$|
   FUUID      5e307b07-f33f-e69a-93d7-e88a053b8b2342cd
   MODEL      FHEM
   NAME       ShellyUpdate
   NR         729
   NTFY_ORDER 50-ShellyUpdate
   STATE      initialized
   TYPE       DOIF
   VERSION    21224 2020-02-18 18:45:49
   READINGS:
     2020-03-10 17:12:25   Device          Klingel_Gong
     2020-02-16 16:11:52   cmd             0
     2020-02-16 16:11:52   mode            enabled
     2020-02-16 16:11:52   state           initialized
   Regex:
     accu:
     cond:
       :
         0:
           ":^firmware" :^firmware
   condition:
     0          ::EventDoIf('',$hash,'^firmware',0) =~ "update"
   do:
     0:
       0          msg Shelly akualisierung vorhanden!
     1:
   helper:
     DEVFILTER  ^global$|
     NOTIFYDEV  global|.*
     event      firmware: v1.5.10(update needed to v1.6.0)
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev Klingel_Gong
     triggerEvents:
       firmware: v1.5.10(update needed to v1.6.0)
     triggerEventsState:
       firmware: v1.5.10(update needed to v1.6.0)
   internals:
   perlblock:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always


Hat jemand vielleicht ein Tipp wo der Fehler ist.

VG Alex
Server: Fujitsu ESPRIMO Q920 - aktuellen FHEM-Docker Image:Z-Wave (RollerShutter,DoorWindow,Socket,PIR,....) | ENIGMA2 | EGPM2LAN | BLE-Tag(PRESENCE) | HUE | alexa-fhem | Shelly | MQTT2
1.Pi-Zero:Viessmann(optolink) mit 89_VCONTROL300.pm
2.Pi3 Dongle Server: Zigbee2MQTT(CC1352P-2), Z-Wave(UZB1), BT

amenomade

Grundsätzlich ist ein Eventtrigger entweder wahr oder falsch und nicht mit irgendeinem Text vergleichbar.

Aber zum Glück:
Zitat von: CommandRefAllgemeine Ereignistrigger können ebenfalls so definiert werden, dass sie nicht nur wahr zum Triggerzeitpunkt und sonst nicht wahr sind, sondern Inhalte des Ereignisses zurückliefern. Initiiert wird dieses Verhalten durch die Angabe eines Default-Wertes.

Syntax:

["regex for trigger",<default value>]
Also... Default-Wert ergänzen

Anwendungsbeispiel:

define di_warning DOIF ([":^temperature",0]< 0) (set pushmsg danger of frost $DEVICE)
attr di_warning do always
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

majestro84

Vielen Dank für den Schubser in die richtige Richtung.
So funktioniert es nun.
defmod ShellyUpdate DOIF ([":^firmware",""] =~ "update") (msg Shelly akualisierung vorhanden!)
attr ShellyUpdate do always


Hatte das mit =~ falsch verstanden.

VG Alex
Server: Fujitsu ESPRIMO Q920 - aktuellen FHEM-Docker Image:Z-Wave (RollerShutter,DoorWindow,Socket,PIR,....) | ENIGMA2 | EGPM2LAN | BLE-Tag(PRESENCE) | HUE | alexa-fhem | Shelly | MQTT2
1.Pi-Zero:Viessmann(optolink) mit 89_VCONTROL300.pm
2.Pi3 Dongle Server: Zigbee2MQTT(CC1352P-2), Z-Wave(UZB1), BT