Ankündigung

Einklappen
Keine Ankündigung bisher.

UniFi Controller API WLAN

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Zitat von jentz1986 Beitrag anzeigen
    Dazu müsstest Du definieren, was realisieren heißt. Du hast halt kein DNS oder DHCP, wenn du keinen entsprechenden Lieferanten (Fritzbox, Pi, NAS,...) in dem jeweiligen VLAN hast. Aber für VLANs reichen switche alleine..
    OFFTOPIC - mache wenn nötig gerne einen eigenen Thread auf.

    Einfamilienhaus mit FritzBox 7590 (DNS & DHCP), 2x UniFiSwitche mit POE, 1x UAP AC Pro (reicht aktuell, haben eine recht offene Bauweise).
    Vlans würde ich nutzen (wollen), um zB die 3x POE Außenkameras in ein eigenes Netz zu packen.

    Kommentar


      #17
      OK hier eine Alpha/Beta (bei mir funktionierts):
      https://github.com/jentz1986/smartho...i-plugin/unifi

      Hab noch meine Schwierigkeiten mit Git. (Hab zu viel CVS und SVN im Blut). Daher gibts noch keinen PR in den offiziellen Develop-Zweig.
      EDIT: Hab doch nen Weg gefunden. PR 245.

      Was geht:
      - Items für Präsenz, IP und Hostname von Geräten (Präsenz OK, der Rest ist nur kopiert von AVM, Sinn hab ich nicht verstanden)
      - Präsenzerkennung des Geräts an einem bestimmten AP (Wenn ich im Garten bin, ist mein Handy im Garten, dann kann die Heizung im Büro aus)
      - Auslesen des Port-Profils eines Switches (Mehr fürs debuggen)
      - Mapping von zwei Port-Profilen eines Switches auf Zustand an und aus. (Lesen und Setzen, Wenn Haustür abgeschlossen, dann LAN Dose außen aus)
      - Auslesen und Setzen des "Disabled" Zustands eines AP. (Ist nötig damit der Controller nicht warnt, wenn der Kontakt zum AP verloren geht, weil der Port aus ist)
      - Web-Interface gibt kurze Übersicht über die Items. Bei Problemen (Tippfehler in der MAC o.ä.) wird zum Item eine Fehlerbeschreibung auf einem zweiten Tab eingeblendet und nicht das Logfile zugemüllt.
      - Ich habe eine Logik eingebaut, die Einstellungen wie MAC-Adressen oder Port-Profile vom jeweiligen Eltern-Item, oder höher liest. Es wird am Item selbst gestartet und dann zur Wurzel hin gesucht; Das was zuerst gefunden wird greift. Damit ist auch eine globale Einstellung möglich, die in den unteren Ebenen in Einzelfällen überschrieben wird. Das geht bestimmt auch eleganter, aber so funktionierts.
      Zuletzt geändert von jentz1986; 29.05.2019, 11:28.

      Kommentar


        #18
        Hallo

        kurzes Feedback zum Plugin: funktioniert für meine Zwecke wunderbar, jedoch wäre eine Beispielkonfiguration der plugin.yaml nett gewesen

        ------------------------------
        unifi:
        plugin_name: unifi
        unifi_user: ubnt #User Name
        unifi_password: ubnt #Passwort
        unifi_controller_url: https://192.168.x.x:8443
        -------------------------------

        ansonsten einmal ein großes Danke für die Arbeit

        Kommentar


          #19
          Gerne!

          Bezüglich plugin.yaml: Ups, völlig vergessen! Hab Deine plugin.yaml von hier direkt in den PR gepackt... Andererseits hilft das Admin-Backend doch schon sehr, da sind genau diese Dinge dann aus dem Plugin selbst generiert sichtbar. Danke für den Hinweis!

          Frage:
          Funktioniert bei Dir der Item-Generator?

          Kommentar


            #20
            ja der item Generator funktioniert super, wobei er nur die aktuellen Geräte verbundenen Geräte nimmt, nett wäre alle bekannten Geräte zu nehmen (da ist mir nämlich aufgefallen dass sich eine WLAN Steckdose ausgeklinkt hat ...)

            wobei bei mir jetzt schon der erste Error kam:

            Code:
            2019-06-17  15:06:11 ERROR    plugins.unifi.poll_unifi Method plugins.unifi.poll_unifi exception: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))
            > Traceback (most recent call last):
            >   File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 601, in urlopen
            >     chunked=chunked)
            >   File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 387, in _make_request
            >     six.raise_from(e, None)
            >   File "<string>", line 2, in raise_from
            >   File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 383, in _make_request
            >     httplib_response = conn.getresponse()
            >   File "/usr/lib/python3.5/http/client.py", line 1198, in getresponse
            >     response.begin()
            >   File "/usr/lib/python3.5/http/client.py", line 297, in begin
            >     version, status, reason = self._read_status()
            >   File "/usr/lib/python3.5/http/client.py", line 266, in _read_status
            >     raise RemoteDisconnected("Remote end closed connection without"
            > http.client.RemoteDisconnected: Remote end closed connection without response
            
            During handling of the above exception, another exception occurred:
            
            > Traceback (most recent call last):
            >   File "/usr/local/lib/python3.5/dist-packages/requests/adapters.py", line 449, in send
            >     timeout=timeout
            >   File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 639, in urlopen
            >     _stacktrace=sys.exc_info()[2])
            >   File "/usr/local/lib/python3.5/dist-packages/urllib3/util/retry.py", line 357, in increment
            >     raise six.reraise(type(error), error, _stacktrace)
            >   File "/usr/local/lib/python3.5/dist-packages/urllib3/packages/six.py", line 685, in reraise
            >     raise value.with_traceback(tb)
            >   File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 601, in urlopen
            >     chunked=chunked)
            >   File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 387, in _make_request
            >     six.raise_from(e, None)
            >   File "<string>", line 2, in raise_from
            >   File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 383, in _make_request
            >     httplib_response = conn.getresponse()
            >   File "/usr/lib/python3.5/http/client.py", line 1198, in getresponse
            >     response.begin()
            >   File "/usr/lib/python3.5/http/client.py", line 297, in begin
            >     version, status, reason = self._read_status()
            >   File "/usr/lib/python3.5/http/client.py", line 266, in _read_status
            >     raise RemoteDisconnected("Remote end closed connection without"
            > urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))
            
            During handling of the above exception, another exception occurred:
            
            > Traceback (most recent call last):
            >   File "/usr/local/smarthome/lib/scheduler.py", line 522, in _task
            >     obj()
            >   File "/usr/local/smarthome/plugins/unifi/__init__.py", line 653, in poll_device
            >     self._poll_with_unifi_type(UniFiConst.TYPE_CL_PRESENT, lambda i: self._get_client_presence(i))
            >   File "/usr/local/smarthome/plugins/unifi/__init__.py", line 646, in _poll_with_unifi_type
            >     item(func(item), self.get_shortname())
            >   File "/usr/local/smarthome/plugins/unifi/__init__.py", line 653, in <lambda>
            >     self._poll_with_unifi_type(UniFiConst.TYPE_CL_PRESENT, lambda i: self._get_client_presence(i))
            >   File "/usr/local/smarthome/plugins/unifi/__init__.py", line 640, in _get_client_presence
            >     return self._model._api.get_client_presence(client_mac)
            >   File "/usr/local/smarthome/plugins/unifi/ubiquiti/unifi.py", line 343, in get_client_presence
            >     clnts = self.list_clients(filters={'mac': client_mac})
            >   File "/usr/local/smarthome/plugins/unifi/ubiquiti/unifi.py", line 159, in list_clients
            >     self._site))
            >   File "/usr/local/smarthome/plugins/unifi/ubiquiti/unifi.py", line 84, in _get_url
            >     r = self._session.get(url, verify=self._verify_ssl)
            >   File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 546, in get
            >     return self.request('GET', url, **kwargs)
            >   File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 533, in request
            >     resp = self.send(prep, **send_kwargs)
            >   File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 646, in send
            >     r = adapter.send(request, **kwargs)
            >   File "/usr/local/lib/python3.5/dist-packages/requests/adapters.py", line 498, in send
            >     raise ConnectionError(err, request=request)
            > requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))
            funktioniert aber weiterhin

            Kommentar


              #21
              etwas offtopic: kann mir jemand nen unify 48port switch (managed) empfehlen?

              hatte den Ubiquiti US-48-500W im auge

              Kommentar


                #22
                Ay karamba. OK: Weiterer Punkt zur Verbesserung des Error-Handling: In den Lambdas zur Abfrage von Daten ein try-except rein, damit der nicht für die eine Minute komplett durchrauscht.
                Aber schon komisch, dass bei Dir die Verbindung zum Controller einfach mal mitten drin stirbt, den hab ich noch nicht geschafft...

                Zitat von psilo Beitrag anzeigen
                hatte den Ubiquiti US-48-500W im auge
                Meine Armut kotzt mich an </OT> Unifi ist doch vor allem eins: Uni, also einheitlich. Wenn du wirklich ein 500W Netzteil haben möchtest und an ALLEN 48 Ports PoE brauchst, dann ist das das Richtige, sonst halt ohne PoE, oder weniger Ports, oder ne Kombination aus 16Port PoE und 48 Ports ohne, da selbst 24Port PoE + 48Port ohne günstiger ist als der 48 Port 500W... Siehe: https://store.ui.com/collections/rou...witching/unifi
                Zuletzt geändert von jentz1986; 17.06.2019, 15:44.

                Kommentar


                  #23
                  jentz1986 thx! 48 port ist mandatory, da im haus mehr als 24 anschluesse und die kinder langsam ins richtige alter kommen, den alten netgear 24er zu ersetzen.

                  POE ist aber alles andere als mandatory. daher klingt die kombilösung gut! hatte das günstigere 48 port gerät auf amazon übersehen, werde aber vermutlich sowieso wo anders ordern, da ich kein retourengerät will
                  Zuletzt geändert von psilo; 17.06.2019, 17:44.

                  Kommentar


                    #24
                    jentz1986 beim Pluginstart ohne Netzwerkverbindung gibt es noch Exceptions.
                    Kannst du das bei Gelegenheit noch abfangen?
                    danke!!

                    Kommentar


                      #25
                      Zitat von Onkelandy Beitrag anzeigen
                      Kannst du das bei Gelegenheit noch abfangen?
                      Ich versuchs. Also der neue Code (heute 20:30) hat da schon was, aber ob das reicht weiß ich nicht...

                      Kommentar


                        #26
                        so - gerade getestet:

                        Code:
                        2019-06-19  01:43:54 ERROR    plugins.unifi.poll_unifi Method plugins.unifi.poll_unifi exception: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))
                        > Traceback (most recent call last):
                        >   File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 601, in urlopen
                        >     chunked=chunked)
                        >   File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 387, in _make_request
                        >     six.raise_from(e, None)
                        >   File "<string>", line 2, in raise_from
                        >   File "/usr/local/lib/python3.5/dist-packages/urllib3/connectionpool.py", line 383, in _make_request
                        >     httplib_response = conn.getresponse()
                        >   File "/usr/lib/python3.5/http/client.py", line 1198, in getresponse
                        >     response.begin()
                        >   File "/usr/lib/python3.5/http/client.py", line 297, in begin
                        >     version, status, reason = self._read_status()
                        >   File "/usr/lib/python3.5/http/client.py", line 266, in _read_status
                        >     raise RemoteDisconnected("Remote end closed connection without"
                        > http.client.RemoteDisconnected: Remote end closed connection without response

                        Kommentar


                          #27
                          Hmmm. Also was ich gemacht habe, ist die exception zu fangen, und dann als error zu loggen. Danach geht es normal im Programm weiter. Wenn die Gegenseite nicht erreicht werden kann, was soll das Programm sonst tun? Den Fehler verschweigen fänd ich weniger gut...
                          Was wäre denn die Idee? Fehler fangen und erst, wenn er mehrfach auftritt loggen?

                          Wo laufen denn bei euch Controller und ShNg? Bei mir beides im Docker auf der gleichen Maschine und beides im Host-netz, ohne Routing dazwischen...

                          Das herunterfahren und aufhängen finde ich blöder. Ich mach mal n Setup auf nem Pi und dann schauen wir.

                          Kommentar


                            #28
                            Ich denke, die Sache ist erledigt, sobald du in der Stop Methode ein try um das logout machst. So passt bei mir zumindest alles auch ohne Netzwerkverbindung.

                            Setup ist bei mir zum Testen aktuell Mac OS X. Und als ich da mal das WLAN aus hatte, kamen die Fehler.

                            Kommentar


                              #29
                              smarthomeNG läuft (derzeit noch) auf einem Raspi 3:
                              SmartHomeNG Version: 1.6.e6399d8e.develop in /usr/local/smarthome - heads/develop
                              SmartHomeNG Plugins Version: 1.6a.ac7a8704.develop in /usr/local/smarthome/plugins - heads/develop

                              und der Unifi Controller läuft in Proxmox (Virtualisierungsbetriebssystem) auf einem HP Microserver Gen10 (x3421 mit 16GB Ram) in einem LXC Container (also quasi virtuelle Maschine mit vollem Zugriff auf das Hostsystem) mit nur dem Unifi Controller drauf

                              - alles im gleichen (dummen) Switch, alles per LAN angebunden

                              Kommentar


                                #30
                                artner Wie oft kommt der Connection aborted Fehler im Log? Ist das alle x Versuche mal? Oder quasi in Dauerschleife? Ich finde das seltsam...
                                Onkelandy Jo, mache ich so. Ich hab das jetzt getestet in dem ich die Controller-URL auf unsinn gestellt hab. Das bedeutet halt keine Connection.

                                EDIT 21:32: Code ist aktualisiert im PR
                                Zuletzt geändert von jentz1986; 20.06.2019, 20:34.

                                Kommentar

                                Lädt...
                                X