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

justme1968

hallo claudiu,

wie besprochen habe ich die version mit den poe erweiterungen jetzt eingecheckt.

wenn ich dazu komme schaue ich mir die anderen wünsche auch mal an und poste hier wieder eine test version. ich weiss aber nicht wann das sein wird.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rapster

Hi Andre,

danke dir, bin die Woche in DE und probiere es aus.
Will auch so einen Switch :)


Motivierte linke Hände

Hi, habe gerade das unifi-Modul aktiviert, funktioniert soweit super, vielen Dank für die Arbeit, die da von einigen hineingesteckt wurde!

Was mir aufgefallen ist: Der ziemlich am Anfang gepostete Perl-Code für die PRESENCE-Funktion funktioniert nicht:

Zitat von: rapster am 23 August 2015, 19:39:03
oder 3 Minuten mit einem notify:
define ntfy_unifi_presence notify myUnifiController:MyClient_last_seen:.* {
if (time() - time_str2num($EVENT) > 180) {
fhem("set dummy disconnected");
} else {
fhem("set dummy connected");
}
}

$EVENT enthält ja auch das Reading. Hier klappt es nur mit:

define ntfy_unifi_presence notify myUnifiController:MyClient_last_seen:.* {
if (time() - time_str2num($EVTPART1." ".$EVTPART2) > 180) {
fhem("set dummy disconnected");
} else {
fhem("set dummy connected");
}
}


Und dann noch eine Frage: Könnte man in das Modul das Blocken und Entblocken einzelner Geräte aufnehmen? Derzeit läuft das noch über ein Bash-Skript, aber ich denke, das würde in diesem Modul viel Sinn machen für alle die, die die elterliche Zugangskontrolle nicht über das Abschalten des WLANs, sondern das Blocken einzelner Geräte umsetzen. :)

Die Kommandos dazu für den stamgr sind block-sta und unblock-sta. D.h. es sollte sich wohl durch folgende Funktion einbauen lassen:

sub Unifi_BlockClient_Send($@) {
    my ($hash,@clients) = @_;
    my ($name,$self) = ($hash->{NAME},Unifi_Whoami());
    Log3 $name, 5, "$name ($self) - executed with count:'".scalar(@clients)."', ID:'".$clients[0]."'";

    my $id = shift @clients;
    HttpUtils_NonblockingGet( {
                 %{$hash->{httpParams}},
        url      => $hash->{unifi}->{url}."cmd/stamgr",
        callback => \&Unifi_BlockClient_Receive,
        clients  => [@clients],
        data     => "{'mac': '".$hash->{clients}->{$id}->{mac}."', 'cmd': 'block-sta'}",
    } );

    return undef;
}
###############################################################################
sub Unifi_BlockClient_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 "") {
        Unifi_ReceiveFailure($hash,{rc => 'Error while requesting', msg => $param->{url}." - $err"});
    }
    elsif ($data ne "") {
        if ($param->{code} == 200 || $param->{code} == 400  || $param->{code} == 401) {
            eval { $data = decode_json($data); 1; } or do { $data = { meta => {rc => 'error.decode_json', msg => $@} }; };

            if ($data->{meta}->{rc} eq "ok") {
                Log3 $name, 5, "$name ($self) - state:'$data->{meta}->{rc}'";
            }
            else { Unifi_ReceiveFailure($hash,$data->{meta}); }
        } else {
            Unifi_ReceiveFailure($hash,{rc => $param->{code}, msg => "Failed with HTTP Code $param->{code}."});
        }
    }

    if (scalar @{$param->{clients}}) {
        Unifi_BlockClient_Send($hash,@{$param->{clients}});
    }

    return undef;
}


bzw.

sub Unifi_UnblockClient_Send($@) {
    my ($hash,@clients) = @_;
    my ($name,$self) = ($hash->{NAME},Unifi_Whoami());
    Log3 $name, 5, "$name ($self) - executed with count:'".scalar(@clients)."', ID:'".$clients[0]."'";

    my $id = shift @clients;
    HttpUtils_NonblockingGet( {
                 %{$hash->{httpParams}},
        url      => $hash->{unifi}->{url}."cmd/stamgr",
        callback => \&Unifi_UnblockClient_Receive,
        clients  => [@clients],
        data     => "{'mac': '".$hash->{clients}->{$id}->{mac}."', 'cmd': 'unblock-sta'}",
    } );

    return undef;
}
###############################################################################
sub Unifi_UnblockClient_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 "") {
        Unifi_ReceiveFailure($hash,{rc => 'Error while requesting', msg => $param->{url}." - $err"});
    }
    elsif ($data ne "") {
        if ($param->{code} == 200 || $param->{code} == 400  || $param->{code} == 401) {
            eval { $data = decode_json($data); 1; } or do { $data = { meta => {rc => 'error.decode_json', msg => $@} }; };

            if ($data->{meta}->{rc} eq "ok") {
                Log3 $name, 5, "$name ($self) - state:'$data->{meta}->{rc}'";
            }
            else { Unifi_ReceiveFailure($hash,$data->{meta}); }
        } else {
            Unifi_ReceiveFailure($hash,{rc => $param->{code}, msg => "Failed with HTTP Code $param->{code}."});
        }
    }

    if (scalar @{$param->{clients}}) {
        Unifi_BlockClient_Send($hash,@{$param->{clients}});
    }

    return undef;
}


Danke, Christian
FHEM 6 in einer KVM VM mit Ubuntu
HM-CFG-USB2, 2xHM-CFG-HMLAN, HM-HMUARTLGW mit 100+ HomeMatic Devices, Geofencing, Fritzbox, Unifi, HUE, Harmony-Hub, Denon-Receiver-Modul, Calendar, GardenaSmartDevice, Shelly, MQTT (zigbee2mqtt, Tasmota und Shelly) und ein wenig 1Wire.

justme1968

presence kannst du inzwischen auch mit einem 'echten' PRESENCE device machen:define <name> PRESENCE function {ReadingsVal('unifi','mein-iPhone','') eq "connected" ? 1 : 0} 60 60

das hast den vorteil das man z.b. auch die threshold attribute für die hysterese verwenden kann und auch die roommate integration einfacher ist.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Wuppi68

Zitat von: justme1968 am 01 Juli 2017, 11:26:32
presence kannst du inzwischen auch mit einem 'echten' PRESENCE device machen:define <name> PRESENCE function {ReadingsVal('unifi','mein-iPhone','') eq "connected" ? 1 : 0} 60 60

das hast den vorteil das man z.b. auch die threshold attribute für die hysterese verwenden kann und auch die roommate integration einfacher ist.

Danke für den Tipp .... jetzt ist meine "alte" Funktion auch weg :-)
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

Motivierte linke Hände

Zitat von: Eisix am 16 Mai 2017, 11:03:59
gibt's was neues bzgl. Ein/Aus Gast WLAN und password setzen?

Ich weiß nicht, ob sich das schonmal jemand angeschaut hat. Wenn man in Firebug so beobachtet, was passiert, wenn man ein WLAN (de-)aktiviert, dann ist das wohl ein komplizierteres Unterfangen. Man muss wohl erst für die richtige ID die Daten des WLANs auslesen, dann den richtigen Parameter ändern und anschließend wieder alles zurückschreiben.

Möglicherweise könnte man alternativ ein WLAN per AP abschalten, aber da zeigte Firebug bei mir interessanterweise gar nichts an...

Also: Ich hätte diese Funktion auch gerne, aber im Gegensatz zum (Ent-)Blocken von einzelnen Usern (Code siehe oben) habe ich hier keine umsetzbare Idee.

Gruß, Christian
FHEM 6 in einer KVM VM mit Ubuntu
HM-CFG-USB2, 2xHM-CFG-HMLAN, HM-HMUARTLGW mit 100+ HomeMatic Devices, Geofencing, Fritzbox, Unifi, HUE, Harmony-Hub, Denon-Receiver-Modul, Calendar, GardenaSmartDevice, Shelly, MQTT (zigbee2mqtt, Tasmota und Shelly) und ein wenig 1Wire.

Michi240281

Hallo zusammen,

das hat an sich nichts mit Fhem zu tun, aber vllt kann mir ja einer von Euch dennoch helfen:

Ich habe den Unifi-Controller 5.2.9 auf einer VM mit Ubuntu 16.04 LTS laufen (wo auch mein Fhem läuft). Erst ist mir das gar nicht aufgefallen, aber dann doch, weil ich mich gewundert hatte, warum ich am iPhone kein WLAN hatte, als ich die VM mal rebootet habe. Mein Problem: Wenn der Controller nicht läuft, schaltet sich das WLAN ab und meine beiden APs blinken grün. Jmd ne Idee dazu?

Besten Dank im vorraus
Michael
FHEM 5.6 auf RPi2 / HM LAN Adapter / diverse HM-Devices
FHEM-Remote-App
QNAP 419P / Onkyo TX-SR 608
DM500HD / GM Spark One
Sony 52HX905

Motivierte linke Hände

Vielleicht die APs nochmal provisionieren? Hier funktionieren sind grundsätzlich auch weiter, wenn der Controller nicht mehr läuft.

Oder hast Du irgendwelche Funktionen aktiviert, die zwingend den Controller benötigen?
FHEM 6 in einer KVM VM mit Ubuntu
HM-CFG-USB2, 2xHM-CFG-HMLAN, HM-HMUARTLGW mit 100+ HomeMatic Devices, Geofencing, Fritzbox, Unifi, HUE, Harmony-Hub, Denon-Receiver-Modul, Calendar, GardenaSmartDevice, Shelly, MQTT (zigbee2mqtt, Tasmota und Shelly) und ein wenig 1Wire.

ChrisW

hat sich erledigt :)
Raspberry PI3 mit allem möglichen.

roedert

Falls der Autor demnächst nochmal das Modul überarbeitet, wäre es prima wenn auch noch die Systemdaten (Temperatur, Energieverbrauch, Lüfterstufe etc) der Switche als reading übernommen wird.

Schonmal einen ganz großen Dank ... auch rückwirkend für das tolle Modul!




der-Lolo

Hallo Comunity,
ich habe ein problem beim connecten mit dem Unifi Modul.
Ich bin mit FHEM auf einem Cubietruck - auf dem läuft auch der Unifi Controller 5.5.20.
Der Controller ist per Browser erreichbar, das Unifi Device in FHEM lässt sich aber nicht verbinden, es meldet im state "disconnected"
Ich habe verbose auf 5 gestellt und im Log geschaut...
2017.08.27 09:22:16 5: UnifiController (Unifi_Login_Receive) - executed.
2017.08.27 09:22:11 5: UnifiController (Unifi_Login_Send) - executed.
2017.08.27 09:21:41 5: UnifiController (Unifi_Login_Receive) - Connect/Login to Unifi-Controller failed. Will try again after interval...
2017.08.27 09:21:41 5: UnifiController (Unifi_Login_Receive) - Error while requesting https://192.168.1.3:8443/api/login - https://192.168.1.3:8443/api/login: Can't connect(2) to https://192.168.1.3:8443:  SSL wants a read first
2017.08.27 09:21:41 5: UnifiController (Unifi_Login_Receive) - executed.
2017.08.27 09:21:36 5: UnifiController (Unifi_Login_Send) - executed.
2017.08.27 09:21:36 5: UnifiController (Unifi_DoUpdate) - executed.
2017.08.27 09:21:36 5: UnifiController (Unifi_Notify) - executed. - Remove all Timers & Call DoUpdate...
2017.08.27 09:21:35 5: UnifiController: Defined with url:https://192.168.1.3:8443/api/s/default/, interval:30, version:4
2017.08.27 08:47:50 1: PERL WARNING: Use of uninitialized value $poeState in concatenation (.) or string at ./FHEM/74_Unifi.pm line 351.
2017.08.27 08:39:49 0: Server started with 49 defined entities (fhem.pl:14945/2017-08-22 perl:5.020002 os:linux user:fhem pid:9379)
2017.08.27 08:39:49 0: Featurelevel: 5.8
2017.08.27 08:39:48 1: Including ./log/fhem.save
2017.08.27 08:39:46 1: Including fhem.cfg
2017.08.27 08:39:43 0: Server shutdown


Andre gab mir den Tip mal bei die Perl Versionen zu schauen, aber auch hier komme ich nicht weiter...
root@cubietruck:~# perl -v

This is perl 5, version 20, subversion 2 (v5.20.2) built for arm-linux-gnueabihf-thread-multi-64int
(with 97 registered patches, see perl -V for more detail)

Copyright 1987-2015, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

root@cubietruck:~# apt-get install libio-socket-ssl-perl
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libio-socket-ssl-perl is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.




Hat jemand eine Idee woran es liegt?
Wäre toll wenn ich das Modul ans laufen bekomme...

bene_dicere

Vorweg mir gefällt das Modul wirklich super und ein riesen Dank an alle die hier so fleißig mitarbeiten.

Zitat von: Motivierte linke Hände am 03 Juli 2017, 10:55:57
Ich weiß nicht, ob sich das schonmal jemand angeschaut hat. Wenn man in Firebug so beobachtet, was passiert, wenn man ein WLAN (de-)aktiviert...

...

Also: Ich hätte diese Funktion auch gerne, aber im Gegensatz zum (Ent-)Blocken von einzelnen Usern (Code siehe oben) habe ich hier keine umsetzbare Idee.

Gruß, Christian


Was war denn mit dem Ansatz "disableSsid"?

Zitat von: rapster am 15 November 2016, 18:17:44
....
disableSsid  <AP>_ALL_<SSID>
disableSsid  ALL_ALL_<SSID>
disableSsid ALL_2G|5G_<SSID>
disableSsid ALL_ALL_ALL
disableSsid ALL_2G|5G_ALL

Im KNX Forum gibt es ein Modul dazu, eventuell ist es möglich mit Hilfe diesem eine gangbare Möglichkeit zu finden.
Zitathttps://service.knx-user-forum.de/?comm=download&id=19000728

Ich habe mir auch mal angesehen was beim setzen bzw entfernen des Haken bei Drahtlose-Netzwerke im Controller passiert.

Wie hier beschrieben:
Zitat von: rapster am 29 April 2017, 19:29:12
....
Hier zwei Bilder wie der Beispiel CMD und URL im Firefox mit F12 -> Netzwerkanalyse nach Klick auf den Beispiel "Unset-Locate Button" herausgefunden werden kann.

Vorweg möchte ich noch sagen, dass meine Programmierkentnisse leider nicht wirklich gut sind  :(
Sind denn alle Parameter die gesendet werden notwendig um das Drahtlose-Netzwerk ein bzw aus zu schalten? Im direkten Vergleich ändert sich nur eine Zeile

enabled: false
enabled: true


Anschließend folgen noch einige Werte die ich nicht direkt zuordnen konnte, aber auch Werte die in FHEM schon bekannt sind bzw die Erweiterten Einstellungen des Drahtlos-Netzwerk beschreiben.
Wäre dankbar wenn ihr sonst noch Tipps/Hilfestellungen für mich habt, würde gerne probieren ob es keine Möglichkeit gibt die Netzwerke einfach in FHEM zu starten/beenden.

bacanol

Moin Leute,

ich habe das gleiche Problem mit dem Unifi Controller 5.5.20 wie der-Lolo. Habe auch schon etwas herumprobiert aber leider ohne Erfolg. Da das Modul in der Hilfe sagt, es sei für Version 3 und 4 geschrieben, wird Version 5 wahrscheinlich nicht mehr ganz kompatibel sein, oder es liegt ggf. an der SSL Verbindung, die im neueren Modul ggf. alte SSL Versionen (v2,v3, TLSv1) abgeschaltet hat.

Ich würde gern zu einer Lösung beitragen, bin mir aber nicht sicher, wer das Modul entwickelt hat und ob hier die Möglichkeit der gemeinsamen Lösungsfindung möglich ist?

Falls ja, bitte einfach kurz melden!

Vielen Dank und ein schönes WE!

Zitat von: der-Lolo am 27 August 2017, 10:06:29
Hallo Comunity,
ich habe ein problem beim connecten mit dem Unifi Modul.
Ich bin mit FHEM auf einem Cubietruck - auf dem läuft auch der Unifi Controller 5.5.20.
Der Controller ist per Browser erreichbar, das Unifi Device in FHEM lässt sich aber nicht verbinden, es meldet im state "disconnected"
Ich habe verbose auf 5 gestellt und im Log geschaut...
2017.08.27 09:22:16 5: UnifiController (Unifi_Login_Receive) - executed.
2017.08.27 09:22:11 5: UnifiController (Unifi_Login_Send) - executed.
2017.08.27 09:21:41 5: UnifiController (Unifi_Login_Receive) - Connect/Login to Unifi-Controller failed. Will try again after interval...
2017.08.27 09:21:41 5: UnifiController (Unifi_Login_Receive) - Error while requesting https://192.168.1.3:8443/api/login - https://192.168.1.3:8443/api/login: Can't connect(2) to https://192.168.1.3:8443:  SSL wants a read first
2017.08.27 09:21:41 5: UnifiController (Unifi_Login_Receive) - executed.
2017.08.27 09:21:36 5: UnifiController (Unifi_Login_Send) - executed.
2017.08.27 09:21:36 5: UnifiController (Unifi_DoUpdate) - executed.
2017.08.27 09:21:36 5: UnifiController (Unifi_Notify) - executed. - Remove all Timers & Call DoUpdate...
2017.08.27 09:21:35 5: UnifiController: Defined with url:https://192.168.1.3:8443/api/s/default/, interval:30, version:4
2017.08.27 08:47:50 1: PERL WARNING: Use of uninitialized value $poeState in concatenation (.) or string at ./FHEM/74_Unifi.pm line 351.
2017.08.27 08:39:49 0: Server started with 49 defined entities (fhem.pl:14945/2017-08-22 perl:5.020002 os:linux user:fhem pid:9379)
2017.08.27 08:39:49 0: Featurelevel: 5.8
2017.08.27 08:39:48 1: Including ./log/fhem.save
2017.08.27 08:39:46 1: Including fhem.cfg
2017.08.27 08:39:43 0: Server shutdown


Andre gab mir den Tip mal bei die Perl Versionen zu schauen, aber auch hier komme ich nicht weiter...
root@cubietruck:~# perl -v

This is perl 5, version 20, subversion 2 (v5.20.2) built for arm-linux-gnueabihf-thread-multi-64int
(with 97 registered patches, see perl -V for more detail)

Copyright 1987-2015, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

root@cubietruck:~# apt-get install libio-socket-ssl-perl
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libio-socket-ssl-perl is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.




Hat jemand eine Idee woran es liegt?
Wäre toll wenn ich das Modul ans laufen bekomme...

Motivierte linke Hände

Also hier funktioniert es mit der 5.5.20. An einer generellen Inkompatibilität mit der Version kann es nicht liegen.

Wie hast Du denn den Controller in fhem definiert?
FHEM 6 in einer KVM VM mit Ubuntu
HM-CFG-USB2, 2xHM-CFG-HMLAN, HM-HMUARTLGW mit 100+ HomeMatic Devices, Geofencing, Fritzbox, Unifi, HUE, Harmony-Hub, Denon-Receiver-Modul, Calendar, GardenaSmartDevice, Shelly, MQTT (zigbee2mqtt, Tasmota und Shelly) und ein wenig 1Wire.

justme1968

bei mir funktioniert es problemlos mit 5.5.x und 5.6.x

es liegt definitiv nicht an der controller version.

ich tippe auf die umgebung auf dem controller rechner oder auf perl seite und würde versuchen beides mal auf einem normalen intel system probieren.

welches java ist auf dem controller rechner installiert?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968