[closed] mqtt/notify: Telegram Nachricht mit aktueller IP Adresse verschicken

Begonnen von Nielsiwilsi, 13 Mai 2021, 11:23:12

Vorheriges Thema - Nächstes Thema

Nielsiwilsi

Hallo,
ich sitz mal wieder wie Ochs vorm Berg.
Es wird hinten keine Abfrage der IP durchgeführt, sondern als String gesendet. Ziel ist, dass ich direkt aus der Message das Device öffnen kann.
Info am Rand: Der Code soll in ein Template für ein Shelly und später auch für Tasmota via mqtt.

defmod DEVICE_notify_online notify DEVICE:online:.true set TelegramBot message DEVICE online! http://{ AttrVal("DEVICE","ip","DEVICE")}

Wo hab ich meinen Denkfehler?

Hier noch ein Beispiel list vom DEVICE:
Internals:
   CID        mqtt2client
   DEF        mqtt2client
   DEVICETOPIC EG_WC_Rollo_Nord
   FUUID      5de9fee9-f33f-7cb5-6a7f-419116ef0852fef0
   IODev      mqtt2_client
   LASTInputDev mqtt2_client
   MSGCNT     87355
   NAME       EG_WC_Rollo_Nord
   NR         196
   STATE      100
   TYPE       MQTT2_DEVICE
   mqtt2_client_MSGCNT 87355
   mqtt2_client_TIME 2021-05-13 11:17:00
   Helper:
     DBLOG:
       input0:
         LOG_Db:
           TIME       1620896660.68132
           VALUE      0
       input1:
         LOG_Db:
           TIME       1620896660.7105
           VALUE      0
       mqtt_connected:
         LOG_Db:
           TIME       1620896650.4559
           VALUE      true
       online:
         LOG_Db:
           TIME       1620896650.02476
           VALUE      true
       pct:
         LOG_Db:
           TIME       1620896660.61979
           VALUE      100
       power:
         LOG_Db:
           TIME       1620896660.6487
           VALUE      0.00
       rollers_1_power:
         LOG_Db:
           TIME       1620758947.02598
           VALUE      0.00
       wifi_sta_connected:
         LOG_Db:
           TIME       1620896650.4559
           VALUE      true
       wifi_sta_rssi:
         LOG_Db:
           TIME       1620897169.03196
           VALUE      -68
   OLDREADINGS:
   READINGS:
     2021-05-13 11:17:00   actions_stats_skipped 0
     2021-05-13 11:17:00   cfg_changed_cnt 0
     2021-05-13 11:17:00   cloud_connected false
     2021-05-13 11:17:00   cloud_enabled   false
     2021-05-13 11:16:50   energy          263
     2021-05-13 11:17:00   fs_free         151102
     2021-05-13 11:17:00   fs_size         233681
     2021-05-13 11:17:00   fw_ver          20210429-100513/v1.10.4-g3f94cd7
     2021-05-13 11:17:00   has_update      false
     2021-05-13 11:17:00   id              shellyswitch-32BFA7
     2021-05-13 11:16:50   input0          0
     2021-05-13 11:16:50   input1          0
     2021-05-13 11:17:00   inputs_1_event 
     2021-05-13 11:17:00   inputs_1_event_cnt 0
     2021-05-13 11:17:00   inputs_1_input  0
     2021-05-13 11:17:00   inputs_2_event 
     2021-05-13 11:17:00   inputs_2_event_cnt 0
     2021-05-13 11:17:00   inputs_2_input  0
     2021-05-13 11:17:00   ip              192.168.1.189
     2021-05-13 11:17:00   mac             84F3EB32BFA7
     2021-05-13 11:17:00   meters_1_counters_1 0.000
     2021-05-13 11:17:00   meters_1_counters_2 0.000
     2021-05-13 11:17:00   meters_1_counters_3 0.000
     2021-05-13 11:17:00   meters_1_is_valid true
     2021-05-13 11:17:00   meters_1_overpower 0.00
     2021-05-13 11:17:00   meters_1_power  0.00
     2021-05-13 11:17:00   meters_1_timestamp 1620904620
     2021-05-13 11:17:00   meters_1_total  263
     2021-05-13 11:17:00   model           SHSW-21
     2021-05-13 11:17:00   mqtt_connected  true
     2021-05-13 11:17:00   new_fw          false
     2021-05-13 11:17:00   online          true
     2021-05-13 11:16:50   pct             100
     2021-05-13 11:17:00   ping_check      true
     2021-05-13 11:16:50   power           0.00
     2021-05-13 11:17:00   ram_free        36896
     2021-05-13 11:17:00   ram_total       49776
     2021-05-13 11:17:00   rollers_1_calibrating false
     2021-05-13 11:17:00   rollers_1_current_pos 100
     2021-05-13 11:17:00   rollers_1_is_valid true
     2021-05-13 11:17:00   rollers_1_last_direction open
     2021-05-13 11:17:00   rollers_1_positioning true
     2021-05-13 11:17:00   rollers_1_power 0.00
     2021-05-13 11:17:00   rollers_1_safety_switch false
     2021-05-13 11:17:00   rollers_1_source mqtt
     2021-05-13 11:17:00   rollers_1_state stop
     2021-05-13 11:17:00   rollers_1_stop_reason normal
     2021-05-13 11:17:00   serial          1
     2021-05-13 11:16:50   state           stop
     2021-05-13 11:17:00   time            11:17
     2021-05-13 11:17:00   unixtime        1620897420
     2021-05-13 11:17:00   update_has_update false
     2021-05-13 11:17:00   update_new_version 20210429-100513/v1.10.4-g3f94cd7
     2021-05-13 11:17:00   update_old_version 20210429-100513/v1.10.4-g3f94cd7
     2021-05-13 11:17:00   update_status   idle
     2021-05-13 11:17:00   uptime          322235
     2021-05-13 11:17:00   voltage         225.48
     2021-05-13 11:17:00   wifi_sta_connected true
     2021-05-13 11:17:00   wifi_sta_ip     192.168.1.189
     2021-05-13 11:17:00   wifi_sta_rssi   -68
     2021-05-13 11:17:00   wifi_sta_ssid   d[-_-]b
     2021-05-13 11:04:09   x_announceall   set
Attributes:
   DbLogExclude .*
   DbLogInclude input0,input1,pct,mqtt_connected,online,wifi_sta_connected,wifi_sta_rssi,power,temperature_status
   IODev      mqtt2_client
   autocreate 0
   devStateIcon 0:fts_shutter_100 100:fts_shutter_10 9\d.*:fts_shutter_10 8\d.*:fts_shutter_20 7\d.*:fts_shutter_30 6\d.*:fts_shutter_40 5\d.*:fts_shutter_50 4\d.*:fts_shutter_60 3\d.*:fts_shutter_70 2\d.*:fts_shutter_80 1\d.*:fts_shutter_90 0\d.*:fts_shutter_100 set_.*:fts_shutter_updown
   event-on-change-reading .*
   group      Rollosteuerung
   readingList shellies/shellyswitch-32BFA7/input/0:.* input0
shellies/shellyswitch-32BFA7/input/1:.* input1
shellies/shellyswitch-32BFA7/temperature:.* temperature
shellies/shellyswitch-32BFA7/overtemperature:.* overtemperature
shellies/shellyswitch-32BFA7/temperature_status:.* temperature_status
shellies/shellyswitch-32BFA7/roller/0:.* state
shellies/shellyswitch-32BFA7/roller/0/command:.* command
shellies/shellyswitch-32BFA7/roller/0/power:.* power
shellies/shellyswitch-32BFA7/roller/0/energy:.* energy
shellies/shellyswitch-32BFA7/roller/0/pos:.* pct
shellies/shellyswitch-32BFA7/announce:.* { json2nameValue($EVENT) }
shellies/shellyswitch-32BFA7/info:.* { json2nameValue($EVENT) }
shellies/shellyswitch-32BFA7/online:.* online
   room       EG->WC
   setList    open:noArg shellies/shellyswitch-32BFA7/roller/0/command open
close:noArg shellies/shellyswitch-32BFA7/roller/0/command close
stop:noArg shellies/shellyswitch-32BFA7/roller/0/command stop
pct:slider,0,1,100 shellies/shellyswitch-32BFA7/roller/0/command/pos $EVTPART1
x_recalibration:noArg shellies/shellyswitch-32BFA7/roller/0/command rc
x_update_fw:noArg shellies/shellyswitch-32BFA7/command update_fw
x_update:noArg shellies/shellyswitch-32BFA7/command update
x_annonce:noArg shellies/shellyswitch-32BFA7/command announce
x_announceall:noArg shellies/command announce
x_mqttcom shellies/shellyswitch-32BFA7/command $EVTPART1
   setStateList open close stop
   stateFormat pct
   webCmd     pct:open:close:stop


Vatertagsgüße
Niels

MadMax-FHEM

#1
Also ich sehe KEIN Attribut namens "ip" in dem Device.

Ich würde das eh so machen:


defmod DEVICE_notify_online notify DEVICE:online:.true {my $IP=ReadingsVal("DEVICE","ip","n.a.");; fhem("set TelegramBot message DEVICE online! http://$IP");;}


Es geht bestimmt auch was mit "setMagic" aber damit tue ich mich immer (noch) schwer... ;)

Und ich weiß ja nicht, ob die IP aus wifi_sta_ip die ist um die es geht. Aber es ist die einzige IP die ich so finden konnte... ;)
EDIT: korrigiere, es gibt ein Reading namens ip, dann eben das. Code angepasst... ;)

Ich nehme an, "DEVICE" ist ein "Platzhalter"?
Willst du dann für jedes Device ein notify?

Ich würde das ja in einem notify für ALLE (gleichen) Devices machen.
Setzt voraus, dass die Namensgebung eine "vernünftige" devspec ermöglicht...

Aber: jeder wie er will...

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)

Nielsiwilsi

Hallo Joachim,
danke für die schnelle Antwort. Leider funktioniert, meine Idee im gegensatz zu deinem Code nicht, da zum Zeitpunkt, wenn das DEVICE online geht noch keine IP Adresse ausgelesen ist. Und wenn ich zB die IP monitore, kann ich weder bei einem Change noch einem Update triggern.... ohne SPAM zu produzieren oder Notifications zu verlieren.

Zitat von: MadMax-FHEM am 13 Mai 2021, 11:40:59
Ich würde das ja in einem notify für ALLE (gleichen) Devices machen.
Setzt voraus, dass die Namensgebung eine "vernünftige" devspec ermöglicht...

Aber: jeder wie er will...
Ja leider, hab ich ein Namen-Schema gewählt, dass es mir manchmal nicht einfach macht, etwas zu vereinfachen. Bisher war das aber noch kein Problem.

Trotzdem noch Mal danke. (ich schließe den Post hier, da ich ihn momentan als Sackgasse sehe)
VG Niels

Otto123

Hi,

ich habe es jetzt nicht ganz verstanden, aber der Code in #1 kann nicht funktionieren. So wäre set magic richtig (Die Klammer macht den Unterschied)
Und - kein Attribute sondern ein Reading!:
defmod DEVICE_notify_online notify DEVICE:online:.true set TelegramBot message DEVICE online! http://{ (ReadingsVal("DEVICE","ip","DEVICE"))}
oder so:
defmod DEVICE_notify_online notify DEVICE:online:.true set TelegramBot message DEVICE online! http://[DEVICE:ip]

Warum steht wie immer hier: https://fhem.de/commandref_DE.html#set

Edit: Ich meine jetzt noch das verstanden zu haben:
Zitatwenn das DEVICE online geht noch keine IP Adresse ausgelesen ist. Und wenn ich zB die IP monitore,
So könnte man auf das "Erscheinen" der ip warten :)
sleep DEVICE:ip:.* ; set ...

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz