"Erweiterung" des Unifi Moduls (GastWlan schalten und Voucher erstellen)

Begonnen von TottiToad, 20 Oktober 2017, 17:11:59

Vorheriges Thema - Nächstes Thema

TottiToad

Hi,

Da ich jetzt mehrfach darum gebeten wurde zu schreiben wie ich es bei mir umgesetzt habe, hier mal der Versuch Versuch eine Art Anleitung zu schreiben wie ich das Unifi Modul ,,erweitert" habe.

Hierbei nochmals großen Danke an @Wuehler und @Motivierte linke Hände !!!

Ich hoffe das es jetzt mit einem neuen Thread der richtige Weg war ? Und leider weiss ich nicht wie ich die Codes in einen "ausklappen Kasten" packe. So wäre es mit Sicherheit etwas besser lesbar.

Ich versuche den ersten Thread hier aktuelle zu halten, bzw. Fehler direkt hier zu editieren !






Grundsätzlich muss als erstes der Unifi Api Client und ein paar andere php Dateien auf das FHEM Gerät kopiert werden.

Ich habe die Dateien in folgenden Ordner kopiert:
/usr/local/src

Die original Dateien (Client.php, Voucher.php und Config.php) liegen hier:
https://github.com/Art-of-WiFi/UniFi-API-client/tree/master/



EDIT: Habe ganz vergessen das natürlich PHP (inkl. curl) installiert sein sollte ! Es scheint notwenig zu sein php 7 zu installieren !
Ich nutze PHP 7, sollte aber auch mit anderen Versionen funktionieren

ERGÄNZUNG bzgl. PHP7 installation siehe Beitrag 5 weiter unten !

Hiermit curl installieren, falls noch vorhanden.

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






Da ich direkt mit SSH Root gearbeitet habe, müsst ihr falls ihr nicht als Root arbeitet vor den Befehlen natürlich   sudo   ergänzen !

1. Per ssh auf FHEM anmelden

2. in das Verzeichnis /usr/local/src wechseln

cd /usr/local/src


3. per wget Dateien von github kopieren (Datein werden in gerade geöffneten Ordner kopiert)


wget https://raw.githubusercontent.com/Art-of-WiFi/UniFi-API-client/master/examples/config.template.php

wget https://raw.githubusercontent.com/Art-of-WiFi/UniFi-API-client/master/src/Client.php


4. config Datei umbennen


mv config.template.php config.php


5. Dateien bearbeiten (Benutzernamen, Passwort, IP des Unifi Controllers, Port und Version eintragen)


nano config.php



$controlleruser     = 'BENUTZERNAME'; // the user name for access to the UniFi Controller
$controllerpassword = 'PASSWORT'; // the password for access to the UniFi Controller
$controllerurl      = 'https://IP_DES CONTROLLERS:PORT'; // full url to the UniFi Controller, eg. 'https://22.22.11.11:8443'
$controllerversion  = '5.5.20'; // the version of the Controller software, eg. '4.6.6' (must be at least 4.0.0)




EDIT:

5.1. Client.php bearbeiten
(Hier muss bzw. kann man noch eintragen ob man einen Single-Use Voucher oder Multi-Use möchte. Ebenfalls heb ich hier noch ein Kommentar eingefügt.
Ihr findet die Zeile ca. in der Mitte des Scripts)


nano Client.php



/**
     * Create voucher(s)
     * -----------------
     * returns an array containing a single object which contains the create_time(stamp) of the voucher(s) created
     * required parameter <minutes> = minutes the voucher is valid after activation (expiration time)
     * optional parameter <count>   = number of vouchers to create, default value is 1
     * optional parameter <quota>   = single-use or multi-use vouchers, string value '0' is for multi-use, '1' is for single-use,
     *                                "n" is for multi-use n times
     * optional parameter <note>    = note text to add to voucher when printing
     * optional parameter <up>      = upload speed limit in kbps
     * optional parameter <down>    = download speed limit in kbps
     * optional parameter <MBytes>  = data transfer limit in MB
     *
     * NOTES: please use the stat_voucher() method/function to retrieve the newly created voucher(s) by create_time
     */
    public function create_voucher($minutes, $count = 1, $quota = '1', $note = "created by FHEM", $up = null, $down = null, $MBytes = null)
    {


6. Voucher.php erstellen und Code eintragen (Danke nochmals an @Wuehler !)


nano Voucher.php



Folgenden Code eintragen:


<?php
/**
 * PHP API usage example
 *
 * contributed by: Art of WiFi
 * description: example basic PHP script to create a set of vouchers, returns an array containing the newly created vouchers
 */

/**
 * using the composer autoloader

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

/**
 * Eingefügt um Fehler Meldung auszugeben falls keine Zeitangabe mit angeben wurde
 */
 
function PrintArgsAndExit($error) {
  echo 
"\n$error\n\n";
  echo 
"Gültige Argumente:\n\n";
  echo 
"  Güligkeit des Vouchers    -> Angabe in Stunden wie lange Voucher gültig ist\n";
  echo 
"\nAbbruch.\n";
  exit(
1);
}

#if ($argc < 2) PrintArgsAndExit("Zeitangabe in Stunden fehlt.");

/*
 * Command1 ein Zeitangabe in Stunden wird umgerechnent in Minuten (Command2) und weitergegeben
 */

$command1          strtolower($argv[1]);
$command2 = ($command1*60);


/**
 * minutes the voucher is valid after activation (expiration time)
 */
$voucher_expiration $command2;

/**
 * the number of vouchers to create
 */
$voucher_count 1;

/**
 * The site where you want to create the voucher(s)
 */
$site_id 'default';

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

/**
 * then we create the required number of vouchers with the requested expiration value
 */
$voucher_result $unifi_connection->create_voucher($voucher_expiration$voucher_count);

/**
 * we then fetch the newly created vouchers by the create_time returned
 * @Totti: ohne $voucher_result[0]->create_time müsste das eine Liste aller Voucher zurückgeben
 * Vielleicht kann man das vor create_voucher verwenden und create_voucher nur aufrufen, wenn man eine leere Liste zurückbekommt.
 */
$vouchers $unifi_connection->stat_voucher($voucher_result[0]->create_time);

/**
 * provide feedback (the newly created vouchers) in json format
*/ 
#echo json_encode($vouchers, JSON_PRETTY_PRINT);


$code            array_column($vouchers'code');

echo 
"\nCode: ";
echo 
chunk_split($code[0], 5);
echo 
"\n";

return 
$code[0];




- Anmerkung:

Dort habe ich zum ich noch ein command2 mit eingetragen, damit ich die länge des Gültigkeit des Voucher-Codes in minuten und nicht sekunden angeben kann.

$command2 = ($command1*60);


Ebenso habe ich am Ende noch den Code verändert, damit mir der Voucher wegen der besseren lesbarkeit in 5er "Blöcken" und nicht in einem durch als 10stelliger Block angezeigt wird.

echo chunk_split($code[0], 5);


7. Testen könnt ihr das Script in dem ihr folgenden Befehl eingebt (voucher erstellung für 12 Stunden)


php /usr/local/src/Voucher.php 12


Jetzt sollte ein 10 stelliger Code in 2 "5er Blöcken" angezeigt werden. Wenn es funktioniert hat ghet es in FHEM weiter. Oder noch noch das WLAN Script einfügen.


8. WLAN.php erstellen (für das an und ausschalten des Gäste Wlans)


cd /usr/local/src

nano WLAN.php


Folgenden Code einfügen (Hier nochmals Danke an @Motivierte linke Hände !)


<?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";
  }


}



9. Um das Script zu testen könnt ihr folgendes eingeben


php /usr/local/src/Voucher.php status SSID EURES NETZWERKES


So wird euch der Status eurer WLAN Netzwerke angezeigt.
An bzw. ausschalten geht mit enable bzw disable


php /usr/local/src/Voucher.php enable BesucherNetzwerk


Schaltet mein Gastnetzwerk mit der SSID Besuchernertzwerk ein.





So jetzt weiter in FHEM ;)


Ich habe mehrer Dummys und Notifys angelegt

1. Dummy um das WLAN ein und auszuschalten:


define WLAN_Dummy dummy
attr WLAN_Dummy room GastWlan
attr WLAN_Dummy webCmd on:off


2. Entsprechende notify (Hierbei eure SSID Namen des Gastnetzwerke angeben)


define WLAN_on notify WLAN_Dummy:on "php /usr/local/src/WLAN.php enable SSID_GASTNETWERK &"
attr WLAN_on room GastWlan
define WLAN_off notify WLAN_Dummy:off "php /usr/local/src/WLAN.php disable SSID_GASTNETZWERK &"
attr WLAN_off room GastWlan


3. Dummy um Voucher zu erstellen


define Voucher_Dummy dummy
attr Voucher_Dummy webCmd Voucher_anfordern
attr Voucher_Dummy room GastWlan


4. Notify Voucher


define Voucher_create notify Voucher_Dummy {Code_Anfordern("$EVENT")};;trigger WEB JS:FW_okDialog(Code_Dummy);;
attr Voucher_create room GastWlan


5. Dummy um den Code anzuzeigen


define Code_Dummy dummy
attr Code_Dummy room GastWlan


6. Dummy um die Zeit die Gültigkeit des Vouchers in Stunden anzugeben


define Voucher_Dummy_Zeit dummy
attr Voucher_Dummy_Zeit room GastWlan
attr Voucher_Dummy_Zeit setList state:1,2,3,4,12,24,48,72,96,168
attr Voucher_Dummy_Zeit webCmd state


7. Jetzt noch das Sub in meiner 99_MyUtils:


sub Code_Anfordern($){

my ($hash) = @_;

my $zeit = ReadingsVal("Voucher_Dummy_Zeit","state",1);
my $voucher = qx(php /usr/local/src/Voucher.php $zeit );

fhem "set Code_Dummy $voucher";

}



Ich weiss bzw. denke mir das es mit Sicherheit schönere bzw. bessere Lösungen gibt als es mit mehreren Dummys und Notifys zu lösen.
Doch da ich Anfänger bin, war das erstmal die beste Lösung für mich.

Werde in Zukunft noch schauen wie ich aus den Dummys evtl. nur eins mache und die Notifys zusammenfüge.





So und zu guter letzt noch meine Umsetzung im FHEM Tablet UI



<li data-row="5" data-col="7" data-sizex="2" data-sizey="1">
<header><div data-type="label" class="large">Gäste Wlan</div></header>

                <div data-type="switch"
data-device="WLAN_Dummy"
data-icon="oa-it_router"
data-set-on="on"
data-set-off="off"
class="big">
</div>           
                 <div data-type="select"
                            data-device="Voucher_Dummy_Zeit"
data-items='["1","2","3","4","12","24","48","72","96","168"]'
data-alias='["1 Std.","2 Std.","3 Std.","4 Std.","12 Std.","1 Tag", "2 Tage","3 Tage","4 Tage","1 Woche"]'
class="center">
</div>
                   
<div data-type="popup" data-height="200px" data-width="300px">
  <div data-type="link" class="round top-space-3x left-space-2x"
data-width="160" data-height="40"
                data-color="white"
                data-background-color="green"
              data-icon="fa-check"
              data-device="Voucher_Dummy"
                data-set="Voucher_anfordern"
                class="center">Voucher anfordern
                     </div>
                     
                <div class="dialog">
    <header>Voucher</header>
    <div class="top-space">
          <div class="newline">
            <div data-type="label" data-device="Code_Dummy" data-get="state" data-colors='["#6699FF","#aa6900","#bb6242"]' class="bigger thin"></div>
          </div>   
                       
          <div data-type="link" class="round top-space-3x left-space-2x"
                data-width="60" data-height="40"
                data-color="white"
                data-background-color="green"
                data-icon="fa-check"
                onclick="$('.dialog-close').trigger('click');"
                >OK</div>
    </div>
</li>



Im FTUI habe ich jetzt so ein kleines Widget mit dem ich das GastWlan steuern kann.
- Wlan welches ich im Notify angegeben habe an/aus schalten
- Voucher Gültigkeitsdauer angeben und Voucher erstellen
- Es öffmnet sich nach dem erstellen ein popup Fenster mit dem erstellten Code (dauert meist 1-2 sek bis der neue Code angezeigt wird)





So denn, ich hoffe zum einen das ich nicht zuviel geschrieben habe und das sich kein Fehler eingeschlichen hat.

Über Tipps und Veränderungsvorschläge würde ich mich freune.

Grüße & Danke
Totti

P.S.: Über ein Feedback wäre ich natürlich auch Dankbar. Meine erste "Anleitung" hier als Anfänger

Mumpitz

Ganz Cool!! Vielen vielen Dank!!!!
Werde es in den nächsten Tagen einbauen!

TottiToad

@ Mumpitz

Wäre super wenn Du mir dann mal bescheid gibst, was Du umgesetzt hast und ob es nach der Anleitung geklappt hat

Grüße & Danke
Totti

eldrik

Hi,

ich hab das gerade einmal fix versucht durchzuspielen, erhalte jedoch beim ausführen

php /usr/local/src/Voucher.php 12

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:  Call to undefined function UniFi_API\curl_init() in /usr/local/src/Client.php on line 2188

daraufhin hab ich curl und php5-curl installiert erhalte aber weiterhin beim ausführen

PHP Fatal error:  Call to undefined function array_column() in /usr/local/src/Voucher.php on line 84

Codes werden trotz der Fehlermeldung erzeugt... ich setze die Controller Version 5.5.24 ein.

Irgendwelche weiteren Ideen?

Greetz
Eldrik

TottiToad

Hi,

habe mit in die Anleitung aufgenommen.

Hatte vergessen zu erwähnen das man erst noch php und curl installieren muss !

Ich selbst nutze das aktuellste php (PHP7)


Habe gerade noch was gefunden:

Zitat von: Wuehler am 13 Oktober 2017, 12:54:37
Kurze Info. Für das WLAN.php Script ist php 7 Pflicht, da die Funktion array_column() erst ab dann mit Object-Array zurechtkommt.


Grüße
Totti

TottiToad

So bin nochmal alles durchgegangen und habe das ganze gerade mal anstatt auf meinem NUC auf einem "frischen" PI mit FHEM ausprobiert.

Es läuft alles sobald man PHP7 installiert. Dies wird jedoch wohl noch nicht offiziell für den Pi mit Jessi bereitgestellt. (Falls ihr bereits stretch nutzt, solltet ihr ohne weiteres php7 installieren können. Man kann natürlich auch direkt überlegen von Rasbian Jessie auf Stretch upzudaten)

Habe dazu folgende Seite gefunden:

https://hackedit.de/530/


sudo nano /etc/apt/sources.list


In der Liste folgendes ergänzen:
deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi


Dann Datei erstellen:
sudo nano /etc/apt/preferences


Folgendes eintragen:

Package: *
Pin: release n=jessie
Pin-Priority: 600


Dann:
sudo apt-get update


Jetzt habe ich lediglich php7 und php7-curl installiert:

sudo apt-get install -t stretch php7.0
sudo apt-get install -t stretch php7.0-curl


Noch nen Neustart von Apache und es lief alles:
sudo /etc/init.d/apache2 restart

Bei mir hat es so jedenfalls auch aufm Raspberry funktioniert !

Grüße
Totti

markus_fhem

Großartige Arbeit, vielen Dank!  :D

Da ich schon lange auf der Suche nach einer Voucher-Funktion für die Tablet UI war, musste ich das natürlich sofort nachbauen.

Nur habe ich den Effekt, dass mit absoluter Regelmäßigkeit nur bei jedem zweiten Aufruf ein neuer Voucher generiert wird. Dabei ist es egal, ob ich es über WEB oder über FTUI aufrufe. Bei den nicht erfolgreichen Aufrufen wird nur "Code:" angezeigt, mehr nicht. Kommt also irgendwie aus der Voucher.php.

Einzige Modifikation, die ich da gemacht hatte, dem create_voucher-Aufruf als dritten Parameter noch eine "1" mitzugeben, damit die Voucher als Singe-Use anstatt Multi-Use erstellt werden. Aber das dürfte da doch keine Auswirkung haben...

Hat jemand eine Idee, woran das liegen könnte?

Mumpitz

Zitat von: TottiToad am 21 Oktober 2017, 00:20:00
So bin nochmal alles durchgegangen und habe das ganze gerade mal anstatt auf meinem NUC auf einem "frischen" PI mit FHEM ausprobiert.

Es läuft alles sobald man PHP7 installiert. Dies wird jedoch wohl noch nicht offiziell für den Pi mit Jessi bereitgestellt. (Falls ihr bereits stretch nutzt, solltet ihr ohne weiteres php7 installieren können. Man kann natürlich auch direkt überlegen von Rasbian Jessie auf Stretch upzudaten)

Habe dazu folgende Seite gefunden:

https://hackedit.de/530/


Mein Raspi läuft noch auf Wheezy  :-[
meinst Du ich krieg das trotzdem zum laufen oder soll ich gleich seinlassen?

sudo nano /etc/apt/sources.list


In der Liste folgendes ergänzen:
deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi


Dann Datei erstellen:
sudo nano /etc/apt/preferences


Folgendes eintragen:

Package: *
Pin: release n=jessie
Pin-Priority: 600


Dann:
sudo apt-get update


Jetzt habe ich lediglich php7 und php7-curl installiert:

sudo apt-get install -t stretch php7.0
sudo apt-get install -t stretch php7.0-curl


Noch nen Neustart von Apache und es lief alles:
sudo /etc/init.d/apache2 restart

Bei mir hat es so jedenfalls auch aufm Raspberry funktioniert !

Grüße
Totti

TottiToad

@markus_fhem

gut das Du die Einstellung gefunden hast bzgl. Single-Use und Multi-Use.

Hatte ich bei mir auch eingestellt, nur in der Anleitung vergessen. Werd ich direkt oben mit Einpflegen ;)

Du hast den Parameter aber in der Client.php eingestellt und nicht in der Voucher.php, oder ?


Zu deinem Fehler:

Was ist wenn Du die Voucher.php in ssh ausführst ? Wird dann auch nur jedes zweite mal eine Code erstellt ?

@Mumpitz
Naja wie es auf Wheezy läuft kann ich Dir nicht wirklich sagen :(
Ein Update ist keine option ? (Wobei ich tatsächlich auch nicht weiss ob dies ein größerer Aufwand ist ?)
@Eldrik hat es glaube ich mit php 5 umgesetzt. Es kommt wohl in SSH eine Fehlermeldung, jedoch wird der wohl Code erstellt.

Wenn ich das Richtig sehe geht es bei der Fehlermeldung um die Funktion " function array_column() ".
Diese wird wenn ich es richtig gelesen habe erst ab php 5.6 unterstützt.

Wäre Super wenn @Eldrik ne Rückmeldung gibt ob er es lösen konnte und welche php Version er nutzt ?

Zum Update von Wheezy auf php 5.6 habe ich einige Seiten gefunden:

https://ansas-meyer.de/programmierung/php/php-5-6-unter-debian-wheezy-installieren/

https://support.plesk.com/hc/de/articles/213375669--Upgrade-der-PHP-Version-unter-Debian


Denke aber das ein Update von Wheezy auf Jessie oder direkt Stretch dann besser wäre ? Bzw. ich würde dann eher eine Neuinstallation von Stretch machen und FHEM als Backup einspielen. So hat man eine sauber Installation.

Vielleicht kann jemand mehr dazu sagen ?


Grüße
Totti

markus_fhem

#9
Zitat von: TottiToad am 21 Oktober 2017, 08:40:30
@markus_fhem

gut das Du die Einstellung gefunden hast bzgl. Single-Use und Multi-Use.

Hatte ich bei mir auch eingestellt, nur in der Anleitung vergessen. Werd ich direkt oben mit Einpflegen ;)

Du hast den Parameter aber in der Client.php eingestellt und nicht in der Voucher.php, oder ?

In der Voucher.php habe ich es geändert - sonst würde ich ja die Bibliothek verändern und mir es bei updates ggf. wieder überschreiben. Client.php nimmt immer 0 als default für multi-use, sofern kein Wert übergeben wurde.

$voucher_result = $unifi_connection->create_voucher($voucher_expiration, $voucher_count, 1);


Zitat von: TottiToad am 21 Oktober 2017, 08:40:30
Zu deinem Fehler:

Was ist wenn Du die Voucher.php in ssh ausführst ? Wird dann auch nur jedes zweite mal eine Code erstellt ?

Guter Tipp, da hatte ich nicht dran gedacht. Da lässt sich zwar nicht die Regelmäßigkeit von jedem zweiten Aufruf reproduzieren, aber eine php notice und eine php Warning bekomme ich immerhin:

ZitatPHP Notice:  Trying to get property of non-object in /usr/local/src/Voucher.php on line 76
PHP Warning:  array_column() expects parameter 1 to be array, boolean given in /usr/local/src/Voucher.php on line 84

Da kann ich momentan noch nicht zu viel mit anfangen, weil ich in der Client.php noch nicht tief genug drin bin.

Edit: Nachdem ich es ein paar mal direkt aus der Konsole aufgerufen hatte, funktioniert es nun auch über FHEM jedes mal. Das verstehe wer wolle... Ich beobachte mal weiter.



Dabei ist eben noch der Gedanke gekommen, die Ablauffolge des sub Code_Anfordern umzudrehen, indem im VoucherCode-Dummy für jede mögliche Voucher-Gültigkeit als Reading ein gültiger Voucher vorgehalten wird. Bei Aufruf des Sub wird dieser direkt aus dem entsprechenden Reading ins state kopiert und sofort im Popup ausgeliefert.

Erst im zweiten Schritt wird dann im Hintergrund die Voucher.php aufgerufen, um für dieses Reading einen neuen Voucher "nachzufüllen".

Vorteil: Der Gast würde keine Verzögerung mehr spüren. (die bei einem RasPi2 für den Unfi Controller schon mal eher in Richtung 3-4 anstatt 1-2 Sekunden gehen kann und in der Zeit noch der letzte Voucher angezeigt wird.)

Nachteil: Die Vouchers dürfen nicht noch auf einem anderen Weg abgefragt werden, sonst könnten die zwischengespeicherten Vouchers schon verbraucht sein.

eldrik

Hi,

wie beschrieben kam es bei mir mit php5 zu einer Fehlermeldung, ein Voucher wurde jedoch vom Controller erzeugt, wenngleich nicht per fhem anzeigbar, deshalb bin ich auch auf php7 und die Fehlermeldung ist verschwunden!

Greetz
Eldrik

Mumpitz

Zitat von: eldrik am 21 Oktober 2017, 16:50:10
Hi,

wie beschrieben kam es bei mir mit php5 zu einer Fehlermeldung, ein Voucher wurde jedoch vom Controller erzeugt, wenngleich nicht per fhem anzeigbar, deshalb bin ich auch auf php7 und die Fehlermeldung ist verschwunden!

Greetz
Eldrik
Wie bist du auf php7 gekommen? Welche Version hast du im Einsatz?

eldrik

das kann ich nicht mehr ganz nachvollziehen, hatte nach php7 und debian wheezy gegoogelt und etwas passendes gefunden (paketquelle wenn mich nicht alles täuscht) gehabt, mit dem es funktionierte.

Hab aber zwischenzeitlich von wheezy über jessie auf stretch aktualisiert daher kann ich, an der Stelle, keine weiteren Hilfestellungen geben ;)

Greetz

Wuehler

Hi,

ich habe es geschafft das 74_Unifi.pm um die Funktionen zu erweitern: https://forum.fhem.de/index.php/topic,40287.msg703047.html#msg703047
Voucher werden erzeugt, es fehlt aber noch ein Reading/Readings dafür. Hier brauche ich mal etwas Input, wie die Readings aussehen sollten.
Das Disablen einer SSID geht auch(WLAN ist weg, Enabled-Haken im Unifi-Controller ist entfernt). Beim Enablen stimmt das Ergebnis (WLAN ist wieder verfügbar), aber der Haken im Unifi-Controller wird nicht gesetzt.
Frage daher an euch: Ist das beim enablen über das php-script genauso? Wenn Nein bitte mal das Json posten, das an Client.php (wlanconf) übergeben wird.

Danke und Gruß,
Wuehler

markus_fhem

Zitat von: Wuehler am 24 Oktober 2017, 07:45:11
Hi,

ich habe es geschafft das 74_Unifi.pm um die Funktionen zu erweitern: https://forum.fhem.de/index.php/topic,40287.msg703047.html#msg703047
Voucher werden erzeugt, es fehlt aber noch ein Reading/Readings dafür. Hier brauche ich mal etwas Input, wie die Readings aussehen sollten.


Aus der vorangegangenen Version hatte ich es so gelöst, dass ich für jede vorgegebene Gültigkeit ein Reading angelegt hatte. Name ist die Gültigkeit, Wert der vorabgefragte Voucher selbst.

(https://uploads.tapatalk-cdn.com/20171024/be0121763316257bebc5f1adc026b8c9.jpg)

Gesendet von meinem D5803 mit Tapatalk
(https://uploads.tapatalk-cdn.com/20171024/4562249d6e40c4f55a59983d5d728059.jpg)