[gelöst] Zeitpunkt der letzten motion via MQTT senden

Begonnen von t.huber, 02 Januar 2021, 21:31:10

Vorheriges Thema - Nächstes Thema

t.huber

Hallo Experten,

irgendwie komme ich nicht weiter.
Ich möchte via MQTT die Information "Wann war die letzte Bewegung ?" übertragen.
MQTT läuft inkl. MQTT_Generic_Bridge.
Ich hab auch schon einiges erfolgreich gepublished und subscriped (zu Home Assistant).

Mein Homematic-Bewegungsmelder HM-SEN-MDIR-O-2 halt folgende Parameter/Readings.
Bild siehe Anhang unten ...

Die "fertige" Info steht schon direkt oben neben dem Device-Namen.
Unten bei den Parametern steht bei protSnd eine naheliegende Zeit die nach dem ersten Doppelpunkt auch eine brauchbare Info liefern würde.
Aber die müsste ich dann noch irgendwie splitten ...
Auch ist das ja ein Parameter und kein Reading.
Bei den Readings steht leider nichts brauchbares dabei.

Der state-publish auf "Alles" mit "*:topic" liefert leider nur 5 Topics (brightness, motion, motionCount, state und trigger_cnt)

Wie bringe ich die gewünscht Info raus in ein Topic ?

MadMax-FHEM

#1
Wie wäre es mit einem userReadings?

In etwa so:


attr HM_Bewegungsmelder userreadings lastMotion:state.* {if(ReadingsVal($name,"state","n.a.") eq "motion"){return ReadingsTimestamp($name,"state",0);}}


Dann sollte im "neuen" Reading lastMotion (Name kannst du frei angeben) der Zeitstempel des letzten motion sein.
(sofern bei Bewegung "motion" in state steht)

EDIT oder vielleiht besser:

attr HM_Bewegungsmelder userreadings lastMotion:motion.* {if(ReadingsVal($name,"motion","n.a.") eq "off"){return ReadingsTimestamp($name,"motion",0);}}


Besser sind list von Devices statt ScreenShots! Und lists dann bitte in "code-Tags", das '#' im "Menü"...

EDIT: andere Frage: wozu willst du die Uhrzeit der letzten Bewegung übertragen? ;)


Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

t.huber

Ui werd ich gleich ausprobieren .. sieht schon mal super aus.

ZitatBesser sind list von Devices statt ScreenShots! Und lists dann bitte in "code-Tags", das '#' im "Menü"...
Ich kannte den Befehl list nicht ... oder hatte ihn vergessen.   8-))
Internals:
   DEF        4077BA
   FUUID      5c976b67-f33f-c3e5-02a5-10397e0c1bd5e3f0
   HMLAN1_MSGCNT 648
   HMLAN1_RAWMSG E4077BA,0000,957660B8,FF,FFA4,B084104077BA2CD8BE06012C00
   HMLAN1_RSSI -92
   HMLAN1_TIME 2021-01-02 21:59:24
   IODev      HMLAN1
   LASTInputDev HMLAN1
   MSGCNT     648
   NAME       HM_Bewegungsmelder
   NOTIFYDEV  global
   NR         38
   NTFY_ORDER 50-HM_Bewegungsmelder
   STATE      nomotion
   TYPE       CUL_HM
   chanNo     01
   lastMsg    No:B0 - t:10 s:4077BA d:2CD8BE 06012C00
   protLastRcv 2021-01-02 21:59:24
   protRcv    646 last_at:2021-01-02 21:59:24
   protSnd    100 last_at:2021-01-02 20:48:16
   protState  CMDs_done
   rssi_at_HMLAN1 cnt:648 min:-105 max:-88 avg:-93.79 lst:-92
   READINGS:
     2020-12-31 21:57:02   Activity        alive
     2017-09-01 23:40:00   D-firmware      1.6
     2017-09-01 23:40:00   D-serialNr      MEQ1425514
     2020-07-08 20:11:56   PairedTo        0x2CD8BE
     2017-09-04 15:41:49   R-brightFilter  0
     2017-09-04 15:41:49   R-captInInterval off
     2017-09-04 15:41:49   R-evtFltrNum    2
     2017-09-04 15:41:49   R-evtFltrPeriod 1 s
     2017-09-04 15:41:49   R-minInterval   15
     2017-09-04 15:41:48   R-pairCentral   0x2CD8BE
     2017-09-04 15:41:49   R-sign          off
     2020-07-08 20:11:56   RegL_00.        00:00 02:01 0A:2C 0B:D8 0C:BE
     2020-07-08 20:11:57   RegL_01.        00:00 01:22 02:00 08:00 22:C8
     2021-01-02 21:59:24   battery         ok
     2021-01-02 21:59:24   brightness      44
     2020-07-11 16:31:50   cfgState        ok
     2021-01-02 20:48:16   commState       CMDs_done
     2021-01-02 21:59:24   cover           closed
     2021-01-02 20:48:33   motion          off
     2021-01-02 20:48:16   motionCount     55_next:15s
     2021-01-02 20:48:33   motionDuration  17
     2019-06-03 22:47:59   powerOn         2019-06-03 22:47:59
     2021-01-02 21:59:24   recentStateType info
     2021-01-02 20:50:26   state           nomotion
     2021-01-02 20:48:16   trigger_cnt     55
   helper:
     HM_CMDNR   176
     mId        005D
     peerFriend peerAct,peerVirt
     peerOpt    4:motionDetector
     regLst     0,1,4p
     rxType     28
     supp_Pair_Rep 0
     cmds:
       TmplKey    :no:1609617923.99612
       TmplTs     1609617923.99612
       cmdKey     1:1:0::HM_Bewegungsmelder:005D:01:
       cmdLst:
         assignHmKey noArg
         clear      [(readings|trigger|register|oldRegs|rssi|msgEvents|{msgErrors}|attack|all)]
         deviceRename -newName-
         fwUpdate   -filename- [-bootTime-]
         getConfig  noArg
         getDevInfo noArg
         getRegRaw  (List0|List1|List2|List3|List4|List5|List6) [-peerChn-]
         peerBulk   -peer1,peer2,...- [({set}|unset)]
         peerChan   -btnNumber- -actChn- [({single})] [({set}|unset)] [actor|remote|both]
         peerSmart  -peerOpt-
         raw        -data- [...]
         regBulk    -list-.-peerChn- -addr1:data1- -addr2:data2-...
         regSet     [(prep|{exec})] -regName- -value- [-peerChn-]
         reset      noArg
         sign       [(on|{off})]
         tplDel     -tplDel-
         trgEventL  -peer- -condition-
         trgEventS  -peer- -condition-
         trgPressL  [(-peer-|{all})]
         trgPressS  [(-peer-|{all})]
         unpair     noArg
       lst:
         condition  slider,0,1,255
         peer       
         peerOpt    4KS_Kanal1,4KS_Kanal2,4KS_Kanal3,4KS_Kanal4,HKT_1S_Bad_WindowRec,HKT_1S_Bad_remote,HKT_1S_Computerzimmer_WindowRec,HKT_1S_Computerzimmer_remote,HKT_1S_Esszimmer_WindowRec,HKT_1S_Esszimmer_remote,HKT_1S_Schlafzimmer_WindowRec,HKT_1S_Schlafzimmer_remote,HKT_1S_Wohnzimmer_WindowRec,HKT_1S_Wohnzimmer_remote,HKT_2S_Bad_WindowRec,HKT_2S_Bad_remote,HKT_2S_Schlafzimmer_WindowRec,HKT_2S_Schlafzimmer_remote,HKT_2S_Wohnzimmer_WindowRec,HKT_2S_Wohnzimmer_remote,HM_HS_Messschalter_1_Sw,HM_Messsteckdose_1_Sw,HM_Schalter_1S_WZ,HM_Schaltsteckdose_01,HM_Unterputzschalter_01,HM_WT0101_WindowRec,HM_WT0101_remote,HM_WT0201_WindowRec,HM_WT0201_remote,vccu
         tplDel     
       rtrvLst:
         cmdList    [({short}|long)]
         deviceInfo [({short}|long)]
         param      -param-
         reg        -addr- -list- [-peerChn-]
         regList    noArg
         regTable   noArg
         regVal     -addr- -list- [-peerChn-]
         saveConfig [-filename-]
         tplInfo    noArg
     expert:
       def        1
       det        0
       raw        1
       tpl        0
     io:
       newChn     +4077BA,00,00,00
       nextSend   1609621164.42414
       prefIO     
       rxt        2
       vccu       
       p:
         4077BA
         00
         00
         00
     mRssi:
       mNo        B0
       io:
         HMLAN1:
           -90
           -90
     prt:
       bErr       0
       sProc      0
       sleeping   1
       rspWait:
     q:
       qReqConf   
       qReqStat   
     role:
       chn        1
       dev        1
     rssi:
       at_HMLAN1:
         avg        -93.7916666666667
         cnt        648
         lst        -92
         max        -88
         min        -105
     tmpl:
Attributes:
   IODev      HMLAN1
   actCycle   000:10
   actStatus  alive
   alias      HM_Bewegungsmelder
   autoReadReg 4_reqStatus
   event-on-change-reading .*
   expert     defReg,rawReg
   firmware   1.6
   icon       motion_detector
   model      HM-SEN-MDIR-O-2
   mqttPublish *:topic={"state/$base/$name"}
   peerIDs    00000000,
   room       Einfahrt
   serialNr   MEQ1425514
   showtime   1
   subType    motionDetector


Zitatandere Frage: wozu willst du die Uhrzeit der letzten Bewegung übertragen? ;)
Um zu sehen ob jemand (z.B. Postbote) in den Hof reingefahren ist.
Im 1. Stock krieg ich das oft nicht mit.

MadMax-FHEM

Hmm, aber dann siehst du ja nur WANN zuletzt jemand "dort" war...

Wenn du die Bewegung überträgst siehst du das doch auch?

Aber: musst du wissen...

Bin gespannt, ob es klappt.

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

t.huber

#4
Funktioniert einwandrei !
Internals:
   ...
   NAME       HM_Bewegungsmelder
    ...
   READINGS:
    ...
     2021-01-02 22:48:42   lastMotion      2021-01-02 22:48:42
     2021-01-02 22:48:42   motion          off
    ...
Attributes:
   ...
   mqttPublish lastMotion:topic={"state/$base/$name"}
   ...
   userReadings lastMotion:motion.* {if(ReadingsVal($name,"motion","n.a.") eq "off"){return ReadingsTimestamp($name,"motion",0);}}


ZitatHmm, aber dann siehst du ja nur WANN zuletzt jemand "dort" war...
Vorerst reicht mir die Info.
Das ganze soll ja ins FrontEnd HomeAssistant.
Am schönsten wäre es dort wenn ich einen Sensor (Graphen) hätte der mir die letzten paar Stunden anzeigt und die Motions on/off als Graph mit der Waveform "Rechteck" anzeigt.
Evtl. muss ich das dann über influxDB und/oder Grafana integrieren.
Aber bis ich das alles so habe vergehen wohl noch ein paar Tage ... vielleicht Wochen. je nachdem wieviel zeit ich habe.   8-)
Home Assistant habe ich auch erst seit 2-3 Tagen...

EDIT: Kleiner Nachtrag für andere MQTT-Interessenten. Damit meine Topics immer bei FHEM/[Name des Geräts] herauskommen habe ich oben noch ein:
attr mqttGenericBridge globalDefaults base={"FHEM/$device"} definiert

MadMax-FHEM

Wunderbar, freut mich!

Setzt du dann noch ein [gelöst] o.ä. "vor" dem ersten Post, danke.

Viel Spaß dann noch, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)