Neues Modul - 74_Unifi - Für den Ubiquiti Networks (UBNT) - Unifi Controller

Begonnen von rapster, 23 August 2015, 02:12:04

Vorheriges Thema - Nächstes Thema

Wuehler

Hallo Torsten,

mit UDM hat das Modul noch nie funktioniert. Da ich kein UDM habe ist es auch schwierig dagegen zu programmieren. Ich kann gerne dabei unterstützen. Es müsste sich aber jemand mit UDM finden, der sich traut ein wenig Perl zu programmieren. Die zu ändernden Stellen habe ich im Post und Anhang vor drei Posts markiert.

Viele Grüße,
Dirk

okenny

Für mich funktioniert es immer noch....ich habe ein UDM-Pro mit FW 1.70 mit Contoller 5.13.27.
Was kann das erklären? Warum funktioniert es nur für mich?

Mein Unifi GUI ist auf Englisch, ich habe "Enable WebSocket connection" angeschaltet, Cloud Zugriff angeschaltet... was wäre noch relevant?
Mein FHEM ist auf einem 64bit x86 Ubuntu 20.03 LTS VM (in einem QNAP NAS).
FHEM Server und UDM sind im selben VLAN.
FHEM und UDM reden über Port 443.

Ich schalte meine POE Ports (IP Cams, APs, und einige Switches) mit FHEM an und aus..ich habe einige POE Switches. Anwesenheit funktioniert auch.


topsecret99

Also ich habe die gleichen Einstellungen, auch UDM Pro, nur läuft mein FHEM auf 16.04 64bit.
Cloud access lässt sich auf dem UDM eigentlich ja gar nicht ändern, jedenfalls finde ich keine Einstellungsmöglichkeit dazu.
Da ich jedoch remote über ui.com auf das UDM zugreifen kann, muss es ja enabled sein.

Ich kann gerne vieles ausprobieren und testen - habe aber leider von Programmiersprachen (Perl) nicht wirklich gute Kenntnisse.

@okenny
welches Modul verwendest du ? "original" 3.4.0 oder das letzte hier aus dem Post ?

okenny

um sicher zu sein welche ich habe, habe ich mein 74_Unifi.pm mit WinSCP runtergeladen und hier im Anhang hochgeladen.

topsecret99

Die ist Inhalts-identisch zu der meinen.
Ich habe zwischenzeitlich auch alle Ports versucht, welche offen stehen - ohne Erfolg.
Dann bin ich jetzt erst einmal am Ende meiner Ideen, erst recht, weil es bei dir geht - was ich dir sehr gönne  :) .

Fall weitere Ideen auftauchen bin ich gerne weiter zum Testen bereit.

Torsten

rcmcronny

Hoi, hab zwar keine UDM,aber habt Ihr schon euere Defines vom Unifi Device verglichen ? Wenn das Modul passt, wäre das auch ne Idee :)

Ronny

topsecret99

aus der fhem.cfg:
define UDM Unifi 192.168.10.20 443 crypt:450e5a405205 crypt:7e45680e743d7e5c

(die crypt sind natürlich nicht meine echten  :) )

Torsten

bogi999

So, ich hab mich noch mal hingesetzt.

Das Modul von Wuehler lässt sich nicht laden.
Das letzte was Maui online gestellt hat bringt mir folgende Fehlermeldung

Zitat(Unifi_Login_Receive) - Login Failed! - state:'error.decode_json' - msg:'malformed JSON string, neither tag, array, object, number, string or atom, at character offset 1 (before "<!doctype html>\n<ht...") at ./FHEM/74_Unifi.pm line 923. '

In der Zeile 923 steht folgendes

Zitateval { $data = decode_json($data); 1; } or do { $data = { meta => {rc => 'error.decode_json', msg => $@} }; };

Benutze ich das Modul von okenny bekomme ich folgendes

Zitat(Unifi_Login_Receive) - Login Failed! Invalid username or password! - state:'error' - msg:'api.err.Invalid'

Ich steig da noch nich so wirklich durch... Was fehlt mir in Zeile 923?

Ciao, Lee

rcmcronny

Hallo,

das das Modul von Wuehler nicht geht, ist klar, das ist ja noch nicht für UDM vorbereitet, das war ja ein Mod vom okenny, das solltest Du also für alle Tests natürlich nutzen, bis es im offiziellen drin ist.
Dir fehlt da auch nix, es heisst nur, das es kein JSON ist,was zurückkommt. Das ist auch zu erwarten ;)

Also beim okenny Modul scheint es wohl Daten zu bekommen, allerdings zeigen die,das ein Login gescheitert ist. Sicher, das Du auch korrekte Daten angegeben hast  ?

Also Modul von okenny runterladen in den entsprechenden FHEM Ordner, dann ein "shutdown restart" und dann schauen.
Ggf auch mal einen 2. Unifi Device nochmal komplett neu anlegen, ob das dann direkt klappt. Und ein List kam von Dir auch nicht bisher ^^

Ronny

bogi999

@rcmcronny.

User/Pass is korrekt.
Mit der Aussage dass das Modul von Wuehler nicht lädt heißt dass es garnicht startet.

Das löschen/anlegen hab ich probiert.
Es tut nicht. Auch hab ich das logging auf 5 gestellt dass ich alles logge im Modul, aber mehr als das was ich zitierte kam nicht!

Wuehler

Moin,

wie schon geschrieben gab es eine Änderung beim Login (andere URL sowie vermutlich csrf-Token und nur die cookies senden, die erwartet werden (cookie_jar). Warum das bei okenny funktioniert weiß ich nicht (vielleicht gab es die Änderungen erst ab einer bestimmten FW-Version?).

Vielleicht gehts aber auch einfacher:

msg:'api.err.Invalid' deutet auf eine weitere Anpassung hin:

ersetzt mal in okennys Version die Zeile

    $logindata = '{"username":"'.$user.'", "password":"'.$password.'"}';

durch

    $logindata = '{\"username\":\"'.$user.'\", \"password\":\"'.$password.'\"}';


Vielleicht passt es dann wieder. Könnte an unterschiedlichen Passwörtern liegen, dass es bei dem einen funktioniert und beim anderen nicht.


topsecret99

Hallo,
habe deinen Vorschlag umgesetzt - (weiterhin disconnected) nun kommt:

2020.05.24 13:40:22 5: UDM3 (Unifi_Notify) - executed.
2020.05.24 13:40:22 5: UDM3 (Unifi_Notify) - checking 1 state
2020.05.24 13:40:22 5: UDM3 (Unifi_Notify) - executed. - Remove all Timers & Call DoUpdate...
2020.05.24 13:40:22 5: UDM3 (Unifi_DoUpdate) - executed.
2020.05.24 13:40:22 5: UDM3 (Unifi_Login_Send) - executed.
2020.05.24 13:40:22 5: UDM3 (Unifi_initCustomClientReadings) - parsed part: .  ->  ^accesspoint|^essid|^hostname|^last_seen|^snr|^uptime
2020.05.24 13:40:22 5: UDM3 (Unifi_initCustomClientReadings) - parsed Attribute customClientReadings: {"attr_value":".:^accesspoint|^essid|^hostname|^last_seen|^snr|^uptime","parts":{"0000000_part":{"nameRegEx":".","ReadingRegEx":"^accesspoint|^essid|^hostname|^last_seen|^snr|^uptime"}}}.
2020.05.24 13:40:22 5: UDM3 (Unifi_Login_Receive) - executed.
2020.05.24 13:40:22 5: UDM3 (Unifi_Login_Receive) - Failed with HTTP Code 500!
2020.05.24 13:40:22 5: UDM3 (Unifi_Login_Receive) - Connect/Login to Unifi-Controller failed. Will try again after interval...
2020.05.24 13:40:23 5: UDM3 (Unifi_Notify) - executed.

Wuehler

Fehler 500 heißt ,,internal server error". Jetzt braucht man das server.log vom Unifi. Da könnte dein stehen, was falsch ist.

topsecret99

Hi - sorry wenn ich die Logs nicht wirklich interpretieren kann :-) ...

[2020-05-24T16:54:10,573] <webapi-489> ERROR [ApiServlet] - Servlet.service() for servlet [ApiServlet] in context with path [] threw exception java.lang.RuntimeException: Error parsing json: JsonParseException: line: 1 char: 2 at com.ubnt.data.X.parseJSON(Unknown Source) ~[ace.jar:?] at com.ubnt.data.X.parseJSON(Unknown Source) ~[ace.jar:?] at com.ubnt.ace.api.ApiServlet.o00000(Unknown Source) ~[ace.jar:?] at com.ubnt.ace.api.ApiServlet.service(Unknown Source) ~[ace.jar:?] at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-embed-websocket-8.5.51.jar:8.5.51] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.51.jar:8.5.51] at com.ubnt.ace.view.AuthFilter.doFilter(Unknown Source) ~[ace.jar:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) [tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543) [tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) [tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:609) [tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818) [tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623) [tomcat-embed-core-8.5.51.jar:8.5.51] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.51.jar:8.5.51] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_252] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_252] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.51.jar:8.5.51] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_252] Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('\' (code 92)): was expecting double-quote to start field name at [Source: (String)"{\"username\":\"BENUTZER\", \"password\":\"PASSWORT\"}"; line: 1, column: 3] at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1840) ~[jackson-core-2.10.0.jar:2.10.0] at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:712) ~[jackson-core-2.10.0.jar:2.10.0] at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:637) ~[jackson-core-2.10.0.jar:2.10.0] at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddName(ReaderBasedJsonParser.java:1781) ~[jackson-core-2.10.0.jar:2.10.0] at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextFieldName(ReaderBasedJsonParser.java:932) ~[jackson-core-2.10.0.jar:2.10.0] at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:249) ~[jackson-databind-2.10.0.jar:2.10.0] at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:68) ~[jackson-databind-2.10.0.jar:2.10.0] at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:15) ~[jackson-databind-2.10.0.jar:2.10.0] at com.fasterxml.jackson.databind.ObjectMapper._readTreeAndClose(ObjectMapper.java:4254) ~[jackson-databind-2.10.0.jar:2.10.0] at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:2711) ~[jackson-databind-2.10.0.jar:2.10.0] ... 29 more

Ich habe die Benutzerdaten durch BENUTZER und PASSWORT geändert ...

Wuehler

Sorry, da habe ich daneben getippt. Er beschwert sich über Zeichen 2 (also den \   ). Durch die Nutzung der einfachen Anführungsstriche war es ja auch schon im Original so, dass die " mitgesendet wurden. Mein Fixvorschlag war also sinnfrei.
Jetzt hilft am Besten, wenn ihr mit den Entwicklungstools von Chrome (Strg + Umschalt + I, Dann Network -> XHR) mal in die Daten, die euer Browser an den unifi-Controller beim Anmelden sendet reinschaut. Wenn beim Login andere Daten als die folgenden gesendet werden (Username und Passwort natürlich anders) bitte melden:
{"username":"DER_USER", "password":"DAS_PASSWORT"}

Da könnte auch ein Leerzeichen wichtig sein.