NEWS
Adapter: ioBroker.unifi
-
Hallo zusammen,
ich versuche auch das script zum laufen zu bekommen leider funktioniert weder der io.broker
host.ioBroker 2018-04-08 13:38:14.410 info Restart adapter system.adapter.unifi.0 because enabled host.ioBroker 2018-04-08 13:38:14.409 error instance system.adapter.unifi.0 terminated with code 0 (OK) host.ioBroker 2018-04-08 13:38:14.409 error Caught by controller[0]: at traverseArray (/opt/iobroker/node_modules/iobroker.unifi/main.js:165:7) host.ioBroker 2018-04-08 13:38:14.409 error Caught by controller[0]: at Array.every (native) host.ioBroker 2018-04-08 13:38:14.409 error Caught by controller[0]: at /opt/iobroker/node_modules/iobroker.unifi/main.js:168:7 host.ioBroker 2018-04-08 13:38:14.409 error Caught by controller[0]: at traverse (/opt/iobroker/node_modules/iobroker.unifi/main.js:155:5) host.ioBroker 2018-04-08 13:38:14.408 error Caught by controller[0]: at traverseObject (/opt/iobroker/node_modules/iobroker.unifi/main.js:178:27) host.ioBroker 2018-04-08 13:38:14.408 error Caught by controller[0]: at /opt/iobroker/node_modules/iobroker.unifi/main.js:288:13 host.ioBroker 2018-04-08 13:38:14.408 error Caught by controller[0]: at traverse (/opt/iobroker/node_modules/iobroker.unifi/main.js:155:5) host.ioBroker 2018-04-08 13:38:14.408 error Caught by controller[0]: at traverseObject (/opt/iobroker/node_modules/iobroker.unifi/main.js:184:7) host.ioBroker 2018-04-08 13:38:14.408 error Caught by controller[0]: at traverse (/opt/iobroker/node_modules/iobroker.unifi/main.js:156:32) host.ioBroker 2018-04-08 13:38:14.407 error Caught by controller[0]: at /opt/iobroker/node_modules/iobroker.unifi/main.js:292:57 host.ioBroker 2018-04-08 13:38:14.406 error Caught by controller[0]: TypeError: Cannot read property 'subsystem' of null unifi.0 2018-04-08 13:38:14.309 info cleaned everything up... unifi.0 2018-04-08 13:38:14.309 error TypeError: Cannot read property 'subsystem' of null at /opt/iobroker/node_modules/iobroker.unifi/main.js:292:57 at traverse (/opt/iobroker/node_modules/iobroker.unifi/main.js:156:32) at tr unifi.0 2018-04-08 13:38:14.309 error uncaught exception: Cannot read property 'subsystem' of null unifi.0 2018-04-08 13:38:14.307 info getSitesStats: default unifi.0 2018-04-08 13:38:11.415 info controller = 192.168.1.2:8443 unifi.0 2018-04-08 13:38:11.415 info update_interval = 60 unifi.0 2018-04-08 13:38:11.413 info Starting UniFi-Controller query unifi.0 2018-04-08 13:38:11.386 info starting. Version 0.3.1 in /opt/iobroker/node_modules/iobroker.unifi, node: v6.14.1 host.ioBroker 2018-04-08 13:38:09.997 info instance system.adapter.unifi.0 started with pid 24216 host.ioBroker 2018-04-08 13:38:09.944 info object change system.adapter.unifi.0
noch findet das script irgendjemanden im netz läuft aber fehlerfrei durch.
die Variablen hab ich natürlich an meine angepasst (Aus Objekte)
`/* * unifi_pdetect v0.1 (29.09.2017) * * Copyright (c) 2017 Jens Maus <mail@jens-maus.de> * */ /* define actual user devices here */ var user_devices = []; user_devices['80:B0:3D:E3:B6:11'] = 'Debbie'; user_devices['6C:8D:C1:51:F3:33'] = 'Lorena'; user_devices['CC:20:E8:B5:8A:53'] = 'Gina'; user_devices['b0:19:c6:a6:91:28'] = 'Micha'; user_devices['B8:53:AC:1C:E6:B2'] = 'Silvia'; /* define here devices that you 'know', thus should * be ignored */ var known_devices=[ "AA:BB:CC:DD:EE:FF", "AA:BB:CC:DD:EE:FF", "AA:BB:CC:DD:EE:FF"]; /* Enum list of all combinations of users+guest */ var enum_list = []; enum_list[0] = "Niemand"; enum_list[1] = "Debbie"; enum_list[2] = "Lorena"; enum_list[3] = "Debbie,Lorena"; enum_list[4] = "Gina"; enum_list[5] = "Debbie,Gina"; enum_list[6] = "Debbie,Lorena,Gina"; enum_list[7] = "Lorena,Gina"; enum_list[8] = "Micha"; enum_list[9] = "Debbie,Micha"; enum_list[11] = "Debbie,Lorena,Micha"; enum_list[12] = "Debbie,Lorena,Gina,Micha"; enum_list[13] = "Lorena,Gina,Micha"; enum_list[14] = "Debbie,Gina,Micha"; enum_list[15] = "Gina,Micha"; enum_list[16] = "Lorena,Micha"; enum_list[17] = "Silvia"; enum_list[18] = "Debbie,Silvia"; enum_list[19] = "Lorena,Silvia"; enum_list[20] = "Gina,Silvia"; enum_list[21] = "Micha,Silvia"; enum_list[22] = "Debbie,Lorena,Silvia"; enum_list[23] = "Debbie,Gina,Silvia"; enum_list[24] = "Debbie,Micha,Silvia"; enum_list[25] = "Debbie,Lorena,Gina,Silvia"; enum_list[26] = "Debbie,Lorena,Micha,Silvia"; enum_list[27] = "Debbie,Gina,Micha,Silvia"; enum_list[28] = "Lorena,Gina,Micha,Silvia"; enum_list[29] = "Gast"; enum_list[30] = "Debbie,Gast"; enum_list[31] = "Silvia,Gast"; enum_list[32] = "Lorena,Gast"; enum_list[33] = "Gina,Gast"; enum_list[34] = "Micha,Gast"; enum_list[35] = "Debbie,Lorena,Gast"; enum_list[36] = "Debbie,Gina,Gast"; enum_list[37] = "Debbie,Micha,Gast"; enum_list[38] = "Debbie,Silvia,Gast"; enum_list[39] = "Debbie,Gina,Gast"; enum_list[40] = "Debbie,Lorena,Micha,Gast"; enum_list[41] = "Debbie,Lorena,Silvia,Gast"; enum_list[42] = "Debbie,Lorena,Gina,Gast"; enum_list[43] = "Debbie,Lorena,Micha,Silvia,Gast"; enum_list[44] = "Debbie,Lorena,Gina,Silvia,Gast"; enum_list[45] = "Debbie,Lorena,Gina,Micha,Gast"; enum_list[46] = "Debbie,Lorena,Gina,Micha,Silvia,Gast"; /* Path to system variables on CCU */ var sysvar_prefix= "Anwesenheit"; var sysvar_user = "hm-rega.0.4659"/*Anwesenheit.Lorena*/; var sysvar_user = "hm-rega.0.4660"/*Anwesenheit.Debbie*/; var sysvar_user = "hm-rega.0.4661"/*Anwesenheit.Micha*/; var sysvar_user = "hm-rega.0.4662"/*Anwesenheit.Silvia*/; var sysvar_user = "hm-rega.0.4663"/*Anwesenheit.Gina*/; var sysvar_user = "hm-rega.0.4664"/*Anwesenheit.Nutzer*/; var sysvar_guest = "hm-rega.0.14516"/*Anwesenheit.Gast*/; var sysvar_str = "hm-rega.0.4666"/*Anwesenheit.string*/; /* Unifi controller settings */ var unifi_ip = "192.168.XXX.XXX"; var unifi_port = 8443; var unifi_user = "XXXXXX"; var unifi_pw = "XXXXXX"; /***********************************/ /* Don't modify anything from here */ function check_presence() { var unifi = require('node-unifi'); var controller = new unifi.Controller(unifi_ip, unifi_port); var guest_found = false; var users_found = []; var tmp = known_devices.join('~').toUpperCase(); known_devices = tmp.split('~'); // LOGIN controller.login(unifi_user, unifi_pw, function(err) { if(err) { console.log('ERROR: ' + err); return; } // GET SITE STATS controller.getSitesStats(function(err, sites) { // GET CLIENT DEVICES controller.getClientDevices(sites[0].name, function(err, client_data) { //log('curtime: ' + Math.floor((new Date).getTime()/1000)); for (var i=0; i < client_data[0].length; i++) { if(typeof(client_data[0][i].ip) !== 'undefined' && client_data[0][i].ip) { if(typeof(client_data[0][i]._last_seen_by_uap) !== 'undefined' && client_data[0][i]._last_seen_by_uap) { //log(client_data[0][i].mac + " " + client_data[0][i]._last_seen_by_uap + " " + client_data[0][i].idletime + " " + client_data[0][i].ip + " " + client_data[0][i].hostname + " " + client_data[0][i].is_guest); var user_device = user_devices[client_data[0][i].mac.toUpperCase()]; if(typeof(user_device) !== 'undefined') { //log('user device[' + user_device + ']: ' + client_data[0][i].mac.toUpperCase() + ' ' + client_data[0][i].hostname + ' - idle: ' + client_data[0][i].idletime); users_found.push(user_device); } else if(known_devices.indexOf(client_data[0][i].mac.toUpperCase()) === -1) { //log('guest device found: ' + client_data[0][i].mac.toUpperCase() + ': ' + client_data[0][i].hostname + ' - idle: ' + client_data[0][i].idletime); guest_found = true; } } } } controller.logout(); if(getState(sysvar_user).val !== (users_found.length > 0)) { setState(sysvar_user, (users_found.length > 0)); } var presence_string = ""; var num_presence = 0; for (var j in user_devices) { var user_present = users_found.indexOf(user_devices[j]) !== -1; if(user_present === true) { if(num_presence > 0) presence_string += ","; presence_string += user_devices[j]; num_presence++; } var id = getIdByName(sysvar_prefix + '.' + user_devices[j]); if(typeof(id) !== 'undefined' && id) { if(getState(id).val !== user_present) { setState(id, user_present); log("User '" + user_devices[j] + "' changed present state: " + user_present); } } } // find out if guest mode is already on or off and then we switch it // accordingly if(getState(sysvar_guest).val !== guest_found) { setState(sysvar_guest, guest_found); log('Guest mode set to ' + guest_found); } if(guest_found === true) { if(num_presence > 0) presence_string += ","; presence_string += "Gast"; } if(getState(sysvar_str).val !== presence_string) { setState(sysvar_str, presence_string); } var enum_id = enum_list.indexOf(presence_string); if(enum_id === -1) enum_id = 0; if(getState(sysvar_list).val !== enum_id) { setState(sysvar_list, enum_id); } }); }); }); } schedule("*/15 * * * * *", function () { // Execute every 15 seconds check_presence(); });</mail@jens-maus.de>` Die Variable List hab ich erst mal rausgenommen Kann es sein das der Cloud Controller nicht unterstützt wird ? Version 5.7.20 Oder muss ich die APi irgendwo einschalten ? ich kann nichts finden. Vielen Dank im Voraus[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
-
Wenn ich am Sonntag aus dem Urlaub zurück bin, schaue ich mir die Systemlast meines Controllers mal an. `
Hallo Eric, kannst du hierzu noch mal etwas sagen? Bevor ich nun den Controller auf dem Pi installiere und mir alles zerschieße.Danke dir!
-
Ich verstehe zwar nicht genau was du meinst, aber ich denke ich kann dir trotzdem helfen.
Unifi Controler auf Raspi 3 - funktioniert
Unifi Controler UND ioBroker auf Raspi 3 - Funktioniert, aber System voll ausgelastet und alles sehr sehr langsam
Von daher würde ich empfehlen den Controler entweder auf einem separaten Raspi oder dem PC laufen lassen.
Zur Überwachung über ioBroker brauchst du den Controler nicht und im laufenden Betrieb wird der auch nicht gebraucht.
Wenn du also nicht dauernd am WLan was verändern willst reicht eigentlich die Installation auf dem PC.
-
Moin,
Hallo Eric, kannst du hierzu noch mal etwas sagen? Bevor ich nun den Controller auf dem Pi installiere und mir alles zerschieße.
Danke dir! `
auf einem eigenen Raspi müsste es gehen.Die CPU ist bei mir kein Problem (3-5% der virtuellen CPU), aber RAM ist nicht ohne (2 GB von den zugewiesenen 4 GB in Benutzung) - wobei das auch ein normales Verhalten sein kann (genug d! Also nehme ich mal).
Gruß,
Eric
Von unterwegs getippert
-
Bei mir läuft der Controller auch in einer virtuellen Maschine mit Ubuntu Server und 500 MB RAM. Oberfläche flüssig und zur Abfrage der Anwesenheit völlig ausreichend.
Lief zuvor auch auf einem Pi 3 parallel zu meinem Magic Mirror und CCU Historian ohne Probleme.
Gruß Alex
-
Hallo,
mein unifi-Controller läuft auf einem MacMini unter OS X 24/7 und braucht etwas über 100MB. Der ioBroker Adapter knapp 40MB.
Gruß
Pix
-
Hallo Jens
gerade Adapter installiert. Läuft soweit. Muss nur mal die Möglichenkeiten ausloten. Aber feine Sache
-
im Uinifi Controller gibt es einen neuen Nutzer der Read only hat. (Als Admin gehts auch nicht)
Der Adapter meckert zwar nicht, aber es werden keine Objekte angelegt. In den Logs sieht es dann so aus.
unifi.0 2018-05-02 14:11:15.279 info ERROR: Error: getaddrinfo ENOTFOUND http http:443 unifi.0 2018-05-02 14:11:14.319 info controller = http://192.168.X.X/:8443 unifi.0 2018-05-02 14:11:14.319 info update_interval = 60 unifi.0 2018-05-02 14:11:14.317 info Starting UniFi-Controller query unifi.0 2018-05-02 14:11:14.296 info starting. Version 0.3.1 in /opt/iobroker/node_modules/iobroker.unifi, node: v6.14.1
Hat jemand eine Idee?
-
Kann man den Unifi Adapter verwenden, um die Anwesenheit von bestimmten Geräten zu nutzen??? Wenn ja, welcher FLAG ist das????
-
Hi,
ich möchte auch gerne die An-Abwesenheits steuerung über den Unifi Adapter machen.
Installiert ist alles und die Daten kommen beim IOBroker an.
Nun möchte ich den last_seen Zeitstempel nutzen und wenn dieser upgedatet wird, dann bin ich anwesend und wenn nicht, dann abwesend.
Variable auf der CCU2 ist angelegt, wir aber leider nicht gefüllt
Ich bekomme das in Blockly irgendwie nicht hin…
Kann mir da bitte jemand unter die Arme greifen.. `
Folgendes Blockly Script läuft bei mir sehr gut mit Unifi für die Anwesenheit. Anstatt last_seen habe ich uptime_by_uap. Musst nur den client anpassen, hier wird alle 2 Minuten getriggert:Unbenannt.JPG
Blockly Import:
! <xml 1999/xmlns="<URL url=" http:/www.w3.org/xhtml"="">http://www.w3.org/1999/xhtml">
! <block type="create" id="LcnDrYS;;Bc/!E+1GuwZ" x="-837" y="13"><field name="NAME">Variablen.ICH_UAP</field></block>
! <block type="schedule" id="{@eI25!GvKfragf.dsL" x="-837" y="113"><field name="SCHEDULE">*/2 * * * *</field> ! <statement name="STATEMENT"><block type="controls_if" id="B+@.|[Ga9L/N^}7kRBv,"><mutation else="1"></mutation> ! <value name="IF0"><block type="logic_compare" id="CniS*}L/,0cF#N|nCepx"><field name="OP">EQ</field> ! <value name="A"><block type="logic_compare" id="T_r[9FxM%kil?c^0EZ:J"><field name="OP">LT</field> ! <value name="A"><block type="math_arithmetic" id="B%^IgKuzuM5{246Y!m,(" inline="false"><field name="OP">MINUS</field> ! <value name="A"><shadow type="math_number" id="G5:q#-9.sd2K90TfdAJ
"><field name="NUM">1</field></shadow>
! <block type="get_value" id="gC-urCBA/^%84(j=^i*"><field name="ATTR">lc</field> ! <field name="OID">unifi.0.default.clients.++MAC-Adresse._uptime_by_uap</field></block></value> ! <value name="B"><shadow type="math_number" id="zYRKTi[[k_,%fr.8Vy7M"><field name="NUM">1</field></shadow> ! <block type="math_arithmetic" id="]J~)QBR4cH/jiG*lz?UL"><field name="OP">MINUS</field> ! <value name="A"><shadow type="math_number" id="XX}xF%B/_0,1}l~
SgW-"><field name="NUM">1</field></shadow>
! <block type="time_get" id="-4r2Is(JCg_?:Ms_v+Y"><mutation format="false" language="false"></mutation> ! <field name="OPTION">object</field></block></value> ! <value name="B"><shadow type="math_number" id="rCdNrAEh^
-FoWAxGU~G"><field name="NUM">120000</field></shadow></value></block></value></block></value>
! <value name="B"><block type="math_number" id="DLCYi/V][Pj-{RpP]JE{"><field name="NUM">0</field></block></value></block></value>
! <value name="B"><block type="logic_boolean" id="]F~s0eAM%+j//mq0
GH"><field name="BOOL">TRUE</field></block></value></block></value>
! <statement name="DO0"><block type="control" id="o;yBJXcmet8(TwXWJlMf"><mutation delay_input="false"></mutation>
! <field name="OID">javascript.0.Variablen.ICH_UAP</field>
! <field name="WITH_DELAY">FALSE</field>
! <value name="VALUE"><block type="logic_boolean" id="JD=F=FX|FbaZIy,OPphL"><field name="BOOL">FALSE</field></block></value></block></statement>
! <statement name="ELSE"><block type="control" id="GrHf7?!*t8yz{3P2n=w="><mutation delay_input="false"></mutation>
! <field name="OID">javascript.0.Variablen.ICH_UAP</field>
! <field name="WITH_DELAY">FALSE</field>
! <value name="VALUE"><block type="logic_boolean" id="zTf,][x}2(Hs!fMBWgz:"><field name="BOOL">TRUE</field></block></value></block></statement></block></statement></block></xml> `Kann man statt alle 2 Minuten nicht auch den Wert _uptime_by_uap als Trigger nehmen? Wenn dieser geändert wird, soll das Skript auslösen. So hat man bei mehreren Geräten doch immer die genau Zeit oder?
-
Das wäre super. Dann würde die Anwesenheit sofort auf true springen. Für false finde ich die 2min OK.
-
Die Idee, die ich hatte funktioniert leider nicht.
Das Problem ist, dass die Uptime ja hochzählt. Bei Anwesenheit kann man sie also als Trigger verwenden.
Wenn man aber Abwesend ist, zählt die Uptime nicht mehr hoch und das Skript würde somit nicht mehr auslösen.
So wie ich das sehe bleibt nur die Möglichkeit mit einem Cron Trigger
-
Hallo zusammen,
ich habe da nochmal eine Frage Zu Anwesenheitserkennung.
Wenn ich nach Hause komme, wird die Anwesenheit innerhalb von 30 Sekuden erkannt.
Wenn ich das Haus verlassen, dauert es aber Minunten. Heute morgen z.B. 9 Minuten, bis das System erkannt hat, dass ich nicht mehr da bin.
Ist das normal? Das Blockly Skript zur Erkennung läuft alle 15 Sekunden
-
Hallo
Ich habe hier einen Workround entwickelt, der eine offizielle API von dem Unify Server nutzt:
#!/bin/bash export username= <username>export password= <password>export baseurl=https://localhost:8443 export site=default . unifi_sh_api unifi_api /upd/wlanconf/ <networkid>'{"enabled": true}'</networkid></password></username>
und zum ausschalten:````
unifi_api /upd/wlanconf/ <networkid>'{"enabled": false}'</networkid>Vielleicht hilfts jemandem noch :) `
Adarof, könntest Du das bitte nochmal etwas genauer erklären? Ich würde auch gerbne das WLAN per VIS-Script ein-/ausschalten wollen.
Was muss ich dazu einstellen?
-
Hallo zusammen,
ich habe da nochmal eine Frage Zu Anwesenheitserkennung.
Wenn ich nach Hause komme, wird die Anwesenheit innerhalb von 30 Sekuden erkannt.
Wenn ich das Haus verlassen, dauert es aber Minunten. Heute morgen z.B. 9 Minuten, bis das System erkannt hat, dass ich nicht mehr da bin.
Ist das normal? Das Blockly Skript zur Erkennung läuft alle 15 Sekunden `
Bei mir geht es schneller. Welches Script läuft bei dir? Meins läuft nur alle 2 min.Edit: habe mich vertan, siehe unten. 9min habe ich auch ungefähr.
-
Bei mir geht es schneller. Welches Script läuft bei dir? Meins läuft nur alle 2 min. `
-
Bei mir geht es schneller. Welches Script läuft bei dir? Meins läuft nur alle 2 min. `
anwesenheit.jpg `
Sorry, meine Aussage nach Gefühl war falsch. Nachdem ich die Haustür geschlossen habe, bin ich nach ca. 10min abwesend. Das Script fragt nur alle 2min nach und im Auto habe ich noch wlan Empfang. Also Abmeldung nach 7 - 8min kommt hin. Ist für mich ok. Das Anmeldung muss schneller gehen und tut es auch. Aber ich glaube da ist die Taktung die 60s des Aktualisierungsintervalls, da habe ich keine kürzeren Zeiten probiert, sind ja schon ziemlich viele Daten die jedesmal geholt werden, denke ich.Hab mal heute und gestern geschaut:
19.6: Tür zu:6:37:55
UAP false: 6:46:01
20.6: Tür zu: 7:16:00
UAP false: 7:26:01
-
Hallo zusammen,
ich habe da nochmal eine Frage Zu Anwesenheitserkennung.
Wenn ich nach Hause komme, wird die Anwesenheit innerhalb von 30 Sekuden erkannt.
Wenn ich das Haus verlassen, dauert es aber Minunten. Heute morgen z.B. 9 Minuten, bis das System erkannt hat, dass ich nicht mehr da bin.
Ist das normal? Das Blockly Skript zur Erkennung läuft alle 15 Sekunden `
Ich nutze das hm_pdetect Addon für die Homematic und werte da die Anwesenheit über unsere Smartphones aus. Das Addon prüft alle 15 Sekunden.
Bei mir ist es exakt genauso wie bei Dir. Diese Verzögerung scheint also mit dem Unifi Access Point zusammen zu hängen. Scheinbar werden die Geräte erst nach rund 10 Minuten in den Abwesenheitszustand versetzt, obwohl man schon längst nicht mehr im WLAN ist.
Die Frage ist, ob man da irgendwo ansetzen kann?
-
Hallo zusammen,
was ich bei meiner UniFi-Hardware etwas vermisse, ist ein (Monats-)Datenmengenzähler, wie ich ihn von meiner Fritzbox gewohnt war. Im UniFi-Controller gibt es zwar einen, aber der zählt die Gesamtdatenmenge seit Inbetriebnahme. Eleganter fände ich es, die Daten in eine DB zu schreiben und über Grafana in frei definierbaren Zeiträumen zu visualisieren. Aber leider scheitere ich daran, dass ich den entsprechenden Datenpunkt im iobroker bzw in den Objekten des UniFi-Adapters nicht finde. Weiß hier jemand, wo ich die Daten finde, die hier im Controller angezeigt werden?
-
Hallo
Ich habe hier einen Workround entwickelt, der eine offizielle API von dem Unify Server nutzt:
#!/bin/bash export username= <username>export password= <password>export baseurl=https://localhost:8443 export site=default . unifi_sh_api unifi_api /upd/wlanconf/ <networkid>'{"enabled": true}'</networkid></password></username>
und zum ausschalten:````
unifi_api /upd/wlanconf/ <networkid>'{"enabled": false}'</networkid>Vielleicht hilfts jemandem noch :) `
Adarof, könntest Du das bitte nochmal etwas genauer erklären? Ich würde auch gerbne das WLAN per VIS-Script ein-/ausschalten wollen.
Was muss ich dazu einstellen? `
Hallo
Das von mir sind Shell-Skripte; die müsstest Du auf den Raspi (oder ioBroker-Host) legen. Diese müssen dann aufgerufen werden aus ioBroker.
Bei mir geschieht das über ein Script (anbei) von einer CCU Variable.
Ich kann aber auch noch warnen: Leider verlieren beim umschalten alle WLAN-Verbindungen die Verbindung - die Unifi scheinen beim ein/ausschalten konzeptuell "alles" an WLAN neu zu starten.
2636_gastwlan.png