Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Unifi Script

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Unifi Script

    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      Reese1 last edited by

      Hallo zusammen,

      nutzt hier eventuell jemand ein aktuelles script für den unifi adapter 0.70 und javascript 9.0.11 um die geräte in vis 1 anzeigen zu lassen? der unifi adapter läuft problemlos und die geräte werden im adapter unter unifi.0.default.clients angezeigt, hab schon zig Versionen was man so findet ausprobiert, leider lief keine da diese schon älter sind und mit javascript 9.0.11 scheinbar nicht laufen,

      Codierknecht ilovegym 2 Replies Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @Reese1 last edited by

        @reese1

        Hilft das hier?

        const devices = $('unifi.0.default.clients.*.is_online').toArray();
        const jsonId = '0_userdata.0.Monitoring.Unifi.Devices';
         
        function checkOnline() {
            let list = [];
            devices.forEach(function (id) {
                let deviceName = getState(id.replace('.is_online', '.name')).val;
                if (!deviceName) deviceName = getState(id.replace('.is_online', '.hostname')).val;
                const idIP = id.replace('.is_online', '.ip');
                const idLastSeen = id.replace('.is_online', '.last_seen_by_uap');
                const idMac = id.replace('.is_online', '.mac');
                let obj = {
                    "Name": deviceName,
                    "IP": getState(idIP).val,
                    "Online": getState(id).val,
                    "Aktiv": getState(idLastSeen).val,
                    "MAC": existsState(idMac) ?  getState(idMac).val : ''
                };    
                list.push(obj);
            });
            setState(jsonId, JSON.stringify(list), true);
        }
         
        on({id: devices, change: "ne"}, function(obj) {
            checkOnline();
        });
        
        checkOnline();
        
        R 1 Reply Last reply Reply Quote 0
        • ilovegym
          ilovegym @Reese1 last edited by

          @reese1

          Naja der javascript 9.x ist ja noch beta und da warte ich lieber auf das release und das changelog und docu, bevor ich meine scripte ändere..

          1 Reply Last reply Reply Quote 0
          • R
            Reese1 @Codierknecht last edited by

            @codierknecht
            danke aber sollte nicht unter 0_userdata.0. ein Ordner angelegt werden wo die entsprechenden geräte drinnen sind, zumindest finde ich diesen nicht

            Codierknecht 1 Reply Last reply Reply Quote 0
            • Codierknecht
              Codierknecht Developer Most Active @Reese1 last edited by

              @reese1 sagte in Unifi Script:

              sollte nicht unter 0_userdata.0. ein Ordner angelegt werden

              Alles unter 0_userdata.0 legst Du selbst an. Ich habe dort einen DP 0_userdata.0.Monitoring.Unifi.Devices der das JSON bekommt. Das wertet bei mir dann Grafana aus.

              Das soll kein fertiges Script sein, sondern als Anregung verstanden werden. Anpassungen auf die eigenen Wünsche sind dort mit Sicherheit noch notwendig.

              R 1 Reply Last reply Reply Quote 0
              • R
                Reese1 @Codierknecht last edited by Reese1

                @codierknecht

                danke dir, hab es hinbekommen, anzeige in vis geht auch 👍 👍

                M 1 Reply Last reply Reply Quote 0
                • M
                  MarkusL @Reese1 last edited by

                  @reese1 hallo zusammen, könntet Ihr mir bitte das genauer erklären? Der Adapter holt die DPs, das Script erstellt ein JSON ein nd das wiederum schickt Ihr an Grafana? Benutzt Ihr dort ein fertiges Dashboard ? Sorry, bin verwirrt… danke!

                  R 1 Reply Last reply Reply Quote 0
                  • R
                    Reese1 @MarkusL last edited by

                    @markusl

                    genau, der unifi adapter holt sich die Datenpunkte vom Cloud Gateway zb., dass script erstellt ein json in einem von dir erstellten Ordner, diese Daten kannst du dann zb. in vis mit einem table widget oder einem html widget anzeigen lassen, zu grafana kann ich nichts sagen, dass nutze ich nicht,

                    Negalein 1 Reply Last reply Reply Quote 0
                    • Negalein
                      Negalein Global Moderator @Reese1 last edited by

                      @reese1

                      kannst du dein fertiges Script hier zeigen?

                      R 1 Reply Last reply Reply Quote 0
                      • R
                        Reese1 @Negalein last edited by Reese1

                        klar, hier dass script dafür,

                        const jsonSource = '0_userdata.0.Monitoring.Unifi.Devices';
                        const jsonPathPrefix = '0_userdata.0.Monitoring.Unifi.DeviceList.';
                        
                        function updateDeviceList() {
                            const raw = getState(jsonSource).val;
                            if (!raw) return;
                        
                            let list;
                            try {
                                list = JSON.parse(raw);
                            } catch (e) {
                                log('Fehler beim Parsen des JSONs: ' + e, 'error');
                                return;
                            }
                        
                            list.forEach((device, index) => {
                                const base = jsonPathPrefix + index + '.';
                                setState(base + 'Name', device.Name || '', true);
                                setState(base + 'IP', device.IP || '', true);
                                setState(base + 'Online', device.Online || false, true);
                                setState(base + 'Aktiv', device.Aktiv || '', true);
                                setState(base + 'MAC', device.MAC || '', true);
                            });
                        }
                        
                        on({id: jsonSource, change: 'ne'}, updateDeviceList);
                        updateDeviceList();
                        
                        

                        und hier dass script zum erstellen des entsprechenden Ordner in objekte/0_userdata

                        // === KONFIGURATION ===
                        const jsonId = '0_userdata.0.Monitoring.Unifi.Devices';
                        const deviceSelector = $('unifi.0.default.clients.*.is_online');
                        
                        // === Datenpunkt erstellen, falls nicht vorhanden ===
                        if (!existsState(jsonId)) {
                            createState(jsonId, {
                                type: 'string',
                                name: 'UniFi Geräteübersicht',
                                read: true,
                                write: true,
                                def: '',
                                role: 'json'
                            }, () => {
                                log('Datenpunkt erstellt: ' + jsonId);
                                checkOnline(); // Direkt nach Erstellung ausführen
                            });
                        } else {
                            checkOnline(); // Falls vorhanden, direkt starten
                        }
                        
                        // === Hauptfunktion: Geräte einsammeln und JSON schreiben ===
                        function checkOnline() {
                            const devices = deviceSelector.toArray();  // Alle .is_online States
                            let list = [];
                        
                            devices.forEach(function (id) {
                                const idBase = id.replace('.is_online', '');
                                const name = getState(idBase + '.name')?.val || getState(idBase + '.hostname')?.val || 'Unbekannt';
                                const ip = getState(idBase + '.ip')?.val || '';
                                const mac = existsState(idBase + '.mac') ? getState(idBase + '.mac').val : '';
                                const lastSeen = getState(idBase + '.last_seen_by_uap')?.val || null;
                                const online = getState(id)?.val || false;
                        
                                list.push({
                                    "Name": name,
                                    "IP": ip,
                                    "Online": online,
                                    "Aktiv": lastSeen,
                                    "MAC": mac
                                });
                            });
                        
                            // JSON schreiben
                            setState(jsonId, JSON.stringify(list), true);
                            log('UniFi Geräte-JSON aktualisiert. Anzahl Geräte: ' + list.length, 'info');
                        }
                        
                        // === Trigger: Bei jeder Änderung eines is_online-Werts neu berechnen ===
                        on({ id: deviceSelector, change: "ne" }, function (obj) {
                            checkOnline();
                        });
                        
                        

                        so läut es momenten bei mir mit einem table widget in vis 1, ist zwar noch nicht perfekt aber es zeigt schon mal alles an,

                        1 Reply Last reply Reply Quote 1
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate
                        FAQ Cloud / IOT
                        HowTo: Node.js-Update
                        HowTo: Backup/Restore
                        Downloads
                        BLOG

                        889
                        Online

                        32.0k
                        Users

                        80.4k
                        Topics

                        1.3m
                        Posts

                        5
                        10
                        170
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo