Hallo,
ich habe an eingen Teilnehmern eine WEB-Link hinterlegt. Die IP habe ich immer fest eingetragen. Das ist aber nicht so optimal, wiel sie dann nicht automatisch angepasst wird.
Nun habe ich ein wenig probiert, gesucht und von einer WLED folgendes übernommen und angepasst:
ip { my $ip = InternalVal(InternalVal($IODev.'_CONN','none'),'PEER','none') // return defined $event ? $c : undef },
WebLink { return("<html><a href='http://"$ip"/'>WEB</a></html>") };
Allerdings bekomme ich einen Fehler und komme nicht weiter:
Error evaluating MQTT2_ESP_Easy_8 userReading ip: Global symbol "$IODev" requires explicit package name (did you forget to declare "my $IODev"?) at (eval 2508635) line 1.
Not enough arguments for main::InternalVal at (eval 2508635) line 1, near "'none')"
Global symbol "$c" requires explicit package name (did you forget to declare "my $c"?) at (eval 2508635) line 1.
hier noch das List vom Device:
Internals:
CID ESP_Easy_8
DEF ESP_Easy_8
DEVICETOPIC MQTT2_ESP_Easy_8
FUUID 60bb9f41-f33f-9f49-77d5-450edf8ac28b63f5
FVERSION 10_MQTT2_DEVICE.pm:0.255640/2022-01-26
IODev mqtt2Server
LASTInputDev mqtt2Server
MSGCNT 35982
NAME MQTT2_ESP_Easy_8
NR 674
STATE Temperatur: 24.2 °C - Feuchte: 46 % - Druck: 987 hPa - TVOC: 460 ppm - WebLink: none
TYPE MQTT2_DEVICE
mqtt2Server_CONN mqtt2Server_192.168.6.113_62135
mqtt2Server_MSGCNT 35982
mqtt2Server_TIME 2022-05-22 21:59:52
Helper:
DBLOG:
ESP_Easy:
myDbLog:
TIME 1653244821.30451
VALUE connected!
Humidity:
myDbLog:
TIME 1653249562.0337
VALUE 46.0
Pressure:
myDbLog:
TIME 1653249562.13526
VALUE 987.9
TVOC:
myDbLog:
TIME 1653249562.23704
VALUE 460
Temperature:
myDbLog:
TIME 1653249561.9416
VALUE 24.2
WebLink:
myDbLog:
TIME 1653245031.739
VALUE <html><a href='http://192.168.6.113/'>WEB</a></html>
freeheap:
myDbLog:
TIME 1653249592.45437
VALUE 16736
load:
myDbLog:
TIME 1653249592.47838
VALUE 19
rssi:
myDbLog:
TIME 1653249592.46632
VALUE -62
uptime:
myDbLog:
TIME 1653249592.44209
VALUE 724
OLDREADINGS:
READINGS:
2022-05-22 21:59:22 Humidity 46.0
2022-05-22 21:59:22 Pressure 987.9
2022-05-22 21:59:22 TVOC 460
2022-05-22 21:59:21 Temperature 24.2
2022-05-22 21:59:52 freeheap 16736
2022-05-22 21:59:52 ip Error evaluating MQTT2_ESP_Easy_8 userReading ip: Global symbol "$IODev" requires explicit package name (did you forget to declare "my $IODev"?) at (eval 2508984) line 1.
Not enough arguments for main::InternalVal at (eval 2508984) line 1, near "'none')"
Global symbol "$c" requires explicit package name (did you forget to declare "my $c"?) at (eval 2508984) line 1.
2022-05-22 21:59:52 load 19
2022-05-22 21:59:52 rssi -62
2022-05-22 21:59:52 uptime 724
Attributes:
icon mqtt_device
readingList ESP_Easy_8:ESP_Easy:.* ESP_Easy
ESP_Easy_8:ESP_Easy/System/uptime:.* uptime
ESP_Easy_8:ESP_Easy/System/ip:.* ip
ESP_Easy_8:ESP_Easy/System/freeheap:.* freeheap
ESP_Easy_8:ESP_Easy/System/rssi:.* rssi
ESP_Easy_8:ESP_Easy/System/load:.* load
ESP_Easy_8:ESP_Easy/BME680TVOC/Temperature:.* Temperature
ESP_Easy_8:ESP_Easy/BME680TVOC/Humidity:.* Humidity
ESP_Easy_8:ESP_Easy/BME680TVOC/Pressure:.* Pressure
ESP_Easy_8:ESP_Easy/BME680TVOC/TVOC:.* TVOC
room MQTT2_DEVICE
stateFormat {sprintf("Temperatur: %.1f °C - Feuchte: %d %% - Druck: %d hPa - TVOC: %d ppm - WebLink: %s", ReadingsVal($name,"Temperature",0), ReadingsVal($name,"Humidity",0), ReadingsVal($name,"Pressure",0), ReadingsVal($name,"TVOC",0), ReadingsVal($name,"WebLink","none"))}
userReadings ip { my $ip = InternalVal(InternalVal($IODev.'_CONN','none'),'PEER','none') // return defined $event ? $c : undef },
WebLink { return("<html><a href='http://"$ip"/'>WEB</a></html>") };
Jens
Die readingList liest sich so, als würde die IP sowieso (beim Start?) mit übertragen.
Von daher müßte es gehen, diese triggern zu lassen und darüber den weblink anzupassen:
attr MQTT2_ESP_Easy_8 userReadings WebLink:ip:.* { my $ip = ReadingsVal($name,'ip','none');qq(<html><a href='http://$ip'>WEB</a></html>)}
Nein leider ist das nicht so, zumindest nicht in dem Reading. Ip. Das ist noch ein test von meinen versuchen : ESP_Easy_8:ESP_Easy/System/ip:.* ip
es muss aus den Reading mqtt2Server_CONN
kommen
Hmm, solche fake-Einträge (die dann auch noch nach autocreate aussehen) sind einigermaßen irreführend...
Unterstellt, dass es sich bei "Temperature" wirklich um ein triggernd aktualisiertes Reading handelt, sollte das so gehen:
attr MQTT2_ESP_Easy_8 userReadings WebLink:Temperature:.* {my $io = InternalVal($name,'IODev','unkn')->{NAME};; my $ip = InternalVal($name,"${io}_CONN",'none');;$ip=~s{.*_([.\d]+)_.*}{$1}xe;;qq(<html><a href='http://$ip'>WEB</a></html>)}
Vielen Dank für die Hilfe, so funkitoniert es nun. Mein Prinzipieller Fehler war wohl aber auch, dass ich kein triggerdes Ereignis hatte.
Werde mir das noch ganz genau anschauen.
:)
Gerne.
Hier noch eine etwas verbesserte Version:
attr MQTT2_ESP_Easy_8 userReadings WebLink:Temperature:.* {my $io = InternalVal($name,'IODev','unkn')->{NAME}//return;; my $ip = InternalVal($name,"${io}_CONN",'none');;$ip=~s{.*_([.\d]+)_.*}{$1}xe;;qq(<html><a href='http://$ip'>WEB</a></html>)}
Das ist teils nicht selbsterklärend, falls dich Details interessieren, kannst du gerne nachfragen :) .