Modul für Omada SDN Controller

Begonnen von MatthiasL, 30 September 2022, 15:43:08

Vorheriges Thema - Nächstes Thema

Loopo

#30
Den Log mit Verbose5 hab ich angehängt.

Readings für das PoE Profil:
result_data_02_bandWidthCtrlType: 0
result_data_02_dhcpL2RelaySettings_enable: 0
result_data_02_dot1x: 1
result_data_02_eeeEnable: 0
result_data_02_flag: 2
result_data_02_flowControlEnable: 0
result_data_02_id: 63c5b76d1b6c6334c9515557
result_data_02_lldpMedEnable: 1
result_data_02_loopbackDetectEnable: 0
result_data_02_loopbackDetectVlanBasedEnable: 0
result_data_02_name: AllITPoe
result_data_02_nativeNetworkId: 63597a63487df8426cbea0e5
result_data_02_poe: 0
result_data_02_portIsolationEnable: 0
result_data_02_site: 63597a63487df8426cbea0d9
result_data_02_spanningTreeEnable: 0
result_data_02_type: 2


Und die Readings aus dem OmadaDecoder:
IT: 02
ITdataid: 63c5b76d1b6c6334c9515557
ITdataname: AllITPoe
ITdatanativeNetworkId: 63597a63487df8426cbea0e5
ITdatatagNetworkIds: ""
state: active
triggeredByDev: OmadaSettingLanProfiles
triggeredByEvent: result_data_02_name: AllITPoe


Hab auch schon eine Vermutung: die "datatagNetworkIds" wird im Set Device nicht angezeigt, da kein Wert hinterlegt ist. Verschluckt er sich deswegen?

*Edit*
Ich hab jetzt mal ein Tag vergeben:
result_data_02_tagNetworkIds: 63597a63487df8426cbea0e7
result_data_02_tagNetworkIds_0: 63597a63487df8426cbea0e7


das reading im OmadaDecode bleibt aber unverändert:
ITdatatagNetworkIds: ""]

MatthiasL

Wie sieht denn dein Profil im Omada aus?
Das native Netzwerk sollte tagged sein.

Loopo

Aktuell ist das AllTIPoe wie folgt:

Native: CJBase
Tagged Networks:
Untagged Networks: CJBase
Voice Networks: None

MatthiasL

Also wenn du ein Tagged vergeben hast, müsste das auch im Reading auftauchen.
Ärgerlich. Mach doch noch mal ein Update mit ,,get" und schau umso im Log was im log auftaucht.
Am besten du suchst nach CJBase und schaust dir mal den JSON Output an.
Dementsprechend müssen auch die Readings zurück kommen...

WhyTea

Hallo.
Aktuell nutze ich Ubiquiti Produkte in Verbindung mit den unifi Modul in Fhem.

Da bei Omada Produkten sowohl der Preis, die Verfügbarkeit und die Produktvielfalt besser ist überlege ich zu wechseln.

Hauptanwendungsfall ist bei die Anwesenheitserkennung.

Hat das schon mal jemand mit Omada realisiert?

Gruß
Daniel

MatthiasL

Sollte einfach gehen:
Dummy Device
Internals:
NAME       OmadaPresence
TYPE       dummy

und ein notify:

DEF     OmadaClients:result_data_[0-9]*_name.* {
  my ($num) = $EVTPART0 =~ /([\d]+)/;
  my ($active) = "result_data_".$num."_active";
  my $presence = ReadingsVal("OmadaClients",$active,"");
  my ($device) = "result_data_".$num."_name";
  my $devname = ReadingsVal("OmadaClients",$device,"");
  $devname=~s/ /_/g;
  fhem("setReading OmadaPresence $devname $presence");
}
   NAME       notify_oc
   NOTIFYDEV  OmadaClients
   REGEXP     OmadaClients:result_data_[0-9]*_name.*
   STATE      2023-03-17 12:03:43
   TYPE       notify

mrnatcho

Hallo zusammen,

erstmal vielen Dank für tolle Arbeit, Zugriff auf den Omada Controller läuft damit direkt entsprechend der Beispiele.
Ich versuche gerade, auch das Presence Thema zum Laufen zu bringen, kriege aber das Modul für die Abfrage der Clients nicht hin, es kommt nur Error Code -1005 zurück, mit folgender Definition des Device:

define OmadaClients HTTPMOD https://controllerIP/%%omadacId%%/api/v%%apiVer%%/sites/%%siteId%%/clientList&currentPage=1&currentPageSize=1000 3600
attr OmadaClients enableControlSet 1
attr OmadaClients enableCookies 1
attr OmadaClients getHeader1 Content-Type: application/json
attr OmadaClients getHeader2 Csrf-Token: $sid
attr OmadaClients handleRedirects 0
attr OmadaClients reAuthAlways 1
attr OmadaClients reading100JSON mode
attr OmadaClients reading100Name mode
attr OmadaClients reading101JSON clientsDisplay
attr OmadaClients reading101Name clientsDisplay
attr OmadaClients reading102JSON errorCode
attr OmadaClients reading102Name errorCode
attr OmadaClients replacement01Mode expression
attr OmadaClients replacement01Regex %%omadacId%%
attr OmadaClients replacement01Value ReadingsVal("Omada", "result_omadacId", "")
attr OmadaClients replacement02Mode text
attr OmadaClients replacement02Regex %%apiVer%%
attr OmadaClients replacement02Value 2
attr OmadaClients replacement03Mode expression
attr OmadaClients replacement03Regex %%siteId%%
attr OmadaClients replacement03Value ReadingsVal("Omada", "result_Id", "")
attr OmadaClients requestHeader1 Content-Type: application/json
attr OmadaClients requestHeader2 Csrf-Token: $sid
attr OmadaClients room Omada
attr OmadaClients sid01Data {"username":"USER","password":"PASSWORD"}
attr OmadaClients sid01Header Content-Type: application/json
attr OmadaClients sid01IdJSON result_token
attr OmadaClients sid01URL https://controllerIP/%%omadacId%%/api/v%%apiVer%%/login
attr OmadaClients sslArgs SSL_VERIFY_NONE
attr OmadaClients stateFormat msg result_name
attr OmadaClients verbose 0


Habe ich da die falsche Reading Struktur? Ich finde für die API aber auch keine Doku zu den Fehlercodes...
FHEM auf Ubuntu Server VM auf Synology NAS, Yamaha MC's, Technoline Temperatur-Sensoren über Lacrosse GW's, HM-IP Devices über virtual CCU aus Raspberry Pi

MatthiasL

Zitat von: mrnatcho am 06 August 2023, 13:21:00Hallo zusammen,

erstmal vielen Dank für tolle Arbeit, Zugriff auf den Omada Controller läuft damit direkt entsprechend der Beispiele.
Ich versuche gerade, auch das Presence Thema zum Laufen zu bringen, kriege aber das Modul für die Abfrage der Clients nicht hin, es kommt nur Error Code -1005 zurück, mit folgender Definition des Device:

define OmadaClients HTTPMOD https://controllerIP/%%omadacId%%/api/v%%apiVer%%/sites/%%siteId%%/clientList&currentPage=1&currentPageSize=1000 3600
attr OmadaClients enableControlSet 1
attr OmadaClients enableCookies 1
attr OmadaClients getHeader1 Content-Type: application/json
attr OmadaClients getHeader2 Csrf-Token: $sid
attr OmadaClients handleRedirects 0
attr OmadaClients reAuthAlways 1
attr OmadaClients reading100JSON mode
attr OmadaClients reading100Name mode
attr OmadaClients reading101JSON clientsDisplay
attr OmadaClients reading101Name clientsDisplay
attr OmadaClients reading102JSON errorCode
attr OmadaClients reading102Name errorCode
attr OmadaClients replacement01Mode expression
attr OmadaClients replacement01Regex %%omadacId%%
attr OmadaClients replacement01Value ReadingsVal("Omada", "result_omadacId", "")
attr OmadaClients replacement02Mode text
attr OmadaClients replacement02Regex %%apiVer%%
attr OmadaClients replacement02Value 2
attr OmadaClients replacement03Mode expression
attr OmadaClients replacement03Regex %%siteId%%
attr OmadaClients replacement03Value ReadingsVal("Omada", "result_Id", "")
attr OmadaClients requestHeader1 Content-Type: application/json
attr OmadaClients requestHeader2 Csrf-Token: $sid
attr OmadaClients room Omada
attr OmadaClients sid01Data {"username":"USER","password":"PASSWORD"}
attr OmadaClients sid01Header Content-Type: application/json
attr OmadaClients sid01IdJSON result_token
attr OmadaClients sid01URL https://controllerIP/%%omadacId%%/api/v%%apiVer%%/login
attr OmadaClients sslArgs SSL_VERIFY_NONE
attr OmadaClients stateFormat msg result_name
attr OmadaClients verbose 0


Habe ich da die falsche Reading Struktur? Ich finde für die API aber auch keine Doku zu den Fehlercodes...

Hi! Danke für das positive Feedback.
Probiere es doch mal mit:
https://controllerip/%%omadacId%%/api/v%%apiVer%%/sites/%%siteId%%/clients?currentPage=1&currentPageSize=1000

Die API Doku gibts hier - stimmt aber nicht immer:
https://community.tp-link.com/en/business/forum/topic/590430

mrnatcho

Thanks, mit der richtigen URL geht es auch (und der Korrektur der Tippfehler in meiner DEF und ein/zwei Attributen). Das Verbose hoch zu setzen und im Log zu schauen, wie die URL am Ende aussieht, war auch hilfreich.

Mit meiner Def kriege ich nun für jeden Client alle Felder als einzelne Readings, einfach durchnummeriert. Wie hast Du die Readings strukturiert? Mit RecombineExpr? Würdes Du die getreadings für Dein Modul zum Clients auslesen mal posten?
FHEM auf Ubuntu Server VM auf Synology NAS, Yamaha MC's, Technoline Temperatur-Sensoren über Lacrosse GW's, HM-IP Devices über virtual CCU aus Raspberry Pi

MatthiasL

#39
Hi,
nachdem ich auch nicht so der riesen Pearl Typ habe ich es mir einfach gemacht.
Ich habe nur folgende Attributes:
reading01DeleteIfUnmatched 1
reading01JSON result_data_[0-9]+_name
reading01Name name

Damit bekomme ich alle Namen bzw. Mac Adressen der Clients, wenn kein Name vergeben ist.
Durchnummeriert..

Nach ca. 5 Minuten abwesenheit verschwindet dann das Geräte aus OmadaClients. Weiß nicht ob dir das reicht...

mrnatcho

Moin,
das funktioniert super, und reicht so vollkommen. Ich will damit auch nur Kameras im Eingangsbereich einschalten, wenn das Haus verlassen. Da reichen die 5 Minuten ja auch, ebenso bei der Heimkehr. Die Kameras sollen nur nicht durchgehend mitlaufen.
FHEM auf Ubuntu Server VM auf Synology NAS, Yamaha MC's, Technoline Temperatur-Sensoren über Lacrosse GW's, HM-IP Devices über virtual CCU aus Raspberry Pi