Zusammensetzen von Variablen im DoIf

Begonnen von iCure, 08 September 2022, 16:06:26

Vorheriges Thema - Nächstes Thema

iCure

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  :'(

kjmEjfu

Zitat[Unifi:[NewClient_essid]]

Wieso denn 2x eckige Klammern?
Migriere derzeit zu Home Assistant

iCure

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.

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

iCure

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

Beta-User

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

Damian

#6
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",""),""))}'


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

iCure

Wow, es funktioniert.

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

Vielen vielen lieben dank, hast mich gerettet 🤭