FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: iCure am 08 September 2022, 16:06:26

Titel: Zusammensetzen von Variablen im DoIf
Beitrag von: iCure am 08 September 2022, 16:06:26
Hallo zusammen,

Ich brauche jetzt mal wirklich eure Hilfe, werde wahnsinnig.

Habe ein DOIF indem ich mir eine Push Nachricht sende. Soweit so gut.

Nachricht wird gesendet, sobald ein neuer Client sich am Router anmeldet.

Hierbei entsteht ein READING der MacAdresse:
DEVICE: Unifi
Reading: UC_newClients
Inhalt: AB_CD_AB_CD_AB_CD

Zeitgleich entsteht ein neues READING mit der SSID, wo sich das Gerät Eingewählt hat:
Device: Unifi
Reading: AB_CD_AB_CD_AB_CD_essid
Inhalt: NetworkSSID

Den Inhalt NetworkSSID möchte ich erhalten.
Die MacAdresse ist immer eine andere, daher muss ich mir das READING zusammenbasteln.

Nach ewigem hin und her habe ich es nun in einem Dummy zwischengespeichert "NewClient_essid" und wollte es im DOIF anwenden:
Hierbei schreibe ich in den Dummy:
AB_CD_AB_CD_AB_CD_essid

Mein Ziel ist jetzt den Inhalt vom Reading AB_CD_AB_CD_AB_CD_essid vom DEVICE Unifi

Zitat[Unifi:[NewClient_essid]]

Zitat
defmod di_newClients DOIF ([Unifi:-UC_newClients] ne "" )\
\
(set pushmsg.Marv msg title='New Client' 'Neuer WLAN Zugriff: \
[Unifi:-UC_newClients] \
[Unifi:[NewClient_essid]] ')


Leider erhalte ich keinen Inhalt vom reading NewClient_essid und bin auch nicht in der Lage das zu lösen.
Bitte um Hilfe  :'(
Titel: Antw:Zusammensetzen von Variablen im DoIf
Beitrag von: kjmEjfu am 08 September 2022, 16:14:02
Zitat[Unifi:[NewClient_essid]]

Wieso denn 2x eckige Klammern?
Titel: Antw:Zusammensetzen von Variablen im DoIf
Beitrag von: iCure am 08 September 2022, 16:18:12
Zitat von: kjmEjfu am 08 September 2022, 16:14:02
Wieso denn 2x eckige Klammern?

"NewClient_essid" enthält den Namen des Readings welche ich vom Device haben möchte.

Ich hatte gehofft, dadurch zuerst den Inhalt des dummys "NewClient_essid" auszulesen, welcher dann anschließend in der äußeren Klammer dessen den Inhalt ausgibt.
Titel: Antw:Zusammensetzen von Variablen im DoIf
Beitrag von: Damian am 09 September 2022, 09:34:56
Zitat von: iCure am 08 September 2022, 16:18:12
"NewClient_essid" enthält den Namen des Readings welche ich vom Device haben möchte.

Ich hatte gehofft, dadurch zuerst den Inhalt des dummys "NewClient_essid" auszulesen, welcher dann anschließend in der äußeren Klammer dessen den Inhalt ausgibt.

Ist nicht implementiert, weil bei dieser Syntax [Device:Reading] zum Zeitpunkt der Definition, die entsprechenden Trigger aufgesetzt werden. Diese benötigen ein festes Device und ein festes Reading. Das bedeutet, dass sich das Trigger-Reading (wie auch das Device) zur Laufzeit nicht verändern darf.
Titel: Antw:Zusammensetzen von Variablen im DoIf
Beitrag von: iCure am 09 September 2022, 10:26:20
Ok verstanden, hast du nen alternativen Lösungsansatz?
Habe mich mit perl "my" Variablen probiert, damit komme ich aber kaum zurecht...
Ich weiß mein Vorhaben ist schwer niederzuschreiben...

Ich weiß jetzt aber dass ich so nicht weiter komme, werde mich an den Variablen probieren
Titel: Antw:Zusammensetzen von Variablen im DoIf
Beitrag von: Beta-User am 09 September 2022, 10:34:46
Sobald du versuchst, das nach extern (dummy) zu schreiben, wird das m.E. wackelig.

Ein sauber getriggertes userReading könnte helfen, vorausgesetzt, es handelt sich um ein Bulk-update. Den trigger auf das newClient-Reading legen.
Titel: Antw:Zusammensetzen von Variablen im DoIf
Beitrag von: Damian am 09 September 2022, 10:53:32
Zitat von: iCure am 09 September 2022, 10:26:20
Ok verstanden, hast du nen alternativen Lösungsansatz?
Habe mich mit perl "my" Variablen probiert, damit komme ich aber kaum zurecht...
Ich weiß mein Vorhaben ist schwer niederzuschreiben...

Ich weiß jetzt aber dass ich so nicht weiter komme, werde mich an den Variablen probieren

Du brauchst ja keine Trigger auf die neuen Readings, daher lässt es sich über ReadingsVal lösen.

defmod di_newClients DOIF ([Unifi:-UC_newClients] ne "" )\
\
(set pushmsg.Marv msg title='New Client' 'Neuer WLAN Zugriff: \
[Unifi:-UC_newClients] \
{(ReadingsVal("Unifi",ReadingsVal ("NewClient_essid","state",""),""))}'


Titel: Antw:Zusammensetzen von Variablen im DoIf
Beitrag von: iCure am 09 September 2022, 10:59:53
Wow, es funktioniert.

Jetzt muss ich mir mal heftig Gedanken machen wieso ich das nicht hinbekommen habe!

Vielen vielen lieben dank, hast mich gerettet 🤭