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: NetworkSSIDDen 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 :'(
Zitat[Unifi:[NewClient_essid]]
Wieso denn 2x eckige Klammern?
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.
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.
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
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.
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",""),""))}'
Wow, es funktioniert.
Jetzt muss ich mir mal heftig Gedanken machen wieso ich das nicht hinbekommen habe!
Vielen vielen lieben dank, hast mich gerettet 🤭