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

Motivierte linke Hände

libjson-perl oder so aktualisiert, versehentlich deinstalliert, etc.?

Nur 'ne Vermutung.
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

such mal im forum es gibt diverse threads mit diesem problem.

bis jetzt war immer das HMCCU modul beteiligt.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

carlos

Tatsächlich, das HMCCU modul ist das Problem.
Hab ich diese Woche installiert und seit dem existiert das Problem.

Habe jetzt mal die Threads durchgelesen und auf den internen rpc server umgestellt.
Und siehe da, der  Fehler ist weg ,auch mein FHEM stürzt nicht mehr ab.
Mal sehen wie das weiter geht.

Danke für die Hilfe.
Gruß
Carlos
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

wagenkna

Hallo Carlos,

kannst du bitte mal genau beschreiben, was du gamcht hast. Ich versuche auch den UniFi Controller seit 2 Stunden einzubinden und bekomme die gleiche Fehlermeldung.

Besten Dank

Axel

update:06.10.2017 Controllersoftware auf dem Raspberry nocheinmal aufgespielt, seit dem läuft das Modul. :)
Homematic mit CCU2, Fensterkontakt, Thermostaten, Steckdosen, Regen.-Bewegung.-Wassermelder (76) Devices)
Raspberry2 und 3 Mit KNX, OWL, Fritzbox, Unifi, Luftmessungmodul

Mohrengemuse

Hallo,

erstmal ein großes Lob an den/die Entwickler, ein wirklich großartiges Modul.

Eine kleine Feature Anfrage habe ich trotzdem: ist es vielleicht möglich anstatt den Hostnamen in den Readings die vergebenen Alias aus der Controllersoftware zu nutzen? Oder ist das nicht möglich wg. erlaubten Leerzeichen etc?

Gruß Mohrengemuse

Mohrengemuse

Entschuldigt, ich hab mir meine Frage selbst beantwortet. Kaum entfernt man die Leerzeichen, werden die Alias verwendet. Top!

TottiToad

Hi,

ist es irgendwie in näherer Zukunft geplant das Modul mit GastWlan Steuerung und Voucher abfrage zu erweitern ? bzw. dies zu implementieren ?

Habe gerade auf Seite 19 nen Beitrag @Wuehler gefunden, wonach dies irgendwie schon möglich scheint.

Nur leider bin ich da noch nicht ganz durchgestiegen, was sich dafür installieren muss, bzw. welche Script wohin. (Werd ich mich später nochmal genauer ansehen)

Ebenso finde ich den Beitrag von @Motivierte linke Hände interessant. Verstehe nur noch nicht wie ich das Unifi Api installieren muss oder so ?

Dachte die Grundlage dieses Modul ist das UnifiApi ?


Ich hoffe ich habe nicht zu wirr geschrieben und ihr könnt mir weiterhelfen ?

Grüße & danke vorab
Totti

P.S.: Riesen Lob und Dank noch für das Modul. Ist einfach genial alle meine Unifi Produkte hiermit einzubinden. Top.
(Jetzt brachte ich nur noch was um meine zwei Nanaobeam AC einzubinden, um sie neu starten zu können ;) )


Wuehler

Hallo Totti,

für Modulentwicklung oder Erweiterung bin ich in fhem leider nicht fit genug bzw. habe zu wenig Zeit mich einzuarbeiten. Leider habe ich damals auch keinen Input für den besten Ansatz bekommen, wie man die Voucher-Thematik einbaut. D

Die von Motivierte Hände genutzte API ist (soweit ich auf die Schnelle sehe) "nur" ein php-Script. Dazu musst du php installieren (falls nicht schon vorhanden). Dann müsstest du von der console sein Script aufrufen können (wenn die Unifi-Php-API im selben Verzeichnis liegt).

Aus Tablet-UI kann man soetwas dann folgendermaßen aufrufen (hier ein perl-script). Der system-Befehl geht z.B. auch in einem notify:
  <div data-type="link"
       data-color="white"
       data-width="120" data-height="30"
       data-background-color="green"
       data-device="dummy_Vertretungsplan"
       data-set="doUpdate"
       data-set-on="inProgress"
       data-fhem-cmd="{system('/mount/DiskStation/runVertretungsplan.sh&');;return 0}"
       class="round centered">


Gruß,
Wühler

TottiToad

Hi,

Danke für die Rückmeldung !

Wie hast Du denn deine Scripts umgesetzt ? Also das mit der Unifi Api ?

Hast Du auf dem FHEM gerät unter ssh:
git clone https://github.com/Art-of-WiFi/UniFi-API-client.git

gecloned ?

Und dann wo wie dein Script eingefügt.
Für mich als Anfänger wäre ich dankbar für eine "kleine" Hilfestellung ;)

Grüße & Danke
Totti

Motivierte linke Hände

Genau, git clone der API, z.B. nach /usr/local/src/Unifi_API. Wobei Du eigentlich nur Client.php brauchst.

Dann lädst Du Dir aus dem Verzeichnis examples noch config_template.php herunter, passt dort drin Deine Daten an und benennst es in config.php um.

Und dann verwendest Du am einfachsten wohl folgendes Script:

<?php
/**
 * PHP UniFi API by Art of Wifi
 * usage example to disable SSID
 */

/**
 * include the config file (place your credentials etc. there if not already present)
 * see the config.template.php file for an example
 */
require_once('Client.php');
require_once(
'config.php');
$site_id          'default';

function 
PrintArgsAndExit($error) {
  echo 
"\n$error\n\n";
  echo 
"Gültige Argumente:\n\n";
  echo 
"  status SSID    -> Status des WLANs anzeigen\n";
  echo 
"  enable SSID    -> SSID aktivieren\n";
  echo 
"  disable SSID   -> SSID deaktivieren\n";
  echo 
"\nAbbruch.\n";
  exit(
1);
}

if (
$argc 2PrintArgsAndExit("Kommandozeilenargument fehlt.");
if (
$argc 3PrintArgsAndExit("SSID nicht angegeben.");

$command          strtolower($argv[1]);
$SSID             $argv[2];
if (
$command != "status" && $command != "enable" && $command != "disable"PrintArgsAndExit("Unbekanntes Kommandozeilenargument $command.");

/**
 * initialize the UniFi API connection class and log in to the controller and do our thing
 */
$unifi_connection = new UniFi_API\Client($controlleruser$controllerpassword$controllerurl$site_id$controllerversion);
$set_debug_mode   $unifi_connection->set_debug($debug);
$loginresults     $unifi_connection->login();

/**
 * read all configured SSIDs
 */
$data             $unifi_connection->list_wlanconf();
echo 
json_encode($dataJSON_PRETTY_PRINT);

/**
 * Look for correct SSIDs and store id
 */
$names            array_column($data'name');
echo 
"\nNames:\n";
print_r($names);
$wlan             array_search($SSID$names);


if (
$wlan === false) {
  echo 
"SSID $SSID nicht gefunden. Abbruch.\n";
  exit(
2);
} else {
  echo 
"\narray_search Ergebnis: ";
  echo 
$wlan;
  echo 
"\n";
}

$id               $data[$wlan]->_id;

if (
$command == "status") {

  if (
$data[$wlan]->enabled) {
    echo 
"enabled";
  } else {
    echo 
"disabled";
  }

} elseif (
$command == "disable") {

  
/**
   * Change "enabled" to "false" and write it back
   */

  
$data[$wlan]->enabled false;
  
$results          $unifi_connection->set_wlansettings_base($id$data[$wlan]);

  if (
$results == 1) {
    echo 
"disabled";
  } else {
    echo 
"error";
  }

} else {

  
/**
   * Change "enabled" to "true" and write it back
   */

  
$data[$wlan]->enabled true;
  
$results          $unifi_connection->set_wlansettings_base($id$data[$wlan]);

  if (
$results == 1) {
    echo 
"enabled";
  } else {
    echo 
"error";
  }

}


Dieses Script kannst Du von der Kommandozeile laufen lassen und mal gucken, ob es bei Dir klappt (sind Debug-Ausgaben drin). Am besten versuchst Du einfach mal

php <scriptname> status <SSID_Deines_Gäste_WLANs>

und schaust, was passiert. Wenn keine Fehler kommen, müsstest Du das WLAN einschalten

php <scriptname> enable <SSID_Deines_Gäste_WLANs>

und ausschalten

php <scriptname> disable <SSID_Deines_Gäste_WLANs>

können.

Mohrengemuse hatte damit anfangs einige Probleme. Ob er sie lösen konnte, weiß ich nicht.

Grüße, 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.

TottiToad

@ Motivierte linke Hände

Danke !

Ich habe die Nacht noch erfolglos ein wenig rumprobiert.

Werde es mit deiner "Anleitung" später nochmal von vorne probieren.

Aber ich glaube ich stelle mich was dämlich an  :-\

Daher mal noch ne ganz doofe Frage und um Missverständnisse auszuräumen ?

Auf welchem Gerät packe ich welches Script ? Auf dem NUC auf dem FHEM läuft oder auf den CloudKey wo der Unifi Controller läuft ?

Oder geht das ganze nur wenn z.B. beides auf einem Pi läuft ?

Grüße & Danke
Totti

P.S.: Ich hoffe ich spame den Thread jetzt nicht unnötig mit meinen Newbie Fragen voll :(

Motivierte linke Hände

Das Skript kann erstmal "irgendwo" laufen; es ist zum Test, ob das Skript bei Dir überhaupt funktioniert.

Was Du später  - wenn das Skript mal läuft - brauchst, ist eine Möglichkeit, dieses Skript aus FHEM heraus zu starten, wenn Du einen Knopf drückst. Von daher ist es sicherlich geschickt, wenn Du das Skript direkt auf dem NUC installierst.

Die Integration in FHEM kann über ein notify o.ä. laufen. Du musst hat nur schauen, dass Du das Skript mit den richtigen Parametern aufrufst, wenn das Gäste WLAN geschaltet werden soll.

Hier z.B.:

  if ($Status eq 'disabled') {
    system('/usr/local/bin/guest_ssid_disable &');
  } else {
    system('/usr/local/bin/guest_ssid_enable &');
  }


(Bzw. statt /usr/local/bin/<skript> direkt den php Aufruf aus meiner letzten Nachricht - ich habe das bei mir in Bash-Skripte gepackt, weil ich da teilweise noch andere Dinge drin mache.)

Grüße, 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.

TottiToad

Hi,

habe es jetzt mit Unterstützung von @Wuehler die Scripts soweit alle eingefügt etc und es hinbekommen.

Leider bekomme ich beim ausführen eine Fehler Meldung :( :


benutzer@NUC: /usr/local/src# php WLAN.php status Gastnetzwerk

PHP Notice:  The PHP curl extension is not loaded. Please correct this before proceeding! in /usr/local/src/Client.php on line 56
PHP Fatal error:  Uncaught Error: Call to undefined function UniFi_API\curl_init() in /usr/local/src/Client.php:2030
Stack trace:
#0 /usr/local/src/Client.php(98): UniFi_API\Client->get_curl_obj()
#1 /usr/local/src/WLAN.php(37): UniFi_API\Client->login()
#2 {main}
  thrown in /usr/local/src/Client.php on line 2030



Ich habe curl nochmals installiert und das System neugestartet. Jedoch trotzdem der Fehler ?

Grüße
Totti

Motivierte linke Hände

Welches Betriebssystem und welche PHP Version hast Du?

Für Ubuntu sollte, abhängig von der PHP-Version, funktionieren:

PHP 7: apt-get install php-curl

PHP 5.6: apt-get install php5.6-curl

PHP 5.5: apt-get install php5.5-curl

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.

TottiToad

Ich nutze nen NUC mit Debian 9 und darauf FHEM.

Habe das Problem mit Curl gelöst bekommen.

Jetzt hab ich leider ne andere Fehlermeldung :( ...


PHP Notice:  curl_setopt(): CURLOPT_SSL_VERIFYHOST no longer accepts the value 1, value 2 will be used instead in /usr/local/src/Client.php on line 2033
PHP Notice:  cURL error: SSL certificate problem: self signed certificate in /usr/local/src/Client.php on line 110
falsePHP Warning:  array_column() expects parameter 1 to be array, boolean given in /usr/local/src/WLAN.php on line 48

Names:
PHP Warning:  array_search() expects parameter 2 to be array, null given in /usr/local/src/WLAN.php on line 51

array_search Ergebnis:
PHP Notice:  Trying to get property of non-object in /usr/local/src/WLAN.php on line 63
PHP Notice:  Trying to get property of non-object in /usr/local/src/WLAN.php on line 67


Debain9 stellt php 7 zu Verfügung damit scheint es Problem zu geben.

Muss jetzt mal schauen wie ich PHP wieder deinstalliert bekomme um dann php 5.6 zu installieren.

Grüße
Totti