NEWS
Unifi Steuern ohne Adapter (Script,SSH)
-
@draexler Find ich auch Klasse, was du da gemacht hast!
Dachte du hast das mit openEpaper gemacht.. aber so gehts auch!
-
-
@liv-in-sky sagte in Adapter: ioBroker.unifi:
bei mir sieht der teil jetzt so aus - oben das setting habe ich weggelassen
//const unifi = new Unifi.Controller({ hostname: config.hostname, port: config.port, sslverify: config.sslverify }); // Erstelle die benötigten Datenpunkte für die Voucher-Konfiguration createState("0_userdata.0.Unifi.Voucher.config.minutes", 123, { type: 'number', name: 'minutes', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.config.count", 1, { type: 'number', name: 'count', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.config.quota", 0, { type: 'number', name: 'quota', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.config.note", "testthis", { type: 'string', name: 'note', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.config.up", null, { type: 'number', name: 'up', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.config.down", null, { type: 'number', name: 'down', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.config.megabytes", null, { type: 'number', name: 'megabytes', read: true, write: true }); // Erstelle die benötigten Datenpunkte für die Voucher-Daten createState("0_userdata.0.Unifi.Voucher.data.latestJson", "{}", { type: 'string', name: 'latestJson', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.code", "", { type: 'string', name: 'code', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.duration", 0, { type: 'number', name: 'duration', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.qos_overwrite", false, { type: 'boolean', name: 'qos_overwrite', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.note", "", { type: 'string', name: 'note', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.for_hotspot", false, { type: 'boolean', name: 'for_hotspot', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.create_time", 0, { type: 'number', name: 'create_time', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.quota", 0, { type: 'number', name: 'quota', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.site_id", "", { type: 'string', name: 'site_id', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.admin_name", "", { type: 'string', name: 'admin_name', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.used", 0, { type: 'number', name: 'used', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.status", "", { type: 'string', name: 'status', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.status_expires", 0, { type: 'number', name: 'status_expires', read: true, write: true }); // Erstelle den Datenpunkt für den Trigger createState("0_userdata.0.Unifi.Voucher.trigger", false, { type: 'boolean', name: 'trigger', read: true, write: true }); let lastVoucherCreateTime = 0; // Speichert die create_time des letzten erstellten Vouchers // Reagiere auf Änderungen des Datenpunkts "trigger" on({ id: '0_userdata.0.Unifi.Voucher.trigger', change: 'ne', val: true }, async (obj) => { console.log('Trigger-Datenpunkt geändert: ' + obj.state.val); console.log('Versuche, mich bei UniFi anzumelden...'); const unifi = new Unifi.Controller({ hostname: config.hostname, port: config.port, sslverify: config.sslverify }); await unifi.login(config.username, config.password) .then(loginData => { console.log('Login erfolgreich: ' + JSON.stringify(loginData)); }) .catch(error => { console.log('ERROR: ' + error); }); try { // Lese die Konfigurationswerte aus den Datenpunkten const minutes = 12223//getState("0_userdata.0.Unifi.Voucher.config.minutes").val; const count = 1//getState("0_userdata.0.Unifi.Voucher.config.count").val; const quota = null//getState("0_userdata.0.Unifi.Voucher.config.quota").val; const note = "newnewnew"// getState("0_userdata.0.Unifi.Voucher.config.note").val; const up = null//getState("0_userdata.0.Unifi.Voucher.config.up").val; const down = null//getState("0_userdata.0.Unifi.Voucher.config.down").val; const megabytes = null //getState("0_userdata.0.Unifi.Voucher.config.megabytes").val; // Erzeuge einen neuen Voucher console.log('Trigger aktiviert, erstelle neuen Voucher...'); const clientVoucher = await unifi.createVouchers( minutes, count, quota, note, up, down, megabytes ).catch(error => { console.log('Fehler beim Anlegen: ' + error);rausHier();setState('0_userdata.0.Unifi.Voucher.trigger', false); });; console.log('Voucher erstellt: ' + JSON.stringify(clientVoucher)); // Erfasse die create_time des erstellten Vouchers const newVoucherCreateTime = clientVoucher[0].create_time; // Hole nur den neuesten Voucher basierend auf create_time console.log('Hole den neuesten Voucher...'); const myVoucher = await unifi.getVouchers(newVoucherCreateTime); console.log("Neuester Voucher: " + JSON.stringify(myVoucher)); rausHier(); // Schreibe die Voucher-Daten in den Datenpunkt "latestJson" console.log('Schreibe Voucher-Daten in den Datenpunkt "latestJson"...'); setState('0_userdata.0.Unifi.Voucher.data.latestJson', JSON.stringify(myVoucher)); // Extrahiere die Werte aus dem Voucher-Objekt und setze die Datenpunkte const voucher = myVoucher[0]; setState('0_userdata.0.Unifi.Voucher.data.code', voucher.code); setState('0_userdata.0.Unifi.Voucher.data.duration', voucher.duration); setState('0_userdata.0.Unifi.Voucher.data.qos_overwrite', voucher.qos_overwrite); setState('0_userdata.0.Unifi.Voucher.data.note', voucher.note); setState('0_userdata.0.Unifi.Voucher.data.for_hotspot', voucher.for_hotspot); setState('0_userdata.0.Unifi.Voucher.data.create_time', voucher.create_time); setState('0_userdata.0.Unifi.Voucher.data.quota', voucher.quota); setState('0_userdata.0.Unifi.Voucher.data.site_id', voucher.site_id); setState('0_userdata.0.Unifi.Voucher.data.admin_name', voucher.admin_name); setState('0_userdata.0.Unifi.Voucher.data.used', voucher.used); setState('0_userdata.0.Unifi.Voucher.data.status', voucher.status); setState('0_userdata.0.Unifi.Voucher.data.status_expires', voucher.status_expires); // Setze den Trigger wieder auf false console.log('Setze den Trigger wieder auf false...'); setState('0_userdata.0.Unifi.Voucher.trigger', false); } catch (error) { console.log('ERROR: ' + error); } }); async function rausHier() { console.log('Logout bei UniFi...'); await unifi.logout() .then(() => { console.log('Logout erfolgreich.'); }) .catch(error => { console.log('Fehler beim Logout: ' + error); }); }
VORSICHT - habe Konfigurationswerte geändert - zeile 49 ff
mh es klappt. was hast du denn nun geändert? das logout hatte ich auch schon mal extern ausgeführt allerdings ohne das const unifi....
muss meins nochmal überarbeiten
-
denke das verschieben war es:
//const unifi = new Unifi.Controller({ hostname: config.hostname, port: config.port, sslverify: config.sslverify });
und das await vor login und logout sollte auch wichtig sein
-
jo möglich. bei mir läuft es nun. habs mal auf github geladen: https://github.com/vr6syncro/ioBroker-Unifi-Voucher-Script
-
in diesem script habe ich noch was geändert https://forum.iobroker.net/post/1165701
das rausHier() habe ich wieder reingenommen - außerhalb von on(..) ist unifi.logout nicht wirklich definiert - funktioniert zwar - aber stimmt irgendwie nicht
vielleicht magst du es anpassen
-
@liv-in-sky so ist aktualisiert
-
@kmxak Ich versuche gerade dein Skript in Betrieb zu nehmen.
Das hier hab ich gemacht:
node-unifi Paket installiert im Javascript AdapterMuss ich für diesen Schritt
UniFi Controller mit API-Zugriff sowie ein Wifi Operator Account
noch etwas im Unifi Controller aktivieren? Was ist der Wifi Operator Account?Wenn ich das Skript starte kommt folgendes im Log:
javascript.0 2024-06-01 22:52:52.807 error script.js.Skripte.Netzwerk.Unifi_vouchers_generieren: ERROR: TypeError: Cannot read properties of undefined (reading '0') javascript.0 2024-06-01 22:52:52.803 error script.js.Skripte.Netzwerk.Unifi_vouchers_generieren: Fehler beim Logout: Error: getaddrinfo ENOTFOUND unifi javascript.0 2024-06-01 22:52:52.689 error script.js.Skripte.Netzwerk.Unifi_vouchers_generieren: ERROR: Error: getaddrinfo ENOTFOUND unifi javascript.0 2024-06-01 22:52:44.165 info script.js.Skripte.Netzwerk.Unifi_vouchers_generieren: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 2024-06-01 22:52:44.116 info Start JavaScript script.js.Skripte.Netzwerk.Unifi_vouchers_generieren (Javascript/js)
-
@feuersturm sagte in Adapter: ioBroker.unifi:
Was ist der Wifi Operator Account
den kann man unter Administratoren anlegen im Unifi Portal .
Es kommt aber bei meinem Versuch hier die gleichen Fehlermeldungen wie bei dir.
-
@feuersturm hast du dir die neuste version von github runtergeladen ?
-
@liv-in-sky ja ich hab gestern Abend den v03 Stand von GitHub verwendet.
Den Hotspot Manager hatte ich auch noch gefunden und auch angelegt aber der Fehler bleibt. -
poste bitte das ganze log vom script - kopiert von der admin-log-seite
-
@liv-in-sky
mehr log gibt es bei mir da nicht -
bei mir sieht das so aus
javascript.0 2024-06-02 07:30:18.729 info script.js.MYSTUFF.ALLERLEI.AAAUNIFI.unifi-wlan-schalten-draexler: Logout erfolgreich. javascript.0 2024-06-02 07:30:18.680 info script.js.MYSTUFF.ALLERLEI.AAAUNIFI.unifi-wlan-schalten-draexler: Logout bei UniFi... javascript.0 2024-06-02 07:30:18.680 info script.js.MYSTUFF.ALLERLEI.AAAUNIFI.unifi-wlan-schalten-draexler: Neuester Voucher: [{"duration":12223,"qos_overwrite":false,"note":"newne222wnew","code":"3709308106","for_hotspot":false,"create_time":1717306218,"quota":1,"site_id":"5cadc7f53b6a3967dd7e5369","_id":"665c036aa29b27114a1acdf3","admin_name":"e","used":0,"status":"VALID_ONE","status_expires":0},{"duration":123,"qos_overwrite":false,"note":"testthis","code":"8764054636","for_hotspot":false,"create_time":1717306218,"quota":0,"site_id":"5cadc7f53b6a3967dd7e5369","_id":"665c036aa29b27114a1acdf1","admin_name":"e","used":0,"status":"VALID_MULTI","status_expires":0}] javascript.0 2024-06-02 07:30:18.652 info script.js.MYSTUFF.ALLERLEI.AAAUNIFI.unifi-wlan-schalten-draexler: Hole den neuesten Voucher... javascript.0 2024-06-02 07:30:18.652 info script.js.MYSTUFF.ALLERLEI.AAAUNIFI.unifi-wlan-schalten-draexler: Voucher erstellt: [{"create_time":1717306218}] javascript.0 2024-06-02 07:30:18.630 info script.js.MYSTUFF.ALLERLEI.AAAUNIFI.unifi-wlan-schalten-draexler: Trigger aktiviert, erstelle neuen Voucher... javascript.0 2024-06-02 07:30:18.630 info script.js.MYSTUFF.ALLERLEI.AAAUNIFI.unifi-wlan-schalten-draexler: Login erfolgreich: true javascript.0 2024-06-02 07:30:18.288 info script.js.MYSTUFF.ALLERLEI.AAAUNIFI.unifi-wlan-schalten-draexler: Versuche, mich bei UniFi anzumelden... javascript.0 2024-06-02 07:30:18.288 info script.js.MYSTUFF.ALLERLEI.AAAUNIFI.unifi-wlan-schalten-draexler: Trigger-Datenpunkt geändert: true
-
@adnim schon mal die javascript instanz neugestartet
-
ja habe ich und auch die info gesehen das "node-unifi" installiert wird.
javascript.0 2024-06-02 08:16:31.172 error script.js.common.unifivoucher: ERROR: TypeError: Cannot read properties of undefined (reading '0') javascript.0 2024-06-02 08:16:31.172 error script.js.common.unifivoucher: Fehler beim Logout: Error: getaddrinfo ENOTFOUND unifi javascript.0 2024-06-02 08:16:31.149 error script.js.common.unifivoucher: ERROR: Error: getaddrinfo ENOTFOUND unifi admin.0 2024-06-02 08:16:22.436 info <== Disconnect system.user.admin from 192.165.175.19 javascript javascript.0 2024-06-02 08:16:17.914 info script.js.common.unifivoucher: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
-
@adnim poste mal dein script
-
@adnim ohne login daten
-
// V0.1 initialer release // V0.2 Fixed Login/Logout, THX to liv-in-sky. Changed Log output // V0.3 moved logout, THX to liv-in-sky. const Unifi = require('node-unifi'); // Konfiguration const config = { hostname: "192.165.175.201", port: '8443', // 443 UDM Pro, 8443 für andere Controller username: 'hotspot-manager', password: 'xxxx', sslverify: false }; // Erstelle die benötigten Datenpunkte für die Voucher-Konfiguration createState("0_userdata.0.Unifi.Voucher.config.minutes", 123, { type: 'number', name: 'minutes', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.config.count", 1, { type: 'number', name: 'count', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.config.quota", 0, { type: 'number', name: 'quota', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.config.note", "testthis", { type: 'string', name: 'note', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.config.up", null, { type: 'number', name: 'up', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.config.down", null, { type: 'number', name: 'down', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.config.megabytes", null, { type: 'number', name: 'megabytes', read: true, write: true }); // Erstelle die benötigten Datenpunkte für die Voucher-Daten createState("0_userdata.0.Unifi.Voucher.data.latestJson", "{}", { type: 'string', name: 'latestJson', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.code", "", { type: 'string', name: 'code', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.duration", 0, { type: 'number', name: 'duration', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.qos_overwrite", false, { type: 'boolean', name: 'qos_overwrite', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.note", "", { type: 'string', name: 'note', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.for_hotspot", false, { type: 'boolean', name: 'for_hotspot', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.create_time", 0, { type: 'number', name: 'create_time', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.quota", 0, { type: 'number', name: 'quota', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.site_id", "", { type: 'string', name: 'site_id', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.admin_name", "", { type: 'string', name: 'admin_name', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.used", 0, { type: 'number', name: 'used', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.status", "", { type: 'string', name: 'status', read: true, write: true }); createState("0_userdata.0.Unifi.Voucher.data.status_expires", 0, { type: 'number', name: 'status_expires', read: true, write: true }); // Erstelle den Datenpunkt für den Trigger createState("0_userdata.0.Unifi.Voucher.trigger", false, { type: 'boolean', name: 'trigger', read: true, write: true }); let lastVoucherCreateTime = 0; // Speichert die create_time des letzten erstellten Vouchers // Reagiere auf Änderungen des Datenpunkts "trigger" on({ id: '0_userdata.0.Unifi.Voucher.trigger', change: 'ne', val: true }, async (obj) => { console.debug('Trigger-Datenpunkt geändert: ' + obj.state.val); console.debug('Versuche, mich bei UniFi anzumelden...'); const unifi = new Unifi.Controller({ hostname: config.hostname, port: config.port, sslverify: config.sslverify }); await unifi.login(config.username, config.password) .then(loginData => { console.debug('Login erfolgreich: ' + JSON.stringify(loginData)); }) .catch(error => { console.error('ERROR: ' + error); }); try { // Lese die Konfigurationswerte aus den Datenpunkten const minutes = getState("0_userdata.0.Unifi.Voucher.config.minutes").val; const count = getState("0_userdata.0.Unifi.Voucher.config.count").val; const quota = getState("0_userdata.0.Unifi.Voucher.config.quota").val; const note = getState("0_userdata.0.Unifi.Voucher.config.note").val; const up = getState("0_userdata.0.Unifi.Voucher.config.up").val; const down = getState("0_userdata.0.Unifi.Voucher.config.down").val; const megabytes = getState("0_userdata.0.Unifi.Voucher.config.megabytes").val; // Erzeuge einen neuen Voucher console.debug('Trigger aktiviert, erstelle neuen Voucher...'); const clientVoucher = await unifi.createVouchers( minutes, count, quota, note, up, down, megabytes ).catch(async error => { console.debug('Fehler beim Anlegen: ' + error); console.debug('Logout bei UniFi...'); await unifi.logout().then(() => { console.debug('Logout erfolgreich.'); }).catch(error => { console.error('Fehler beim Logout: ' + error); }); setState('0_userdata.0.Unifi.Voucher.trigger', false); }); console.debug('Voucher erstellt: ' + JSON.stringify(clientVoucher)); // Erfasse die create_time des erstellten Vouchers const newVoucherCreateTime = clientVoucher[0].create_time; // Hole nur den neuesten Voucher basierend auf create_time console.debug('Hole den neuesten Voucher...'); const myVoucher = await unifi.getVouchers(newVoucherCreateTime); console.debug("Neuester Voucher: " + JSON.stringify(myVoucher)); console.debug('Logout bei UniFi...'); await unifi.logout().then(() => { console.debug('Logout erfolgreich.'); }).catch(error => { console.error('Fehler beim Logout: ' + error); }); // Schreibe die Voucher-Daten in den Datenpunkt "latestJson" console.debug('Schreibe Voucher-Daten in den Datenpunkt "latestJson"...'); setState('0_userdata.0.Unifi.Voucher.data.latestJson', JSON.stringify(myVoucher)); // Extrahiere die Werte aus dem Voucher-Objekt und setze die Datenpunkte const voucher = myVoucher[0]; setState('0_userdata.0.Unifi.Voucher.data.code', voucher.code); setState('0_userdata.0.Unifi.Voucher.data.duration', voucher.duration); setState('0_userdata.0.Unifi.Voucher.data.qos_overwrite', voucher.qos_overwrite); setState('0_userdata.0.Unifi.Voucher.data.note', voucher.note); setState('0_userdata.0.Unifi.Voucher.data.for_hotspot', voucher.for_hotspot); setState('0_userdata.0.Unifi.Voucher.data.create_time', voucher.create_time); setState('0_userdata.0.Unifi.Voucher.data.quota', voucher.quota); setState('0_userdata.0.Unifi.Voucher.data.site_id', voucher.site_id); setState('0_userdata.0.Unifi.Voucher.data.admin_name', voucher.admin_name); setState('0_userdata.0.Unifi.Voucher.data.used', voucher.used); setState('0_userdata.0.Unifi.Voucher.data.status', voucher.status); setState('0_userdata.0.Unifi.Voucher.data.status_expires', voucher.status_expires); // Setze den Trigger wieder auf false console.debug('Setze den Trigger wieder auf false...'); setState('0_userdata.0.Unifi.Voucher.trigger', false); } catch (error) { console.error('ERROR: ' + error); } });
ist hier irgendwo noch ein Unifi- unifi Typo drin?
-
@adnim wäre es ein problem, mal den iob server neuzustarten
ich möchte sicherstellen, das absolut keine alten programmteile irgendwo im system sind
es kommt ja nicht in den trigger - wann kommt der fehler ? beim speichern des scriptes oder beim ersten trigger