IP Adresse von MQTT Gerät ermitteln + dyn. setList widgets

Begonnen von DeeSPe, 02 Dezember 2021, 15:48:02

Vorheriges Thema - Nächstes Thema

DeeSPe

Hallo Gemeinde,

ich bin noch relativ neu im Thema MQTT und frage mich woher ich die IP Adresse des jeweiligen MQTT2_DEVICE bekomme.
Benötigt wird diese für ein userReading, weil ich dann noch einmal ein JSON beim entsprechenden Gerät abholen muss.
Klar weiß ich die IP Adresse, ich würde sie aber gern dynamisch (ReadingsVal/InternalVal) ermitteln wollen.

Danke.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

juergen012

mach mal autocreate auf 1. Bei einem Neustart des Gerätes wird bei mir unter Info2_IPAddress die IP-Adresse angezeigt.

Fhem unter Proxmox

LuckyDay

Zitatfrage mich woher ich die IP Adresse des jeweiligen MQTT2_DEVICE bekomme

MQTT benötigt keinen Absender oder IP Adresse.

Wenn du Glück hast, bsp tasmota schickt sie im json Payload mit.


DeeSPe

Danke schon mal für die Antworten.
autocreate bringt mich nicht weiter, ist laut cmdref auch per default an.

Wie komme ich denn an den vollen JSON Payload?
Ich kenne mich wie gesagt noch nicht mit MQTT aus. Bin aber am Einlesen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Otto123

#4
Hallo Dan,

mqtt muss kein JSON liefern. Die payload kann alles sein.

Kannst Ja mal global:DEFINED.MQTT2.* loggen/monitoren - bei sonos2mqtt kommt dabei die IP Adresse mit. Über die lese ich dann wiederum ein xml Dokument zurück.

Ansonsten gibt es beim Server rawEvents

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

rudolfkoenig

Ab sofort speichert MQTT2_SERVER die Verbindung, ueber die die Daten empfangen wurden, als Internal im MQTT2_DEVICE.

Die Aenderung ist minimal, und nutzt das vorhandene Framework, dafuer sind die Namen etwas gewoehnungsbeduerftig:
- das Internal heisst <mqtt2_server-name>_CONN (analog zu den _MSGCNT und _TIME Internals)
- der Wert ist der Name der Verbindungs-Instanz: <mqtt2_server-name>_<IP>_<Port>.

DeeSPe

Zitat von: rudolfkoenig am 02 Dezember 2021, 19:30:15
Ab sofort speichert MQTT2_SERVER die Verbindung, ueber die die Daten empfangen wurden, als Internal im MQTT2_DEVICE.

Die Aenderung ist minimal, und nutzt das vorhandene Framework, dafuer sind die Namen etwas gewoehnungsbeduerftig:
- das Internal heisst <mqtt2_server-name>_CONN (analog zu den _MSGCNT und _TIME Internals)
- der Wert ist der Name der Verbindungs-Instanz: <mqtt2_server-name>_<IP>_<Port>.

Hallo Rudi,

das ist ja ein Service! Vielen Dank dafür.
Werde ich sofort morgen Früh ausprobieren.
Und da Du gerade hier bist, noch eine andere Frage zu MQTT:
Gibt es eine Möglichkeit für "setList" den Inhalt eines Widgets dynamisch zu gestalten? Habe schon einige Varianten probiert, aber es wird leider kein Perl Code ausgeführt.
Ich meine sowas:
mySet:select,{Perl zum dyn. Ermitteln der Listenelemente (wird hier bisher nicht als Perl Code ausgeführt)} {Dies wird als Perl Code ausgeführt}

Danke.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

TomLee


DeeSPe

Zitat von: TomLee am 02 Dezember 2021, 19:50:00
Wenn ich  dich richtig verstanden habe, ist das schon länger ein Wunsch.

https://forum.fhem.de/index.php/topic,111711.msg1134328.html#msg1134328

Ja super, da bin ich ja offensichtlich nicht der Einzige dem das gefallen würde.
Ich denke das wäre eine sinnvolle Erweiterung. Werde mir mal den Code dafür ansehen und schauen ob ich etwas beisteuern kann.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Ich finde leider nicht den Code für die Widgets. :(
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Vielen Dank Rudi, mit
(split("_",InteralVal($NAME,"m2s_CONN","")))[1]
kommt man jetzt ganz einfach an die IP des MQTT2_DEVICE.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

rudolfkoenig

#11
Zitatkommt man jetzt ganz einfach an die IP des MQTT2_DEVICE.
Und wieder eine Bestaetigung dafuer, dass einfach relativ ist.

Wg. dynamische Widgets:
Ich habe SetExtensions erweitert, damit widget-specs der Form {[^ ]+} ausgewertet werden.
Wg. SetExtensions sind mehrere Module betroffen, und ich bin noch besorgt, dass es Nebeneffekte hat.
Es ist nicht ausgeschlossen, dass das Feature zurueckgezogen wird :)

Beispiele:
attr m2d setList\
  test1:{join(",",0..20)} bla/bla bla\
  test2:{"select,1,2,3"} bla/bla bla\
  test3:{"textField-long"} bla/bla bla\
  test4:{"slider,0,1,".InternalVal($name,"NR",2)} bla/bla bla



DeeSPe

Zitat von: rudolfkoenig am 03 Dezember 2021, 11:23:06
Wg. dynamische Widgets:
Ich habe SetExtensions erweitert, damit widget-specs der Form {[^ ]+} ausgewertet werden.
Wg. SetExtensions sind mehrere Module betroffen, und ich bin noch besorgt, dass es Nebeneffekte hat.
Es ist nicht ausgeschlossen, dass das Feature zurueckgezogen wird :)

Beispiele:
attr m2d setList\
  test1:{join(",",(0..20))} bla/bla bla\
  test2:{"select,1,2,3"} bla/bla bla\
  test3:{"textField-long"} bla/bla bla\
  test4:{"slider,0,1,".InternalVal($name,"NR",2)} bla/bla bla




Ich bin ja sowas von begeistert!
Hab nicht mal die Stelle gefunden wo ich das hätte einbauen können. :D :D :D

Vielen Dank Rudi!
Ich teste das gleich mal aus.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Hallo Rudi,

hattest Du das mal selbst getestet?
Das funktioniert (es wird ein "select" angezeigt):
Code (setList) Auswählen
test:{"select,a,b,c,d,e"} {}

Das funktioniert bei mir nicht (es wird ein "TextField" angezeigt):
Code (setList) Auswählen
test1:{"select,".ReadingsVal($NAME,"liste","a,b,c,d,e")} {}

Mache ich was falsch?
Dass kein Leerzeichen im Perl sein darf ist klar.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Ich habe es soeben herausgefunden.
Die Variable $NAME darf hier nicht groß geschrieben werden. Mit $name klappt es.

Danke nochmal für die schnelle Umsetzung Rudi.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe