Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Über Datenpunkte iterieren und Inhalte auswerten

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Über Datenpunkte iterieren und Inhalte auswerten

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

      Hi zusammen,

      für ein neues Feature in meiner Heimautomation möchte ich mehrere Datenpunkte auswerten, weiß jedoch nicht, wie ich diese im Script greifen kann.
      Der Aufbau sieht so aus:

      unifi.0.default.clients.<mac_1>.essid
      unifi.0.default.clients.<mac_1>.last_seen
      unifi.0.default.clients.<mac_2>.essid
      unifi.0.default.clients.<mac_2>.last_seen
      ...
      unifi.0.default.clients.<mac_n>.essid
      unifi.0.default.clients.<mac_n>.last_seen

      Bildschirmfoto 2020-08-21 um 17.51.18.png

      Die Anzahl der Einträge ist unbekannt und kann sich jederzeit ändern. Jeder Eintrag besitzt jedoch immer die gleichen Datenpunkte.

      Hintergrund der Frage:
      Ich möchte gerne wissen, wieviele Teilnehmer sich aktuell im Gäste-WLAN befinden um in der Automation entsprechend darauf reagieren zu können. Die vorhandenen Datenpunkte reichen dafür leider nicht aus.

      Kann mir jemand auf die Sprünge helfen, die MAC-Adressen zu greifen und die darunter liegenden Datenpunkte für eine Auswertung heranzuziehen?

      Vielen Dank schonmal.

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @Hiltex last edited by paul53

        @Hiltex sagte:

        Die Anzahl der Einträge ist unbekannt und kann sich jederzeit ändern.

        Dann müssen zyklisch per $Selector die IDs ermittelt werden.

        schedule('* * * * *', function() {
           let ids = $('unifi.0.default.clients.*.essid');
           log('Anzahl Verbindungen: ' + ids.length);
           ids.each(function(id, i) {
              log('essid: ' + getState(id).val);
              log('MAC: ' + id.split('.')[4]);
           });
        });
        
        Hiltex 1 Reply Last reply Reply Quote 0
        • Hiltex
          Hiltex @paul53 last edited by

          @paul53 Besten Dank, das funktioniert wie gewünscht.

          Hiltex 1 Reply Last reply Reply Quote 0
          • Hiltex
            Hiltex @Hiltex last edited by

            Falls das noch jemand gebrauchen kann - hier der Code, der ansich funktioniert.
            Muss nur jeder für sich schauen, ob er andere Datenpunkte für die Auswertung heranziehen will, beispielsweise is_online. Da teste ich gerade noch, was besser passt. Im Moment frage ich ab, ob der jeweilige Client zuletzt mit dem Gast-WLAN verbunden war und in den letzten 2 Minuten gesehen wurde...

            In den Adaptereinstellungen kann man das Offset für is_online einstellen. Setzt man diesen Wert auf 0 ist der Wert nach ca. 2 Minuten false, wenn der Client das WLAN verlassen hat.

            Das Prinzip der Abfrage dürfte mit diesem Script klar werden.

            schedule("*/10 * * * * *", function () {
            
                var GuestClients = 0;
            
                //WLAN-Clients holen mit Datenpunkt, der immer vorhanden ist
                let Clients = $('unifi.0.default.clients.*.is_online');
            
                //Clients auswerten
                Clients.each(function(id, i) {
                    
                    //Datenpunkt abschneiden (Client erzeugen)
                    var Client = id.split('.is_online')[0];
            
                    var ClientESSID = Client + '.essid'
                    var ClientLastSeen = Client + '.last_seen_by_uap'
            
                    //Netzwerknamen des Clients abfragen
                    if (existsState(ClientESSID) && getState(ClientESSID).val == 'tremendous-Guest') {
                        
                        //Letzte Online-Zeit abfragen
                        if (existsState(ClientLastSeen)) {
            
                            var TimeLastSeen = getDateObject(getState(ClientLastSeen).val).getTime();
                            var TimeNow = new Date().getTime()
            
                            //Wenn Client in den letzten 2 Minuten gesehen wurde...
                            if (TimeNow - TimeLastSeen < 120000) {
                                ++GuestClients;
                            }
            
                        }
                    }
                });
            
                setState('0_userdata.0.Netzwerk.WLAN.Anzahl_Gäste', GuestClients, true);
                //log('Gäste im WLAN: ' + GuestClients.toString());
            });
            
            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            382
            Online

            31.8k
            Users

            80.0k
            Topics

            1.3m
            Posts

            javascript
            2
            4
            322
            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