NEWS
Dynamischer Objektbaum
-
Hallo zusammen,
ich bräuchte euren Rat.
Ich bin gerade dabei einen Adapter für die Kommunikation mit OpenWrt-Geräte zu erstellen:
https://github.com/Schnup89/ioBroker.openwrtIch bekomme json-Resultate über die API welche ich Element für Element in die Objekt-Datenbank schreibe.
Als Beispiel das Resultat des zweiten Kommandos (ubus call hostapd.wlanX get_clients):
https://github.com/Schnup89/ioBroker.openwrt/wiki/ubus-commandsDort bekomme ich die Wlan-Clients als JSON-Liste "clients" ist hier Parent ausgegeben.
- Eintrag "ec:fa:bc:9a:xx:xx"
- Eintrag "84:f3:eb:3e:yy:yy"
Bei nächsten Datenabruf über die API ist Client "84:f3:eb:3e:yy:yy" nicht mehr dabei da er nicht mehr mit dem WLAN verbunden ist.
Dieser wurde aber vorher schon im Objektbaum erstellt.Wie gehe ich am besten vor? Der Eintrag muss weg, aber wie?
Was ich mir Vorstellen kann:
- Nach dem schreiben des letzten Objekts alle Objekte in dem "Ordner" per lastModified prüfen, wenn älter als letzter Datenabruf, dann das betreffende Objetkt löschen
- Das ist etwas mehr Code aber meiner Meinung nach einer der besseren Weg.
- Alle Objekte löschen und neu anlegen
- Das wird meiner Meinung nach blöd, da z.B. die "Historie" Einstellung auf einem state/objekt dann auch gelöscht wird, oder?
Danke und Gruß
Schnup -
@Schnup89 Hi, arbeite gerade mit deinem Adapter, funktioniert super!
( js-controller 3.1.6, Node 12 ).Ich möchte gerne die Werte, die mit "iwinfo" abgerufen werden können, darstellen, ist es möglich, dass du das noch einbaust?
Per option unter den "ubus" commands gehts leider nicht.
Per "command" bekomme ich die Rückmeldung, also im Prinzip funktionierts.{"id":null,"result":"wlan0 ESSID: \"SSID\" Access Point: F4:F2:6D:C7:C7:C7 Mode: Master Channel: 1 (2.412 GHz) Tx-Power: 14 dBm Link Quality: 55/70 Signal: -55 dBm Noise: -95 dBm Bit Rate: 40.1 MBit/s Encryption: mixed WPA/WPA2 PSK (CCMP) Type: nl80211 HW Mode(s): 802.11bgn Hardware: unknown [Generic MAC80211] TX power offset: unknown Frequency offset: unknown Supports VAPs: yes PHY name: phy0","error":null}
-
@ilovegym Servus!
Schön dass der Adapter einen nutzen findet.
Zum Glück gibt es bei openwrt für fast alles ubus Kommandos
Das dürfte das ubus Kommando zum Ziel sein:ubus call network.wireless status
Viele Grüße
Schnup -
@Schnup89 Hi,
Das Kommando hab ich schon drin, aber das zeigt nur die config, nicht die Werte, bei Channel ist "Auto" gesetzt, iwinfo zeigt mir, welcher Channel aktiv ist, und ubus network.wireless Status ergibt nur AutoDas gleiche mit Link quality ..etc..
Ich hab kein ubus command gefunden dafür..
-
@Schnup89 said in Dynamischer Objektbaum:
Bei nächsten Datenabruf über die API ist Client "84:f3:eb:3e:yy:yy" nicht mehr dabei da er nicht mehr mit dem WLAN verbunden ist.
Dieser wurde aber vorher schon im Objektbaum erstellt.Wie gehe ich am besten vor? Der Eintrag muss weg, aber wie?
In meinem Unifi Adapter habe ich exakt das selbe Problem. Meine Lösung ist, dass das Objekt nicht gelöscht wird und es stattdessen für jeden Client einen
is_online
State gibt, dertrue
oderfalse
ist. Natürlich brauchst Du dann in Deinem Code eine Logik, der Clients, die nicht mehr im JSON auftauchen auch auffalse
setzt. -
@ilovegym Okay stimmt!
Funktioniert bei mir zwar nicht, aber evtl. hast du mehr Glück mit der RPC Erweiterung für iwinfo:
https://openwrt.org/docs/guide-developer/ubus/iwinfoopkg update
opkg install rpcd-mod-iwinfo!reboot!
ubus list
*Hier sollte dann iwinfo erscheinenubus call iwinfo wlan0 info
Wenn der dir Daten ausspuckt kannst du das Kommando nehmen, bei mir gibt's da aber ein "parse error"@braindead
Danke das ist eine gute Idee und gar nicht mal so viel Programmieraufwand, danke dir! -
@Schnup89
Hi,
vielen Dank, geht bei mir auch nicht, auch parse error.Ein "iwinfo wlan0 info" funktioniert, wobei das Ergebnis das gleich wie einfach nur ein iwinfo ist.
Muss ich mir ein javascript basteln, das das commando alle Minute hinschickt und das Ergebnis auswertet, die Datenpunkte sind ja im Adapter drin.Übrigens, stell doch deinen Adapter mal der Mehrheit hier im Forum vor, da gibts ganz viele helle Köpfe, die nette Ideen und fixes liefern..
Ein Fehler ist das nicht. -
@ilovegym
Hab mir das nochmal mit dem ubus monitor angesehen während ich die Webseite offen hatte.
Schau mal ob der folgende ubus Befehl dir das gewünschte Ergebnis bringt:ubus call luci-rpc getWirelessDevices
-
@Schnup89
Hi,
nee, leider geht das auch nicht bei mir.... -
@ilovegym
Bekommst du deine Werte nicht, oder generell keinen output?"radio1": { "up": true, "pending": false, "autostart": true, "disabled": false, "retry_setup_failed": false, "iwinfo": { "signal": -50, "noise": -95, "channel": 1, "country": "DE", "phy": "phy1", "txpower": 20, "frequency": 2412, "hwmodes": [ "b", "g", "n" ], "htmodes": [ "HT20", "HT40" ] }
Folgende Pakete sind bzgl. RPC installiert:
root@OpenWrt:~# opkg list-installed | grep rpc rpcd - 2020-05-26-67c8a3fd-1 rpcd-mod-file - 2020-05-26-67c8a3fd-1 rpcd-mod-iwinfo - 2020-05-26-67c8a3fd-1 rpcd-mod-luci - 20191114 rpcd-mod-rrdns - 20170710 root@OpenWrt:~# opkg list-installed | grep ubus libubus-lua - 2019-12-27-041c9d1c-1 libubus20191227 - 2019-12-27-041c9d1c-1 ubus - 2019-12-27-041c9d1c-1 ubusd - 2019-12-27-041c9d1c-1
-
@Schnup89 kommen einfach keine Werte und kein Fehler.
Wollte den Router updaten und jetzt isser voll und ich kann keine Pakete mehr installieren..
hmpff. was kann ich denn löschen, ohne gleich das ganze Teil platt zu machen? Der ist so schön eingebaut.. -
@Schnup89 übrigens, openwrt 18.06.08 ..
TP-Link 941ND v6er läuft ja noch.. und solange bleibt er jetzt.. ansonsten kann man das Netzteil bestimmt für was anderes gebrauchen
-
@ilovegym
Ich hab die neuste drauf.
Lass die installiere Pakete anzeigen mit:opkg list-installed
Hier kannst du schauen ob da was dabei was du nicht benötigst (vpn z.B.) und löschen
-
@Schnup89 ja, ich weiss, aber genau das geht nicht, weil der overlay voll ist.. den kann ich zwar löschen, aber dann ist das Setup weg. Muss ich mal in Ruhe schauen.
Hast du auch den TP-Link 941ND v6,. ??? Der hat ja nur 4/32mb und da ist das die neueste Version... oder gibts n Trick?
-
@ilovegym
Nein ich habe den Archer C7, da kann ich 10MB für Packages nutzen. Da bin ich leider zu wenig im Thema um dir weiterhelfen zu können. evtl. funktionierts mit der neusten openwrt version out-of-the-box... aber dafür muss auch erstmal updaten