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

KyleK

Hallo,

ich hab seit ein paar Tagen unglaublich viele Fehlermeldungen im FHEM Log:
Use of uninitialized value in string eq at /opt/fhem/FHEM/74_Unifi.pm line 1374.
Use of uninitialized value in concatenation (.) or string at /opt/fhem/FHEM/74_Unifi.pm line 2576.
Use of uninitialized value in string eq at /opt/fhem/FHEM/74_Unifi.pm line 1457.
Use of uninitialized value in concatenation (.) or string at /opt/fhem/FHEM/74_Unifi.pm line 2576.
Use of uninitialized value in string eq at /opt/fhem/FHEM/74_Unifi.pm line 2010.
Use of uninitialized value in concatenation (.) or string at /opt/fhem/FHEM/74_Unifi.pm line 2576.
Use of uninitialized value in string eq at /opt/fhem/FHEM/74_Unifi.pm line 1019.
Use of uninitialized value in concatenation (.) or string at /opt/fhem/FHEM/74_Unifi.pm line 2576.
Use of uninitialized value in concatenation (.) or string at /opt/fhem/FHEM/74_Unifi.pm line 2576.
Use of uninitialized value in string eq at /opt/fhem/FHEM/74_Unifi.pm line 1074.
Use of uninitialized value in concatenation (.) or string at /opt/fhem/FHEM/74_Unifi.pm line 2576.
Use of uninitialized value in string eq at /opt/fhem/FHEM/74_Unifi.pm line 1238.
Use of uninitialized value in concatenation (.) or string at /opt/fhem/FHEM/74_Unifi.pm line 2576.
Use of uninitialized value in string eq at /opt/fhem/FHEM/74_Unifi.pm line 1415.
Use of uninitialized value in concatenation (.) or string at /opt/fhem/FHEM/74_Unifi.pm line 2576.
Use of uninitialized value in concatenation (.) or string at /opt/fhem/FHEM/74_Unifi.pm line 2576.
Use of uninitialized value in string eq at /opt/fhem/FHEM/74_Unifi.pm line 1238.
Use of uninitialized value in concatenation (.) or string at /opt/fhem/FHEM/74_Unifi.pm line 2576.
Use of uninitialized value in string eq at /opt/fhem/FHEM/74_Unifi.pm line 1074.
Use of uninitialized value in concatenation (.) or string at /opt/fhem/FHEM/74_Unifi.pm line 2576.
Use of uninitialized value in string eq at /opt/fhem/FHEM/74_Unifi.pm line 1415.
Use of uninitialized value in concatenation (.) or string at /opt/fhem/FHEM/74_Unifi.pm line 2576.
Use of uninitialized value in string eq at /opt/fhem/FHEM/74_Unifi.pm line 1457.
Use of uninitialized value in concatenation (.) or string at /opt/fhem/FHEM/74_Unifi.pm line 2576.
Use of uninitialized value in string eq at /opt/fhem/FHEM/74_Unifi.pm line 1374.
Use of uninitialized value in concatenation (.) or string at /opt/fhem/FHEM/74_Unifi.pm line 2576.

Ich vermute es hängt mit dem Update Unifi OS 5.1.15 bzw. Network 10.4.57 zusammen?

FHEM on Futro S940
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

Wolle02

Bei mir stelle ich alle 30 Sekunden diesen Eintrag im Log fest:
Error: >< has no TYPE, but following keys: >unifi<
Dazu verliert Fhem regelmäßig einmal am Tag die Verbindung zur UDM. Nur ein Löschen des Device und Neuanlage mit den Zugangsdaten lässt wieder eine Verbindung entstehen.
Auch bei mir läuft Unifi OS 5.1.15 und Netzwork 10.4.57

eisman

hi,

habe die UDM PM
  Version: 5.1.15
  Netzwerk: 10.4.57

und keine Probleme, nur beim Start die Meldung siehe:
 #1724 "PERL WARNING: Use of uninitialized value in string ne at /usr/share/fhem/FHEM/74_Unifi.pm line 939."

was aber nicht groß stört

gruss
1x FHEM Debian, Homematic,Z2M,FS20 / 1X VM / 7x ESP
1x FHEM Debian, Homematic,Z2M         / 1X VM / 6x ESP
1x FHEM Debian                                      / 1X VM / 2x ESP
1x Proxmox * 1x MQTT * 1x Raspbery  *  Unifi

Gary

Ich habe seit einigen Tagen das Problem, dass nach einer gewissen Laufzeit die Unifi Daten der Geräte nicht mehr aktualisiert werden. Der Timestamp der Readings ändert sich zwar weiterhin, aber die Werte der Readings nicht mehr. Nach einem Neustart von FHEM geht es wieder ein paar Stunden und dann wieder das Problem.

Zum Zeitpunkt, wo es nicht mehr geht, habe ich im Log diese Fehler:

2026.06.12 02:00:36 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/74_Unifi.pm line 1244.
2026.06.12 02:00:36 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/74_Unifi.pm line 2582.
2026.06.12 02:00:36 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/74_Unifi.pm line 1197.
2026.06.12 02:00:37 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/74_Unifi.pm line 1028.
2026.06.12 02:00:37 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/74_Unifi.pm line 1421.
2026.06.12 02:00:37 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/74_Unifi.pm line 1380.
2026.06.12 02:00:37 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/74_Unifi.pm line 1463.
2026.06.12 02:00:37 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/74_Unifi.pm line 2016.
2026.06.12 02:00:37 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/74_Unifi.pm line 1083.

Mit Verbose Debug sehe ich im Log, dass die API offenbar Fehler erzeugt, keine Werte kommen und immer nur die zuletzt abgefragten wieder neu zugewiesen werden:

2026.06.12 11:16:18 5: unifi (Unifi_Notify) - executed.
2026.06.12 11:16:18 5: unifi: get called with ?.
2026.06.12 11:16:58 5: unifi (Unifi_DoUpdate) - executed.
2026.06.12 11:16:58 5: unifi (Unifi_GetEvents_Send) - executed.
2026.06.12 11:16:58 5: unifi (Unifi_GetEvents_Receive) - executed.
2026.06.12 11:16:58 5: unifi (Unifi_GetEvents_Receive) - Failed (without message)! - state:''
2026.06.12 11:16:58 5: unifi (Unifi_GetUnarchivedAlerts_Send) - executed.
2026.06.12 11:16:58 5: unifi (Unifi_GetUnarchivedAlerts_Receive) - executed.
2026.06.12 11:16:58 5: unifi (Unifi_GetUnarchivedAlerts_Receive) - Failed (without message)! - state:''
2026.06.12 11:16:58 5: unifi (Unifi_GetAccesspoints_Send) - executed.
2026.06.12 11:16:58 5: unifi (Unifi_GetAccesspoints_Receive) - executed.
2026.06.12 11:16:58 5: unifi (Unifi_GetAccesspoints_Receive) - Failed (without message)! - state:''
2026.06.12 11:16:58 5: unifi (Unifi_GetClientInsights_Send) - executed.
2026.06.12 11:16:58 5: unifi (Unifi_GetClientInsights_Receive) - executed.
2026.06.12 11:16:58 5: unifi (Unifi_GetClientInsights_Receive) - Failed (without message)! - state:''
2026.06.12 11:16:58 5: unifi (Unifi_GetVoucherList_Send) - executed.
2026.06.12 11:16:58 5: unifi (Unifi_GetVoucherList_Receive) - executed.
2026.06.12 11:16:58 5: unifi (Unifi_GetVoucherList_Receive) - Failed (without message)! - state:''
2026.06.12 11:16:58 5: unifi (Unifi_GetWlans_Send) - executed.
2026.06.12 11:16:58 5: unifi (Unifi_GetWlans_Receive) - executed.
2026.06.12 11:16:58 5: unifi (Unifi_GetWlans_Receive) - Failed (without message)! - state:''
2026.06.12 11:16:58 5: unifi (Unifi_GetClients_Send) - executed.
2026.06.12 11:16:59 5: unifi (Unifi_GetClients_Receive) - executed.
2026.06.12 11:16:59 5: unifi (Unifi_GetClients_Receive) - Failed (without message)! - state:''
2026.06.12 11:16:59 5: unifi (Unifi_GetHealth_Send) - executed.
2026.06.12 11:16:59 5: unifi (Unifi_GetHealth_Receive) - executed.
2026.06.12 11:16:59 5: unifi (Unifi_GetHealth_Receive) - Failed (without message)! - state:''
2026.06.12 11:16:59 5: unifi (Unifi_ProcessUpdate) - executed after 0.4984 seconds.
2026.06.12 11:16:59 5: unifi (Unifi_SetHealthReadings) - executed.
2026.06.12 11:16:59 5: unifi (Unifi_SetClientReadings) - executed.

Meine Vermutung wäre demnach, dass nach einer gewissen Zeit ein erneutes Login nötig ist. Und dass sich das kürzlich bei Unifi geändert hat.
Ich verwende eine Cloud Gateway Ultra mit Network Version 10.4.57. Ich verwende für FHEM einen dedizierten Admin User mit Local Access Rights in Unifi.

@KyleK: Du hast ja offenbar auch die Fehler im Log mit dieser Version - werden deine Werte überhaupt noch aktualisiert?
Irgendwelche Ideen? Ähnliche Probleme?

Wolle02

Die Symptome (keine Aktualisierung der Readings mehr) sind bei mir die gleichen nur die Fehlermeldung im Log ist bei mir anders. Aber da dieses Modul scheinbar auch schon länger nicht mehr gepflegt wird, habe ich keine große Hoffnung, dass es hier zeitnah zu einer Abhilfe kommt.  :(

Als Workaround habe ich mir Node-Red im Docker erstellt und rufe die Unifi Werte dort ab. Dort funktioniert der Login mit einem API-Key, der auf der UDM erstellt werden kann. Das scheint jetzt der offizielle Weg zu sein.
Jedenfalls funktioniert das gut und die benötigten Werte pushe ich mir per MQTT nach Fhem.

Gary

Ich habe ein wenig gesucht und mehrere Beiträge der Unifi Community und auf Reddit gefunden, die die eine kürzliche Änderung des Sessions Timeouts bestätigen und mehrheitlich das nicht gut finden. Wie diesen hier: New, and very frequent requests to reauthenticate

Für das Modul bedeutet das entweder eine Lösung zu finden, regelmäßig oder bei Bedarf neu einzuloggen oder darauf zu hoffen, dass Unifi das wieder zurück ändert (in meiner persönlichen Erfahrung eher unwahrscheinlich). Für mich hat das Modul bisher sehr gut funktioniert.

Ralli

Ich habe in der 74_Unifi.pm in der Zeile 967 jetzt quick and dirty einfach eine Codezeile eingefügt, die bewirkt, dass stumpf nach einer Stunde ein erneutes Login stattfindet. Mal schauen, ob dadurch die Problematik behoben oder umgangen wird.

sub Unifi_Login_Receive($) {
    my ($param, $err, $data) = @_;
    my ($name,$self,$hash) = ($param->{hash}->{NAME},Unifi_Whoami(),$param->{hash});
    Log3 $name, 5, "$name ($self) - executed.";
   
    if ($err ne "") {
        Log3 $name, 5, "$name ($self) - Error while requesting ".$param->{url}." - $err";
    }
    elsif ($data ne "" ) {
        if ($param->{code} == 200 || $param->{code} == 400 || $param->{code} == 401 || $param->{code} == 200) {
            eval { $data = decode_json($data); 1; } or do { $data = { meta => {rc => 'error.decode_json', msg => $@} }; };
           
            if (($data->{meta}->{rc} && $data->{meta}->{rc} eq "ok") || ($data->{username} && $data->{username} ne '')) {
                Log3 $name, 5, "$name ($self) - state=ok";
                $hash->{httpParams}->{header} = '';
                my $cookie = '';
                my $csrfToken = '';
                for (split("\r\n",$param->{httpheader})) {
                    if(/^Set-Cookie/) {
                        m/Set-Cookie:\s(.*)$/i;
                        $cookie = $1;
                        Log3 $name, 5, "$name ($self) - got Cookie: $cookie";
                    }
                    if(m/^X-CSRF-Token/i) {
                        m/X-CSRF-Token:\s?(.*)(\r\n|'|$)/i;
                        $csrfToken = $1;
                        Log3 $name, 5, "$name ($self) - got X-CSRF-Token: $csrfToken";
                    }
                }
                $hash->{httpParams}->{header} = { 'X-CSRF-Token' => $csrfToken, 'Cookie' => $cookie } if(($cookie ne '') || ($csrfToken ne ''));
                if($hash->{httpParams}->{header} ne '') {
                    $hash->{httpParams}->{header} =~ s/\\r\\n$//;
                    Log3 $name, 3, "$name ($self) - Login successfully!  $hash->{httpParams}->{header}";
                    Unifi_CONNECTED($hash,'connected');
                    Unifi_GetSysinfo_Send($hash);
                    Unifi_UsergroupRestJson_Send($hash);
                    #Unifi_DoUpdate($hash);
                    InternalTimer(time()+$hash->{unifi}->{interval}, 'Unifi_DoUpdate', $hash, 0);
                    InternalTimer(time()+3600, 'Unifi_Login_Send', $hash, 0);
                    return undef;
                } else {
                    $hash->{httpParams}->{header} = undef;
                    Log3 $name, 5, "$name ($self) - Something went wrong, login seems ok but no cookies received.";
                }
            }
            else {
                if (defined($data->{meta}->{msg})) {
                    if ($data->{meta}->{msg} eq 'api.err.Invalid') {
                        Log3 $name, 1, "$name ($self) - Login Failed! Invalid username or password!"
                                      ." - state:'$data->{meta}->{rc}' - msg:'$data->{meta}->{msg}'";
                    } elsif ($data->{meta}->{msg} eq 'api.err.LoginRequired') {
                        Log3 $name, 1, "$name ($self) - Login Failed! - state:'$data->{meta}->{rc}' - msg:'$data->{meta}->{msg}' -"
                                      ." This error while login indicates that you use an unsupported UnifiController-version";
                    } else {
                        Log3 $name, 5, "$name ($self) - Login Failed! - state:'$data->{meta}->{rc}' - msg:'$data->{meta}->{msg}'";
                    }
                } else {
                    Log3 $name, 5, "$name ($self) - Login Failed (without msg)! - state:'$data->{meta}->{rc}'";
                }
                $hash->{httpParams}->{header} = undef;
            }
        } else {
            Log3 $name, 5, "$name ($self) - Failed with HTTP Code $param->{code}!";
        }
    } else {
        Log3 $name, 5, "$name ($self) - Failed because no data was received!";
    }
    Log3 $name, 5, "$name ($self) - Connect/Login to Unifi-Controller failed. Will try again after interval...";
    Unifi_CONNECTED($hash,'disconnected');
    InternalTimer(time()+$hash->{unifi}->{interval}, 'Unifi_Login_Send', $hash, 0);
    return undef;
}
Gruß,
Ralli

Proxmox 9 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte OpenCCU (3.87.6.20260614) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.62), FBDECT, Siri und Alexa

KyleK

Ich hab einen anderen Weg gewählt:

Mit dem beigefügten Patch erhält das Modul ein Attribut `apiKey`.
Wenn dort ein in der Unifi OS Oberfläche generierter Api-Key hinterlegt wird, erfolgen danach alle API-Anfragen mit diesem Key, welcher kein Ablaufdatum hat.

Soweit funktioniert es bei mir gut, ich konnte noch keine Regressionen feststellen.

Achtung: Diese Variante ist wohl nur für UniFi OS-based consoles (UDM, UDR, UCG, UX, UDW, UCG-Ultra, UniFi OS Server) verfügbar.

Ich habe mich an dieser Seite orientiert: https://github.com/uchkunr/unifi-best-practices#authentication
FHEM on Futro S940
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

Ralli

Gute Idee und danke für den Patch!

Ich habe die von mir damals abgeänderte Version um deinen Patch ergänzt, somit sollte die herkömmliche Login-Methode mit stündlich erneuertem Login und nun auch die API-Key-Methode funktionieren.

Anbei die komplette 74_Unifi.pm und der Patch gegenüber der im SVN befindlichen Version.

Eine wichtige Info noch für die API-Key-Methode:

ZitatImportant Notes on User RightsRole Requirement:

  • You cannot create an API key using a "View Only" or "Full Management" account; the account must be a Super Admin.

Bedeutet, dass FHEM bzw. das Modul damit nahezu volle Rechte auf/in die/der Konsole hat.
Gruß,
Ralli

Proxmox 9 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte OpenCCU (3.87.6.20260614) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.62), FBDECT, Siri und Alexa

Mr.X

Hi,

hab nen UDM SE und exakt das gleiche Problem festgestellt das mich hierher geführt hat. Mit widerstrebt es etwas den FHEM user in Unifi zum SuperUser zu machen... aber einen Tod muss ich wohl sterben...

Ich hab aber weder auf ui.com eine Option API-Keys, noch lokal unter Control Plane einen Reiter Integrations...wüsste im Moment nicht wie ich den API-key anlegen könnte. Muss ich erst einen Super-Admin haben dass das geht?

Update:
Gemini wusste wo ich die Integration finde... jetzt muss ich mich nur noch zum Super -Admin durchringen- danke für den Patch

roadghost

Es scheint ja in Planung seitens UI zu sein, die normale (self hosted) Network Application auslaufen zu lassen.

Ich habe mich mal an die Installation des Unifi OS Server gemacht, dort ist die Network Application enthalten. Läuft gut, und bietet u.a. TelePort.

Leider schaffe ich es nicht, das Unifi-Modul zu einer Verbindung geschweigedenn zu einem LogIn zu bewegen.

Ich vermute den Fehler nicht im Modul, sondern an dem Umstand, dass das Unifi OS in einem Container (PodMan) auf meinem Ubuntu-Server läuft.

Irgendwie schafft es / darf es FHEM nicht, sich mit der Instanz unter PodMan zu verbinden. Ich habe über PRESENCE einen PING-Check gemacht, die IP als solche ist pingbar, aber mit dem Port 11443 der Network Application unter Unifi OS nicht erreichbar.

Kennt sich jemand voin euch damit aus, und kann mir Hilfestellung geben?
NUC/Ubuntu 22.04 m. FHEM, div. Tasmota-Steckdosen, HMCFGUSB-2 für 12x HM-CC-RT-DN + 8x HM-TC-IT-WW
Rademacher DuoFern für 12 Jalousien, JeeLink für LaCrosse Temp.Sensor, WLAN-smart-Plugs, 
NUKI smartlock, 2xIP-CAM, Pylontech Speicher + Sungrow WR, Unifi-AP´s + Controller auf weiterem NUC

Gisbert

Hallo zusammen,

ich habe noch ein altes USG-3P und eine UniFi Network Application in einer Proxmox VM am laufen.
Wäre es nicht sinnvolle umzusteigen auf ein Ubiquiti Cloud Gateway Ultra? Da braucht man keine VM oder LXC für den Controller.
Wie ist eure Meinung zum Umstieg oder lieber das alte USG-3P weiter benutzen und dafür den UniFi OS Server in einem LXC laufen lassen? Letzteres evtl. nur als Zwischenlösung bis zum Austausch der Hardware.

Viele Grüße Gisbert
Proxmox | UniFiRHASSPY | DEYE | JK-BMS | ESPHome | Panasonic Heishamon | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Rauchmelder FA21/22RF

Ralli

Hat alles seine Vor- und Nachteile. Wenn dir jetzt die Hardware abraucht, hast du trotzdem noch den Controller mit der Konfiguration sicher am Laufen - wobei das nur dann wirklich von Interesse ist, wenn auch einen Zoo mit genügend anderen Ubiquite-Devices hast, die gesteuert werden müssen (Accesspoints z.B.). Und es spricht wahrscheinlich nichts dagegen, das alte Schätzchen weiter zu betreiben, bis es EOS/EOL oder kaputt ist.

Ich würde es so lassen wie es ist, bis der ich-will-aber-Effekt größer wird.
Gruß,
Ralli

Proxmox 9 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte OpenCCU (3.87.6.20260614) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.62), FBDECT, Siri und Alexa