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
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
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
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