[gelöst] MQTT-Client WEB Link mit erittelter IP anzeigen

Begonnen von Jewe, 22 Mai 2022, 22:02:21

Vorheriges Thema - Nächstes Thema

Jewe

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

Beta-User

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>)}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Jewe

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

Beta-User

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>)}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Jewe

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.
:)

Beta-User

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 :) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files