UniFi Modul Reloaded

Hallo Leute,

bei mir Tauchen auf einmal W-Lan Geräte in der „Lan“ Kategorie. :confused:

z.B. ein Smartphone oder Tablet. In der „W-Lan“ Kategorie sind die Geräte auch vorhanden. Die Daten wie IP oder MAC usw. sind gleich.
Lösche ich diese, werden die irgendwan wieder erstellt.:banghead:

Hat das Problem noch jemand?

Gruß

Bitte prüfe mal was bei dir im Fehlerfall direkt im UniFi-Controller angezeigt wird - bei mir wird genau in diesen Fällen direkt im Controller das Device als LAN-Device angezeigt. In solchen Fällen klappt dann auch die Anwesenheits-Erkennung nicht mehr, da diese Geräte viel zu lange als „online“ ausgewiesen werden…

Bei mir tritt das Verhalten aktuell nicht mehr auf, das ist mit einem der letzten Firmware-Updates (oder Netzwerk-Umbauten) verschwunden. Nutzt du noch einen „Nicht-UniFi“ WLAN Accesspoint?

Gruß,
Markus

Hallo zusammen.

Nachdem ich einen Unifi Controller laufen habe verwende ich auch das Modul. Die Einrichtung hat gut funktioniert und jetzt möchte ich gerne per PHP ein WLAN Device „blocken“, bzw. die Blockierung wieder aufheben.
Da die Methode „block_sta($mac)“ private ist kann ich sie natürlich nicht aufrufen.

Die Logik wird auch sonst nirgends aufgerufen. Verstehe ich was falsch oder kann ich ein WLAN Gerät nicht blockieren mit dem Modul :confused: ?

Gruß
Thorsten

Hallo,

würde auch gerne einzelne Ports am Switch über IP-Symcon stromlos schalten wollen um nachts einzelne Wifi-APs, eine Kamera, etc. ausschalten zu können.

Gibt es dafür schon ein Update?

Kann ich unterstützen? Im Ubiquity Forum ist beschrieben wie es funktioniert.

Hallo,

bei jedem Intervallupdate (bei mir minütlich) kommt folgende Fehlermeldung:

Hat jemand eine Ahnung, wie die Meldung vermieden werden kann???

Vielen Dank und Grüße…

Ich bekomme den gleichen Fehler:

<b>Notice</b>:  Undefined property: stdClass::$uptime in <b>/var/lib/symcon/modules/MK_UniFi/UniFi/module.php</b> on line <b>1937</b><br />

Die Zeile 1937 im Modul sieht wie folgt aus:

$this->CreateVariable("Uptime", 1, $aps->uptime, $ident . "_uptime", $catID, "~UnixTimestampTime");

So ganz nachvollziehen kann ich es bisher nicht. Vielleicht hat ja einer ne Idee.

Grüße
Daniel

Hallo
$apps->uptime scheint nicht bekannt zu sein.
Um rauszufinden welches Geraet es ist ( oder hast du nur eins ? )
kann man mal folgendes an Zeile 1935 einfuegen.

if ( !isset($aps->uptime) )
											{
											IPS_Logmessage("UNIFI",$aps->name. " $aps->uptime nicht vorhanden " );
											print_r($aps);
											}

Im Logfile sollte dann das ganze Array stehen.

Morgen,

Danke 1007 für deine Hilfe.

Fehler ist auch gelöst.
Das Problem mit der Meldung Uptime ensteht, wenn ein Gerät Offline/Deaktiviert ist.
Hatte nen Reserve-AP momentan Offline und jetzt erstmal geköscht.

Grüße
Daniel

Prima, Daniel, dann weiß ich jetzt zumindest, wo die Meldung herkommt. Ich habe einen von mehreren APs immer nur zeitweise aktiv - den hatte ich gelöscht, er wird wird aber immer wieder automatisch hinzugefügt.

Weiß daher jemand, wie ich die Meldung unterdrücken kann?

Vielen Dank und Grüße…

Ich bekomme zudem andauernd Fehlermeldungen im Log:confused:

Hallo zusammen,
ich bekomme auch die Fehlermeldung unter IPS 5.2…

Jemand eine Idee? :confused:

Beste Grüße
Kai

Bei mir selbes Problem, schon einmal danke fürs fixen

Gruß Swen

Ich kämpfe auch gerade damit :frowning:

Erstmal danke für das Modul :slight_smile:

Ich nutze auch ein USG-PRO-4 und wähle mich mittels PPPoE über ein Modem (Speedport Smart 3) ein.
Das Modul liest ja auch die USG aus und zeigt mir die IP an, soweit kein Problem.

Jetzt vermute ich mal dass das USG über das Network Update ausgelesen wird was ein Intervall von 3600 Sekunden hat.
Gibt es bereits eine Möglichkeit die IP der USG öfters auszulesen ? Bzw wie weit kann man mit dem Update Intervall runter gehen ohne das es zu Problemen kommt ?

Optimal wäre es wenn es eine Push-Benachrichtigung geben würde vom Controller.

Hintergrund: Ich verarbeite hier die externe IP intern, also logge wann DSL weg ist bzw wieder da ist und schicke mir bei Ausfall/Wiederverbinden intern im Netzwerk Nachrichten aufs TV bzw extern per Email sobald Internet wieder da ist.

Geht es mit der API evtl auch das die Session beibehalten wird und nicht jedes mal ein neuer Login gemacht wird ?
So müllt einen das Modul das Ereignis-Log ganz schön zu

Die ständigen Logins haben mich auch schon interessiert, gestört haben sie mich allerdings nicht. Vielleicht kann man in Sachen Syslog was machen, denn Push gibt es meines Wissens im Controller nicht.

Leider über meinem Horizont,

aber unter 5.2 läuft es nicht mehr wirklich :frowning:
Wäre super, wenn sich das mal einer mit mehr Ahnung (also jeder außer mir hier) , ansehen könnte :slight_smile:

Liebe Grüße

Evtl könnten wir ja UI nerven das die in ihr System ein Push einbauen oder einfach nen MQTT Server auf den Cloudkey, das wäre dann sowieso der Hammer denn so hätte man sämtliche Änderungen sofort :slight_smile:

Der Autor ist ja noch aktiv im Forum unterwegs, denke mal er wird sich das schon noch ansehen.
Ich selbst bin noch auf 5.1 und habe mir hier noch keine Zeile Code angesehen

Ansonsten habe ich bei UI mal ein Feature Request erstellt
UniFi Feature Request - MQTT Server/Client or Push | Ubiquiti Community
wenn die eine MQTT Option implementieren würde das vieles einfacher machen

Habe „auf die Schnelle“ eine kleine Lösung gebastelt. Ist zwar ein Script, aber ein Anfang. Kann man ja in ein Modul übernehmen. Ist alles quick & dirty programmiert. Tipps zur Optimierung des Codes nehme ich gern entgegen. Werde diesen Ansatz dies bei Gelegenheit in meine Präsenzmelde-Script übernehmen, um die zyklischen Abfragen mit Logins an den Controller zu minimieren. Außerdem kommt die Meldung beim Ausbuchen eines Endgerätes wesentlich schneller als beim Abfragen (hier dauert es bei mir bis zu 10 min bis jemand als abwesend gilt).

Was macht das Script?
Eingehende Syslog-Meldungen vom Unifi-Controller werden via UDP-Socket in eine Registervariable umgeleitet. Diese ist mit dem Script verbunden, welches derzeit drei Meldungen herausfiltert: jeweils die Mac-Adresse bei Ein- und Ausbuchen eines Endgerätes in das / aus dem WLAN sowie die IP-Adresse, die das Endgerät beim Einbuchen bekommt.

Was ist zu tun?

[ul]
[li]Syslog-Server (Remote-Protokollierung) im Unifi-Controller einrichten (Einstellungen -> Zone) mit IP vom IPS und dem Port, auf den IPS lauscht[/li][li]UDP-Socket anlegen (wenn nichts verändert wurde, sind die beiden Ports jeweils 514, Sende-Host ist die IP vom Unifi-Controller und Empfangs-Host die IPS-IP)[/li][li]Script anlegen und Inhalt reinkopieren[/li][li]drei Variablen als String anlegen und im Script mit den „SetValue“-Befehlen verknüpfen[/li][li]Registervariable im Baum anlegen und auf das soeben angelegte Script verweisen (ID zusätzlich im Script hinterlegen)[/li][/ul]

Das Script:

<?
$regvar = 30988;
$newdata = $_IPS['VALUE'];

// Daten in Puffer speichern
$buffer = RegVar_GetBuffer($regvar);
$buffer .= $newdata;
RegVar_SetBuffer($regvar, $buffer);

// in UTF8 wandeln
$utf8data = utf8_decode($newdata);


// Fall 1: Endgerät hat WLAN verlassen
if (strpos($utf8data, "EVENT_STA_LEAVE") !== false) 
	
    {
	preg_match_all("/\b[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}\b/su", $utf8data, $macs);
	$mac = $macs[0][0];
	SetValue(30906, $mac);
	echo "WLAN verlassen durch ".$mac."
";
	}


// Fall 2: Endgerät hat sich ins WLAN eingebucht
if (strpos($utf8data, "EVENT_STA_JOIN") !== false) 
	
    {
	preg_match_all("/\b[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}\b/su", $utf8data, $macs);
	$mac = $macs[0][0];
	SetValue(10111, $mac);
	echo "WLAN betreten von ".$mac."
";
	}

	
// Fall 3: IP-Adresse des Endgerätes nach Einbuchen auslesen
if (strpos($utf8data, "EVENT_STA_IP") !== false) 
	
    {
	preg_match_all("/\b[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}\b/su", $utf8data, $macs);
	$mac = $macs[0][0];

	preg_match_all("/(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/", $utf8data, $ips);
	$ip = $ips[0][1];
	SetValue(21933, $ip);

	}				
?>

Nun sollten ein Haufen Meldungen in die Registervariable laufen (kann man sich mittels Debug anzeigen lassen). Jede Meldung wird auf ein paar Schlüsselwörter geprüft und das Ergebnis entsprechend in eine der drei Variablen geschrieben. Man wird sicherlich noch mehr damit machen können, ist nur halt mühsam, sich die passenden Zeilen herauszusuchen, die das gesuchte Ereignis widerspiegeln.

Trotzdem: MQTT würde mir auch besser gefallen.