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

Maui

@wuehler: ansich denke ich fast, dass ein Wiki-Artikel überflüssig ist, da die commandref ja gepflegt ist und die Einrichtung ansich ja echt easy ist. Aber vielleicht habe ich bald mal die Muße, will aber nix versprechen. Eine Hilfe bei Standard Problemen finde ich immer schwierig, vor allem wenn man Sie nur von Dritten aus dem Thread liest.
@australien: bei mir klappt das mit connected super, muss bei dir irgendwas krud sein.
EDIT: @Wuehler: Ist zwar eine Winzigkeit, aber ich würde dem Reading mit dem "UC_newClients" ein - voranstellen, dann findet man es auch schneller neben dem Rest.

Maui

Hey @Wuehler: Ich nochmal  ;)
Ich hab bzgl. der Auslastung mal im Modul geguckt, und es gab ja mal die Utilization.
Allerdings scheint die mittlerweile in der API von Unifi verschoben worden zu sein.
Ich hab dazu mal etwas im Modul gebastelt.
Habe mich dabei an die essid vom Stil her gehalten. Man könnte natürlich auch die Auslastung der einzelnen Kanäle als einzelne Readings anzeigen.
Alternativ könnte man auch drüber nachdenken, die Readings eines WLAN-Geräts in ein Reading zu packen, allerdings würde ich eine Semikolon einem Komma (als Trennzeichen) stark vorziehen.
Würde immerhin die Readings an der Stelle um Faktor 7 minimieren. Aber gleichzeitig einige User abhängen bzw. diese müssten dann wieder mit userReadings arbeiten, aber könnten sich gezielt den für sie wichtigen Part rauspicken.
Was mir noch im Modul aufgefallen ist, ist accespoint (statt accesspoint). Ist klein-Kram, aber wenn ein 3. was am Code ändert, tippt er es bestimmt falsch ein ;)
Wenn du magst, kannst du meinen Code gerne noch ein wenig anpassen und dann einchecken. Ich persönlich find die Auslastung ganz interessant, zumal man in der iOS App sich die Auslastung nicht als Graph anzeigen lassen kann (Browser schon) und so relativ einfach eine telegram-Nachricht bauen kann, wenn das Netz überlastet ist.
###############################################################################
sub Unifi_SetAccesspointReadings($) {
    my ($hash) = @_;
    my ($name,$self) = ($hash->{NAME},Unifi_Whoami());
    Log3 $name, 5, "$name ($self) - executed.";

    my ($apName,$apRef,$essid);
    my $utiliz;
    for my $apID (keys %{$hash->{accespoints}}) {
        $essid = '';
        $utiliz = '';
        $apRef = $hash->{accespoints}->{$apID};
        $apName = ($apRef->{name}) ? $apRef->{name} : $apRef->{ip};

        if (defined $apRef->{vap_table} && scalar @{$apRef->{vap_table}}) {
            for my $vap (@{$apRef->{vap_table}}) {
                $essid .= makeReadingName($vap->{essid}).',';
            }
            $essid =~ s/.$//;
        } else {
            my $essid = 'none';
        }

        if (defined $apRef->{'radio_table_stats'} ) {
            for my $rts (@{$apRef->{'radio_table_stats'}}) {
                $utiliz .= makeReadingName($rts->{'cu_total'}).',';
            }
            $utiliz =~ s/.$//;
        } else {
            my $utiliz = 'none';
        }

        readingsBulkUpdate($hash,'-AP_'.$apName.'_state',($apRef->{state} == 1) ? 'ok' : 'error');
        readingsBulkUpdate($hash,'-AP_'.$apName.'_clients',$apRef->{'num_sta'});
        if( $apRef->{type} eq 'uap' ) {
          readingsBulkUpdate($hash,'-AP_'.$apName.'_essid',$essid);
          readingsBulkUpdate($hash,'-AP_'.$apName.'_utilization',$utiliz);
#          readingsBulkUpdate($hash,'-AP_'.$apName.'_utilizationNA',$apRef->{'na_cu_total'}) if( defined($apRef->{'na_cu_total'}) );
#          readingsBulkUpdate($hash,'-AP_'.$apName.'_utilizationNG',$apRef->{'ng_cu_total'}) if( defined($apRef->{'ng_cu_total'}) );
        }
        readingsBulkUpdate($hash,'-AP_'.$apName.'_locate',(!defined $apRef->{locating}) ? 'unknown' : ($apRef->{locating}) ? 'on' : 'off');
        my $poe_power;
        for my $port (@{$apRef->{port_table}}) {
          next if( !$port->{port_poe} );
          $poe_power += $port->{poe_power} if( defined($port->{poe_power}) );
        }
        readingsBulkUpdate($hash,'-AP_'.$apName.'_poePower', $poe_power) if( defined($poe_power) );

        # readingsBulkUpdate($hash,'-AP_'.$apName.'_guests',$apRef->{'guest-num_sta'});
        # readingsBulkUpdate($hash,'-AP_'.$apName.'_users',$apRef->{'user-num_sta'});
        # readingsBulkUpdate($hash,'-AP_'.$apName.'_last_seen',$apRef->{'last_seen'});
    }

    return undef;
}

australien

#722
Zitat von: Wuehler am 19 Juli 2018, 13:48:46
@australien: Evtl. musst du mal mit
set <myunifi> clear all
die Moduldaten zurücksetzen. Und dann beobachten, wann es das nächste Mal passiert und versuchen, es nachzustellen.

hab das Ganze versucht und den PI upgedatet, die aktuelle Version den Unifi Controllers ist nun 5.8.24-11016

sieht zur Zeit nicht schlecht aus, wobei die Zeitstempeln und der Inhalt des last_seen readings noch nicht mit dem Status des connected zusammen stimmen.
Werde das ganze weiter verfolgen.

zB. bei einer Systemzeit um 21.07.2018 19:33

HUAWEI_P9_lite_2017-fd983                   connected  2018-07-21 18:11:38
HUAWEI_P9_lite_2017-fd983_accesspoint Wohnzimmer 2018-07-21 18:11:38
HUAWEI_P9_lite_2017-fd983_essid          home 2018-07-21 18:11:38
HUAWEI_P9_lite_2017-fd983_hostname   HUAWEI_P9_lite_2017-fd983 2018-07-21 18:11:38
HUAWEI_P9_lite_2017-fd983_last_seen    2018-07-21 18:11:24 2018-07-21 18:11:38
HUAWEI_P9_lite_2017-fd983_snr            24 2018-07-21 18:11:38
HUAWEI_P9_lite_2017-fd983_uptime       266685 2018-07-21 18:11:38


danke für eure Hints
raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"

Wuehler

Hey australien,
Laufen fhem und der unificontroller auf demselben PI? Ist im Unificontroller evtl. Eine andere Zeitzone ausgewählt? Und wie groß ist dein Aktualisierungsintervall gesetzt?

EDIT: Das Reading last_seen erhält die Daten aus dem Unifi-Controller. Die angezeigte Zeit muss immer kleiner sein, als der Reading_Timestamp, da sich das Modul ja nur im festgelegten Intervall neue Daten zieht. Ausserdem braucht es für die Verarbeitung Zeit bis das Reading dann am Ende gesetzt wird.
Der connected-Status wird aus den gelieferten Daten interpretiert: Wenn Client-daten vom Unifi-Controller geliefert werden, dann = connected. Wenn dann irgendwann keine Daten mehr kommen wird der Client im Modul nicht gelöscht (wie im Unifi bei der Devices-Ansicht, man sieht den client dann nur noch in den Insights), sondern auf disconnected gesetzt.


VG,
Dirk

Wuehler

Hey Maui,

das fehlende - bei UC_newClients ist ein Bug. Werde ich mal fixen. So viele nutzen es ja noch nicht, daher ist bei euch der Anpassungsaufwand gering.

Deinen Code zur utilization habe ich mir angesehen. Die Readings kommen seit den ersten Versionen des Moduls mit NG und NA. Mich selbst haben sie bisher nicht interessiert. Warum entfernst du die alten Readings zu utilization? Was bedeutet das neue Reading (Doku für commandref) im Gegensatz zu den alten Readings?
Bei mir bleibt das neue Reading immer leer.

VG,
Dirk

der-Lolo

Wenn Du schon im Code wühlst - Wuehler

ich hab da noch was...
2018.07.21 21:40:17 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/74_UnifiSwitch.pm line 135.

Wuehler


der-Lolo


Wuehler

Ich kann es bei mir nicht nachstellen und brauche daher nen Tester. Einfach ins FHEM-Verzeichnis kopieren und in FHEMWEB "reload 74_UnifiSwitch.pm" aufrufen.

der-Lolo

Nachstellen kann ich es glaube ich auch nicht - ich vermute das es damit zusammenhängt das beim letztem FHEM neustart der switch nicht verbunden war.
Sorry FHEM läuft bei mir auf einer Synology DS ich tausche dort ungerne Dateien hin und her...

Maui

Hey Wuehler,

Ich hatte (fälschlicherweise) angenommen, dass das JSON im UNMS geändert wurde. Bei mir ist es nämlich genau anders herum, die alten readings mit NG und NA werden nicht geladen. Sonst hätte ich das ja gar nicht angefasst. Liegt aber vermutlich dann an meinen APs, habe die AP AC LR. Hat jemand anders die gleichen, und kann bestätigen, dass bei ihm die utilizationNA/NG nicht gefüllt wird?
Wenn es da wirklich Unterschiede gibt, könnte man ja auch über das Model gehen.

Wuehler

Hey Maui,

das mit der Änderung am json kann sein. Welche Controller-Version läuft bei dir? Ich bin noch auf 5.6.37.

Maui

Ich bin auf der neuesten. 5.8.24 dürfte das sein. Hab direkt am Controller per Browser den json angeschaut.

Wuehler

Jetzt brauche ich mal ne schnelle Unterstützung. Bei mir auf raspian wird kein update größer als 5.6.39 angeboten. Was musste man anpassen?

Maui

Hast du in deinen Sources
deb http://www.ubnt.com/downloads/unifi/debian stable ubiquiti
Habe das mit docker gemacht.

https://github.com/oznu/docker-unms/blob/master/README.md