UniFi Modul

Hier ist ein weiterer Ansatz einer Klasse, die ich hier gefunden habe. Damit kann man noch mal ne Menge mehr machen. Allerdings kann ich mit dem Erstellen von Modulen in Symcon nicht um …

Bekomm ich nur n 404!

Naja du hättest die URL auch ansehen können und festgestellt, dass am Ende nen http:// zu viel ist, aber hier die korrekte URL zur Klasse:

UniFi-API-browser/class.unifi.php at master · malle-pietje/UniFi-API-browser · GitHub

Die habe ich im Übrigen auch verwendet für mein Unifi Modul um beispielsweise bequem aus dem Frontend heraus Gäste-Schlüssel zu erstellen und anzuzeigen.

Ich wäre auch dafür das du das Modul weiter ausbaust, da steckt viel mehr Potenzial drin. Dann könnte ich mein Modul in Rente schicken.

Lasse damit nun täglich ein neues Kennwort für mein Gast-WLAN (eigene SSID im separaten VLAN) erzeugen und spiele es in den Unifi-Controller ein. Eine Variable im Webfront zeigt das aktuelle Kennwort an. Somit können die Kinder ihrem Besuch eigenständig den so wichtigen Internetzugang anbieten .

Wie baut man denn grundsätzlich Module? Bin da noch nicht hintergestiegen. Wäre doch ein guter Einstieg für mich.

Das mit der URL ist aus Tapatalk heraus leider nicht zu sehen gewesen. Da geht nur n Fenster ohne Linkleiste auf und fertig. :wink:

Ich hab mir das jetzt mal auf die ToDo Liste geschrieben. Werde das Modul demnächst mal erweitern.

Vllt. könnt ihr mal eure Wünsche in Listenform hier nieder schreiben, damit ich nix vergesse.

Gruß
Kevin

Vorher muss die ID des betroffenen WLANs einmalig ermittelt werden. Dafür hier ein Script, dass ne Menge nützlicher Funktionen in Rohformat-Form ausgibt. Hier die Info über die eingerichteten WLANs:

<?

$unifi_user	= GetValue(35592 /*[IPS - Zentrale Angaben\Basisdaten\Unifi-Controller\Benutzername]*/);
$unifi_pw	= GetValue(11160 /*[IPS - Zentrale Angaben\Basisdaten\Unifi-Controller\Passwort]*/);
$unifi_url	= GetValue(41261 /*[IPS - Zentrale Angaben\Basisdaten\Unifi-Controller\Controller-URL]*/);

// -----------------------------------------------------------------------------
include "class.unifi.php";

// neues Objekt erstellen
$connection = new unifiapi ($unifi_user, $unifi_pw, $unifi_url, '', '');
// Login
$connection->login();


// Liste aller aktiven Geräten
//print_r( $connection->list_clients() );



// Liste aller mal aktiven Geräte
//print_r( $connection->list_users() );



// Liste aller APs
//print_r( $connection->list_aps() );



// Liste aller Sites
//print_r( $connection->list_sites() );



// Liste aller WLAN-Gruppen
//print_r( $connection->list_wlan_groups() );


// Liste der Events
//print_r( $connection->list_events() );


// Liste der WLANs
print_r( $connection->list_wlanconf() );



// Liste aller Alarme
//print_r( $connection->list_alarms() );


// Kennwort für WLAN setzen
//echo $connection->set_wlansettings("1787ace4c2dc03b87739abb6", "12346578", $name = "gastwlan") ;


// Logout
$connection->logout();
?>

Ergebnis ist ein Array. Nun beim gewünschten WLAN den Wert des Elements [_id] im folgenden Script der Variable $unifi_wlan_id zuordnen.

[_id] => 1787ace4c2dc03b87739abb6

Nach Ausführen wird ein zufälliges Passwort (hier aus dem Zeichenvorrat „0123456789“ mit der Länge 10) generiert und in den Unifi-Controller geschrieben. Mein Beispielscript dafür:

<?
$unifi_user	= GetValue(35592 /*[IPS - Zentrale Angaben\Basisdaten\Unifi-Controller\Benutzername]*/);
$unifi_pw	= GetValue(11160 /*[IPS - Zentrale Angaben\Basisdaten\Unifi-Controller\Passwort]*/);
$unifi_url	= GetValue(41261 /*[IPS - Zentrale Angaben\Basisdaten\Unifi-Controller\Controller-URL]*/);

$unifi_wlan_id 	= "1787ace4c2dc03b87739abb6"; 
$pw_id 			= 17214 /*[EDV\Unifi\Kennwort]*/;
// -----------------------------------------------------------------------------
include "class.unifi.php";

$pw = CreateRandomPassword("0123456789", 10);
SetValue($pw_id, $pw);

// neues Objekt erstellen
$connection = new unifiapi ($unifi_user, $unifi_pw, $unifi_url, '', '');
// Login
$connection->login();
// Aktion ausführen
$connection->set_wlansettings($unifi_wlan_id, $pw, $name = "gastwlan");
// Logout
$connection->logout();


// -----------------------------------------------------------------------------
// Funktionen
// -----------------------------------------------------------------------------

function CreateRandomPassword($pw_elements, $pw_laenge)
// erstellt ein zufälliges Passwort der Länge $pw_laenge aus den Zeichen $pw_elements 
	{
	$password = '';      	 
	for ($i=0; $i<$pw_laenge; $i++)
		{
		$password .= substr($pw_elements, rand(0, strlen($pw_elements)-1), 1);
		}
	 	$password = str_shuffle($password);
	return $password;
	}

?>

Daraufhin werden alle betroffenen AccesPoints provisioniert. Kurz darauf kann man sich mit der SSID und dem neuen Passwort mit dem WLAN verbinden. Bei mir läuft dieses Script einmal am Tag. Zusätzlich wird das Passwort in die Variable $pw_id geschrieben und kann im Webfront angezeigt werden.

Ich würde mir das setzen des WLAN Schlüssels für einzelne SSIDs wünschen. Schön wäre es, wenn diese dann in einer Variable abgelegt würden und eventuell sogar als QR-Code zur Verfügung stünden.

Und so wie es aussieht beisst sich das Modul im Moment mit der IPS-Library. Die Funktionen CreateCategorie und CreateVariable werden dort ebenfalls deklariert und das wirft logischerweise einen Fehler.

Nachtrag: Die Meldungen im Logfile sollten abschaltbar sein. Derzeit gibt das Modul dort im Klartext die Zugangsdaten zum Unifi-Controller aus. :rolleyes:

zum Nachtrag: +1
Die Zugangsdaten sollten nicht im Klartext drinnen stehen.

Sonst funktioniert das Modul einwandfrei und ich bin sehr begeistert. - leider bucht sich mein iphone scheinbar bei längerer Nichtbenutzung (Nacht) aus dem WLAN aus.

Danke auf alle Fälle für die super Arbeit!

eines ist mir noch aufgefallen - bei mir fällt der zu konfigurierende Teil in „updateClients“ immer wieder weg und wird mit den Default-Werten überschrieben - kann das irgendwie durch automatische Updates oder s.ä. passieren?
(ist mir in der letzten Woche 2x passiert)

lg

Das passiert nach jedem Neustart von IPS. Du musst im Pfad \IP-Symcon\modules\KH_UniFi\UniFi die Original-Skripte abändern.

ah … sehr gut … danke für die Hilfe. - hab dabei auch gleich das Loggen der Login-Daten aus dem module.php rausgeschmissen. (alle IPS_LogMessage durch eine generische ersetzt)

Wenn Ihr da jetzt manuell geändert habt lässt sich das Modul aber nicht mehr automatisch updaten. So habe ich es zumindest in Erinnerung.

@Spoosi:
Ich fände es super, wenn Du das Modul vielleicht in Etappen anpassen würdest. Wenn die Fehler, das Losging und das Passwort-Thema in einem ersten Schritt angepasst würden, evtl auch die Funktionsnamen bzgl. IPSLibrary wäre das sicher schon mal eine super Sache.

Die Erweiterungen könnten ja danach erfolgen.

Danke und Gruß
Christian

Völlig korrekt - die Änderungen sind nicht Update-sicher. Ich sitze Spoosie da auch schon auf dem Schoß, dass die Änderungen in die „Serie einfliessen“. :slight_smile:

… das kann ja nichts werden. Steh halt mal auf, hol Ihm ein Bier oder Glas Wein, er mag Burger, Vielleicht motiviert ihn das.:smiley:

Gruß
Christian

Ostern…

hä? Das verstehe ich nicht, aber wir sind auch ganz schön OffTopic. Ich hoffe Spoosie verzeiht uns das.
Nicht dass hier noch ein Moderator eingreift.

Du sitzt auf meinem Schoß? Der Kerl schmeisst mir hier ganz andere Projekte auf den Tisch. Z.B. Pflanzensensoren! Glaubt ihm kein Wort! :stuck_out_tongue:

Wer hat denn um Beschäftigung gewinselt damit er endlich von der Straße weg kommt? Alles ein Akt der sozialen Nächstenliebe!

@ c. Radi
Ostern IPS Treffen bei Spoose

Gesendet von iPhone mit Tapatalk

Den Pflanzensensor möchte ich dann sehen, ich Tage da auch Bedarf :).

Hallo Zusammen,

In den letzten Tagen habe ich mir das UniFi Modul vorgenommen, und im Rahmen eines Forks deutlich überarbeitet.

Änderungen:

  • Verwendung von Konfigurations-Formularen im Modul --> kein Überschreiben der Settings mehr
  • Umstellung der API Funktionen auf die Klasse vom UniFi-Api-Browser
  • Beseitigung der diversen Fehler & überflüssigen Log-Einträge
  • Erstellung eines Debug-Modes (kann über die Moduleinstellungen aktiviert werden)
  • Anpassung des Intervalls

in Arbeit:

  • HTML-Box für das Webfront
  • Verändern von UniFi Settings (z.B. aktivieren / deaktivieren von Netzwerken, Ändern von Kennwörtern etc.)
  • Zugangsdaten stehen aktuell noch im Klartext im Konfig-Formular -> Umstellung auf PW-Box

Bitte testen & Fehlermeldungen, Verbesserungsvorschläge, Lob & Spott bitte äußern :slight_smile:

Viele Grüße & viel Spaß,
Markus

P.S.: Dies ist mein erstes Modul, daher bitte bei Auffälligkeiten (auch in Bezug auf Code-Styling etc.) eine Info an mich. Die alten Funktionen / Files liegen noch im Paket mit ab, werden aber demnächst gelöscht werden.

[EDIT]:
Es gibt nun einen eigenen Thread zu meinem Modul - Fragen & Anregungen bitte dort stellen: