Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Pi 3 als Bluetooth LE Scanner (Beispielscript)

    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

    Pi 3 als Bluetooth LE Scanner (Beispielscript)

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

      Ist denn der Bluetooth Dongle richtig installiert?

      Auf gut Glück gegoogelt:

      https://klenzel.de/3345

      1 Reply Last reply Reply Quote 0
      • K
        Kamikaze last edited by

        Hallo,

        bei mir ist nicht der Bluetooth-Dongle das Problem,

        pi@rasp-ccu:~ $ sudo hcitool lescan

        LE Scan …

        7C:2F:80:AD:C3:7F (unknown)

        7C:2F:80:AD:C3:7F Gigaset G-tag

        7C:2F:80:AD:C3:7F (unknown)

        7C:2F:80:AD:C3:7F Gigaset G-tag

        7C:2F:80:AD:C3:7F (unknown)

        sondern die noble installation.

        sudo npm install noble --production --prefix "/opt/iobroker/node_modules/iobroker.javascript"

        Die Fehlermeldungen sind in meinem vorherige Post enthalten.

        1 Reply Last reply Reply Quote 0
        • K
          Kamikaze last edited by

          Naja, wenn man es richtig macht, dann funktioniert es auch.

          Die Anleitung hatte ich ja schon abgearbeitet, ohne Erfolg. NAchdem ich aber die noble-Installation als root gemacht habe, lief alles durch, ohne Fehlermeldung.

          Ich habe zwar derzeit den Überblick verloren, wann ich eine Installation als normaler User machen kann, wann mit sudo und wann als root, aber jetzt funktiniert es.

          Danke und einen schönen Abend.

          1 Reply Last reply Reply Quote 0
          • ruhr70
            ruhr70 last edited by

            Hattest Du auch mal versucht, noble einfach in der Javascript Instanz einzutragen?

            Siehe im ersten Post:

            "2.) "noble" in der Javascript Instanz (Config) eintragen (ohne Anführungszeichen)"

            1 Reply Last reply Reply Quote 0
            • K
              Kamikaze last edited by

              Hallo ruhr70,

              das war mein erster Versuch, der natürlich scheiterte. Es gab eine Reihe an Fehlermeldungen im iobroker log und der Scanner brachte auch Fehler.

              Erst als ich als root die Installation gemacht habe, war alles in Ordnung.

              Jetzt nach längeren Testen, ist mir doch noch eine Sache aufgefallen:

              Ich setze ein G-Tag ein und stelle fest, dass sowohl auf der Produktivmaschine als auch auf der Testmaschine der Status häufig kurz wechselt, obwohl sich an dem Standort des G-Tags nicht ändert.

              Er liegt ca. 1m von beiden Rechnern entfernt und die Variable lastState ist im Scan meistens true, wie erwartet, springt zwischendurch aber kurz auf false um dann gleich wieder true zu werden.

              Hast du dafür eine Idee?

              1 Reply Last reply Reply Quote 0
              • ruhr70
                ruhr70 last edited by

                @Kamikaze:

                Ich setze ein G-Tag ein und stelle fest, dass sowohl auf der Produktivmaschine als auch auf der Testmaschine der Status häufig kurz wechselt, obwohl sich an dem Standort des G-Tags nicht ändert.

                Er liegt ca. 1m von beiden Rechnern entfernt und die Variable lastState ist im Scan meistens true, wie erwartet, springt zwischendurch aber kurz auf false um dann gleich wieder true zu werden. `

                Bei mir läuft der G-Tag sauber durch.

                Was bedeutet "gleich wieder auf true"?

                Im nächsten Scandurchlauf? Oder "flackert" der Zustand in den Objekten?

                1 Reply Last reply Reply Quote 0
                • lobomau
                  lobomau last edited by

                  @ruhr70:

                  @Kamikaze:

                  Ich setze ein G-Tag ein und stelle fest, dass sowohl auf der Produktivmaschine als auch auf der Testmaschine der Status häufig kurz wechselt, obwohl sich an dem Standort des G-Tags nicht ändert.

                  Er liegt ca. 1m von beiden Rechnern entfernt und die Variable lastState ist im Scan meistens true, wie erwartet, springt zwischendurch aber kurz auf false um dann gleich wieder true zu werden. `

                  Bei mir läuft der G-Tag sauber durch.

                  Was bedeutet "gleich wieder auf true"?

                  Im nächsten Scandurchlauf? Oder "flackert" der Zustand in den Objekten? `
                  Bei mir passiert das erst wenn der dongle etwas weiter weg ist. In meinem Fall liegen die dongle in zwei Autos hintereinander geparkt. Das Auto weiter weg wechselt oft von true auf false und wieder zurück. Im Bild ist der X1 näher als der C3. Obwohl beide hin und wieder auf false wechseln, steht beim counter jeweils eine große positive Zahl, die anzeigt seit wievielen Versuchen es auf true steht. Müsste nicht jedes Mal wenn es auf false geht der counter auf Null gesetzt werden?
                  1146_unbenannt.jpg

                  1 Reply Last reply Reply Quote 0
                  • ruhr70
                    ruhr70 last edited by

                    @lobomau:

                    Bei mir passiert das erst wenn der dongle etwas weiter weg ist. In meinem Fall liegen die dongle in zwei Autos hintereinander geparkt. Das Auto weiter weg wechselt oft von true auf false und wieder zurück. Im Bild ist der X1 näher als der C3. Obwohl beide hin und wieder auf false wechseln, steht beim counter jeweils eine große positive Zahl, die anzeigt seit wievielen Versuchen es auf true steht. Müsste nicht jedes Mal wenn es auf false geht der counter auf Null gesetzt werden? `

                    Ja, stimmt müsste es. Danke für den Hinweis!

                    In der Funktion ist ein Fehler. Wenn ein Gerät nicht erreichbar ist, wird nicht auf 0 gesetzt, sondern die vorhandene Zahl um 1 reduziert.

                    `function nichtErreichbar() {
                        for (var i=0; i<bekanntedevicesnichterreichbar.length; i++)/{/var/id="bekannteDevicesNichtErreichbar[i];" if(!inblacklist(id))/setstate(devicepfad/+/".laststate"/,false);/".laststatecount"/,getstate(devicepfad/".laststatecount").val/-/1);/}/}<e=""></bekanntedevicesnichterreichbar.length;>`
                    
                    Richtig wäre:
                    
                    `~~[code]~~function nichtErreichbar() {
                        for (var i=0; i <bekanntedevicesnichterreichbar.length; i++)/{/var/id="bekannteDevicesNichtErreichbar[i];" if(!inblacklist(id))/setstate(devicepfad/+/".laststate"/,false);/laststatecount="getState(devicePfad" ".laststatecount"/).val;/if(laststatecount="">0) {
                                    lastStateCount = 0;
                                } else {
                                    lastStateCount = lastStateCount - 1;
                                }
                                setState(devicePfad + id + ".lastStateCount"   ,lastStateCount);
                             }
                        }
                    }</bekanntedevicesnichterreichbar.length;>`
                    
                    Wenn ein "Flattern" von Geräten ein Problem ist, könnte man noch einbauen, dass sich nach einem Wechsel des Zustands "erreichbar" für drei Zyklen der Zähler sich nicht ändert. 
                    
                    Ein Indikator für An-und Abwesend wäre dann der Wert in lastStateCount und nicht in lastState.
                    
                    Wenn es nötig ist, baue ich das gerne noch ein.[/i][/code][/i]
                    
                    1 Reply Last reply Reply Quote 0
                    • lobomau
                      lobomau last edited by

                      @ruhr70:

                      Wenn ein "Flattern" von Geräten ein Problem ist, könnte man noch einbauen, dass sich nach einem Wechsel des Zustands "erreichbar" für drei Zyklen der Zähler sich nicht ändert.

                      Ein Indikator für An-und Abwesend wäre dann der Wert in lastStateCount und nicht in lastState.

                      Wenn es nötig ist, baue ich das gerne noch ein. `

                      Das wäre genial!

                      1 Reply Last reply Reply Quote 0
                      • K
                        Kamikaze last edited by

                        Da ich beruflich viel unterwegs bin, kann ich nicht immer so schnell antworten.

                        Erst einmal super Job ruhr70.

                        Das "Flattern" ist in den Objekten sichtbar und damit werden auch die Ereignisse ausgelöst. Wenn du die "Stabilitätsroutine" einbauen würdest, wäre das ausgezeichnet.

                        Grüße aus dem hohen Norden

                        1 Reply Last reply Reply Quote 0
                        • K
                          Kamikaze last edited by

                          Hallo,

                          ich habe das "Flattern" des G-Tags auf beiden Systemen beseitigen können, vielleicht hilft es auch bei Anderen:

                          Datei: /etc/init.d/bluetooth

                          den Eintrag NOPLUGIN_OPTION/in NOPLUGIN_OPTION="–noplugin=sap" ändern.

                          Danach

                          sudo service bluetooth restart

                          sudo service dbus restart

                          sudo reboot

                          Grüße

                          1 Reply Last reply Reply Quote 0
                          • K
                            Kamikaze last edited by

                            Ich melde mich noch einmal, da ich noch einige Informationen gesammelt habe:

                            Der Ansatz, dass das "Flattern" in Abhängigkeit der Empfangsstärke liegt, kann ich bestätigen.

                            Wie man im Log sieht, ist beim Übergang in den Empfangsbereich ein "Flatter" zu sehen.

                            Gegen 17:21 Uhr bin ich nach Hause gekommen, gegen 13:22 Uhr habe ich das Haus verlassen.

                            –---------------------------------------------------------------------------------------------------------------------------------------------------

                            sayit-0 2016-08-06 17:21:55.131 info saying: Kurt ist anwesend

                            javascript-0 2016-08-06 17:21:55.099 info script.js.Lokal.BluetoothEreignisse: G-Tag Kurt wieder erreichbar 0 0

                            javascript-0 2016-08-06 17:21:55.098 info script.js.Lokal.BluetoothEreignisse: G-Tag Kurt Ereignis: Alt false Neu true

                            sayit-0 2016-08-06 17:21:45.057 info saying: Kurt ist nicht mehr zu Hause

                            javascript-0 2016-08-06 17:21:44.978 info script.js.Lokal.BluetoothEreignisse: G-Tag Kurt nicht erreichbar -1 1

                            javascript-0 2016-08-06 17:21:44.978 info script.js.Lokal.BluetoothEreignisse: G-Tag Kurt Ereignis: Alt true Neu false

                            sayit-0 2016-08-06 17:21:32.012 info saying: Kurt ist anwesend

                            javascript-0 2016-08-06 17:21:30.982 info script.js.Lokal.BluetoothEreignisse: G-Tag Kurt wieder erreichbar 0 0

                            javascript-0 2016-08-06 17:21:30.981 info script.js.Lokal.BluetoothEreignisse: G-Tag Kurt Ereignis: Alt false Neu true

                            sayit-0 2016-08-06 13:23:42.182 info saying: Kurt ist nicht mehr zu Hause

                            javascript-0 2016-08-06 13:23:42.140 info script.js.Lokal.BluetoothEreignisse: G-Tag Kurt nicht erreichbar -1 1

                            javascript-0 2016-08-06 13:23:42.139 info script.js.Lokal.BluetoothEreignisse: G-Tag Kurt Ereignis: Alt true Neu false

                            sayit-0 2016-08-06 13:23:28.540 info saying: Kurt ist anwesend

                            javascript-0 2016-08-06 13:23:26.103 info script.js.Lokal.BluetoothEreignisse: G-Tag Kurt wieder erreichbar 0 0

                            javascript-0 2016-08-06 13:23:26.102 info script.js.Lokal.BluetoothEreignisse: G-Tag Kurt Ereignis: Alt false Neu true

                            sayit-0 2016-08-06 13:23:25.535 info saying: Kurt ist nicht mehr zu Hause

                            javascript-0 2016-08-06 13:23:22.066 info script.js.Lokal.BluetoothEreignisse: G-Tag Kurt nicht erreichbar -1 1

                            javascript-0 2016-08-06 13:23:22.065 info script.js.Lokal.BluetoothEreignisse: G-Tag Kurt Ereignis: Alt true Neu false

                            sayit-0 2016-08-06 13:23:04.014 info saying: Kurt ist anwesend

                            javascript-0 2016-08-06 13:23:03.990 info script.js.Lokal.BluetoothEreignisse: G-Tag Kurt wieder erreichbar 0 0

                            javascript-0 2016-08-06 13:23:03.988 info script.js.Lokal.BluetoothEreignisse: G-Tag Kurt Ereignis: Alt false Neu true

                            sayit-0 2016-08-06 13:22:53.159 info saying: Kurt ist nicht mehr zu Hause

                            javascript-0 2016-08-06 13:22:52.046 info script.js.Lokal.BluetoothEreignisse: G-Tag Kurt nicht erreichbar -1 1

                            javascript-0 2016-08-06 13:22:52.044 info script.js.Lokal.BluetoothEreignisse: G-Tag Kurt Ereignis: Alt true Neu false


                            Gruß

                            1 Reply Last reply Reply Quote 0
                            • S
                              Solear last edited by

                              Ist das ein geiles Script!

                              Habe jetzt Gigaset Beacons für den Schlüssel gekauft und das Script auf einem Raspi 3 als Multihost (1. Slave) installiert. Jetzt gehen meine Alarmmeldungen per Pushover über Fensteröffnungen nur ein, wenn ich nicht Zuhause bin.

                              Genial! Danke ruhr70 für das Script und Danke Bluefox für iobroker!! 8-) :mrgreen:

                              1 Reply Last reply Reply Quote 0
                              • S
                                Solear last edited by

                                Die Gigaset G-Tags haben eine ganz miese Eigenschaft :lol:

                                Sie stoppen die Verbindung zum Raspi-iobroker sobald sie mit dem Handy und der Gigaset G.-Tag App verbunden sind. Hat mich einen halben Tag gekostet das Problem zu finden. Da kommt man ja nicht drauf. Hatte nur 2 von den 3 G-Tags mit dem Handy verbunden, vergessen, und bin beim spielen mit dem Schlüssel/Auto/Empfang fast verrückt geworden.

                                Wenn ich jetzt Bluetooth am Handy ausschalte oder die App deinstalliere, dann werden alle G-Tags sauber von iobroker angezeigt.

                                1 Reply Last reply Reply Quote 0
                                • eric2905
                                  eric2905 last edited by

                                  Darauf bin ich auch reingefallen 😄 Hab auch einen halben Nachmittag damit verbracht.

                                  Ich habe die beiden für die Anwesenheitserkennung einfach nicht an der App angelernt, sondern nur den dritten (aus dem Set) und den in der Tasche versenkt. Anscheinend können die G-Tags nur einen "Empfänger" gleichzeitig (ähnlich wie Pairing).

                                  Was mir aber aufgefallen ist, ist dass das Datum der letzten Statusänderung nicht gesetzt wird. Muss mal in Ruhe schauen, warum das so ist.

                                  Gruß,

                                  Eric

                                  1 Reply Last reply Reply Quote 0
                                  • ruhr70
                                    ruhr70 last edited by

                                    Das die g-tags entweder oder unterstützen hatte ich irgendwo in den 140 Nachrichten hier geschrieben [emoji12]

                                    Gesendet von iPad mit Tapatalk

                                    1 Reply Last reply Reply Quote 0
                                    • ruhr70
                                      ruhr70 last edited by

                                      Dir g-tags werden übrigens nicht mit dem Skript verbunden.

                                      Sie senden so lange Ihre Kennung, bis Sie mit der Gigaset-App verbunden werden. Irgendjemand hier hat das Skript auf mehreren Pis laufen, damit die Anwesenheit über das gesamte Haus erfasst wird und man das Schlüsselbund nicht an zentraler Stelle ablegen muss.

                                      Interessant fand ich auch den Anwendungsfall mit der Garage. Je ein g-Tag im Auto und dann über das Skript zu erfassen, welches Auto vorne und welches Auto hinten steht.

                                      Das Datum der letzten Statusänderung wird nicht gesetzt?

                                      Gib mal Eine Info dazu, wenn ich was überprüfen muss.

                                      Gesendet von iPad mit Tapatalk

                                      1 Reply Last reply Reply Quote 0
                                      • eric2905
                                        eric2905 last edited by

                                        Hi ruhr70,

                                        @ruhr70:

                                        Das Datum der letzten Statusänderung wird nicht gesetzt?

                                        Gib mal Eine Info dazu, wenn ich was überprüfen muss. `

                                        Ich habe heute früh im Script das Datumsformat geändert:

                                        /*function datum(){
                                            return formatDate(new Date(), "YYYY-MM-DD,SS:mm");
                                        }*/
                                        
                                        function datum(){
                                            return formatDate(new Date(), "DD.MM.YYYY, SS:mm");
                                        }
                                        

                                        und das Script neu gestartet (wollte den Wert in VIS mit ausgeben - und da sieht die "deutsche" Schreibweise einfach schöner aus).

                                        Das Startdatum und Uhrzeit wurde sauber in den Datenpunkt geschrieben, aber keine weitern Statusänderungen - und ich war zwischendurch ein paar mal weg (die Pushover-Nachrichten sind angekommen).

                                        Habe es wieder auf das Original geändert und jetzt mal sehen, was kommt. Der Datenpunkt "lastStateDate" steht jetzt auf "2016-09-18,22:19".

                                        Mal abwarten.

                                        Gruß,

                                        Eric

                                        1 Reply Last reply Reply Quote 0
                                        • lobomau
                                          lobomau last edited by

                                          @Solear:

                                          Die Gigaset G-Tags haben eine ganz miese Eigenschaft :lol:

                                          Sie stoppen die Verbindung zum Raspi-iobroker sobald sie mit dem Handy und der Gigaset G.-Tag App verbunden sind. Hat mich einen halben Tag gekostet das Problem zu finden. `
                                          Hättest mal das ganze Thema durchlesen müssen. Wird irgendwo erwähnt.

                                          Aber stimmt, klasse Sache das Script in Verbindung mit den g-tags.

                                          1 Reply Last reply Reply Quote 0
                                          • frankjoke
                                            frankjoke last edited by

                                            Hallo mitsammen!

                                            Dies ist mein erster Eintrag in diesem Forum. Kam erst über node-red und HomeMatic auf ioBroker und nach den ersten Versuchen hab ich versucht einige Funktionen die ich bis jetzt in node-red abgebildet habe auf ioBroker in scripts zu übertragen.

                                            Hab natürlich auch das Bluetooth script probiert aber es hat mir nie meine Telefone gelistet (son'st 'ne Menge) obwohl mein script in node-red funktionierte.

                                            Deshalb wollte ich mal meinen Lösungsansatz mit euch teilen. Übrigens, er ist kombiniert mit WLAN-ping, also fragt Bluetooth und WLAN ab.

                                            Als Voraussetzung war bei mir nur````
                                            sudo apt-get install fping

                                            
                                            Das script basiert auf fping für WLAN und hcitool für BT. Es benutzt die Möglichkeit eine BT-MAC-Adresse nach dem Namen zu fragen welche natürlich nur antwortet wien das Gerät da ist. Aber es funktioniert auch wenn das Gerät nicht verbunden/gepairt ist.
                                            
                                            Es wird bei mir mit Zählern verwendet und minütlich ausgeführt. Wenn ein Teil 10 Minuten weder auf BT noch auf WLAN erreichbar ist dann gilt es als Abwesend.
                                            
                                            Wenn alle abwesend sind wird noch ein anderes flag gesetzt.
                                            
                                            Damit kann ich prüfen ob meine Frau oder ich anwesend sind. Da wir beide WLAN und BT immer eingeschaltet haben funktioniert das auch noch auf der Terasse oder im Garten wo das BT nicht mehr reicht.
                                            
                                            

                                            var patt = new RegExp(" is alive");
                                            var startcount = 10;
                                            var numscan = 0;
                                            var thisscan = 0;
                                            var somealive = false;

                                            var scanList = {
                                            "Phone1": {
                                            ip: "Galaxy7e.fritz.box",
                                            bt: "3C:BB:xx:xx:xx:xx"
                                            },
                                            "Phone2": {
                                            ip: "GalaxyALPHA.fritz.box",
                                            bt: "FC:19:xx:xx:xx:xx"
                                            }
                                            };

                                            for (var item in scanList) {
                                                logs("Create " + item + " " + JSON.stringify(scanList[item]));
                                                var di = "Ping."+ item ;
                                            
                                                createState(di + '.anwesend', false, { // Datenpunktname ohne Leerzeichen und Sonderzeichen, wie er in den Objekten angelegt wird
                                                    name: 'PersonAnwesend',           // Lesbarer Name des Datenpunkts
                                                    desc: 'Ist die Person anwesend?',   // Beschreibung des Datenpunkts
                                                    type: 'boolean',                         // Bescreibung des Typ, wie: number, string, boolean
                                                    unit: ''                              // Einheit, wenn benötigt 
                                                });
                                            
                                                createState(di + '.count', 0, { // Datenpunktname ohne Leerzeichen und Sonderzeichen, wie er in den Objekten angelegt wird
                                                    name: 'CounterAnwesend',           // Lesbarer Name des Datenpunkts
                                                    desc: 'Ist die Person anwesend?',   // Beschreibung des Datenpunkts
                                                    type: 'number',                         // Bescreibung des Typ, wie: number, string, boolean
                                                    unit: ''                              // Einheit, wenn benötigt 
                                                });
                                            
                                                createState(di + '.ip', false, { // Datenpunktname ohne Leerzeichen und Sonderzeichen, wie er in den Objekten angelegt wird
                                                    name: 'LastIPAnwesend',           // Lesbarer Name des Datenpunkts
                                                    desc: 'Ist die Person mit fping erkannt worden?',   // Beschreibung des Datenpunkts
                                                    type: 'boolean',                         // Bescreibung des Typ, wie: number, string, boolean
                                                    unit: ''                              // Einheit, wenn benötigt 
                                                });
                                            
                                                createState(di + '.btname', "undefined", { // Datenpunktname ohne Leerzeichen und Sonderzeichen, wie er in den Objekten angelegt wird
                                                    name: 'LastIPAnwesend',           // Lesbarer Name des Datenpunkts
                                                    desc: 'Ist die Person mit fping erkannt worden?',   // Beschreibung des Datenpunkts
                                                    type: 'string',                         // Bescreibung des Typ, wie: number, string, boolean
                                                    unit: ''                              // Einheit, wenn benötigt 
                                                });
                                            
                                                createState(di + '.bt', false, { // Datenpunktname ohne Leerzeichen und Sonderzeichen, wie er in den Objekten angelegt wird
                                                    name: 'LastBTAnwesend',           // Lesbarer Name des Datenpunkts
                                                    desc: 'Ist die Person mit Bluetooth erkannt worden?',   // Beschreibung des Datenpunkts
                                                    type: 'boolean',                         // Bescreibung des Typ, wie: number, string, boolean
                                                    unit: ''                              // Einheit, wenn benötigt 
                                                });
                                            
                                            } 
                                            
                                                createState('Ping.anyanwesend', false, { // Datenpunktname ohne Leerzeichen und Sonderzeichen, wie er in den Objekten angelegt wird
                                                    name: 'AnyPersonAnwesend',           // Lesbarer Name des Datenpunkts
                                                    desc: 'Ist irgend eine Person anwesend?',   // Beschreibung des Datenpunkts
                                                    type: 'boolean',                         // Bescreibung des Typ, wie: number, string, boolean
                                                    unit: ''                              // Einheit, wenn benötigt 
                                                });
                                            

                                            function scanOne(key,item) {
                                            var ids = instanz+"Ping."+key + ".";
                                            logs("Scan " + key + " " + JSON.stringify(item), 'debug2');
                                            exec('hcitool name ' + item.bt, cb(function (error, stdout, stderr) {
                                            logs('hcitool '+ item.bt + " = " + stdout, 'debug2');

                                                if (error) {
                                                    logs('hcitool name '+item.bt+' error: ' + error, 'debug2');
                                                } else {
                                                    if (stdout > "") {
                                                        item.btname = stdout.trim();
                                                        item.bthere = true;
                                                    } else {
                                                        item.bthere = false;
                                                    }
                                                }
                                                logs("Scaned hcitool " + key + " " + JSON.stringify(item), 'debug2');
                                                exec('fping ' + item.ip, cb(function (error, stdout, stderr) {
                                                    logs('fping '+ item.ip + " = " + stdout, 'debug2');
                                                    if (error) {
                                            

                                            // logs('fping '+item.ip+' error: ' + error, 'debug2');
                                            logs('fping '+item.ip+' error: unreachable', 'debug2');
                                            item.iphere = false;
                                            } else {
                                            if (patt.test(stdout)) {
                                            item.iphere = true;
                                            } else {
                                            item.iphere = false;
                                            }
                                            }
                                            setState(ids + 'ip', item.iphere);
                                            setState(ids + 'bt', item.bthere);
                                            if (item.btname)
                                            setState(ids + 'btname', item.btname);
                                            var here = item.iphere || item.bthere;
                                            var cnt = getState(ids + "count").val;
                                            var anw = getState(ids + "anwesend").val
                                            if (here) {
                                            cnt = startcount;
                                            anw = true;
                                            somealive = true;
                                            } else {
                                            cnt = --cnt;
                                            if (cnt<0)
                                            cnt = 0;
                                            if (cnt === 0) {
                                            anw = false;
                                            }
                                            }
                                            setState(ids + "count",cnt);
                                            setState(ids + "anwesend",anw);
                                            logs("Scaned " + key + " " + JSON.stringify(item), 'debug2');
                                            thisscan = ++thisscan;
                                            if (thisscan == numscan) {
                                            // last scanned item!
                                            logs("anyanwesend = " + somealive, "debug2");
                                            setState(instanz + "Ping.anyanwesend",somealive)
                                            }
                                            }));
                                            }));

                                            }

                                            // =============================================================================
                                            // Hauptprogramm (wird beim Scriptstart und im schedule ausgeführt)
                                            // =============================================================================
                                            function pingAll() {

                                            thisscan = numscan = 0;
                                            somealive = false;
                                            for (var key in scanList) {
                                                numscan = ++numscan;
                                                scanOne(key, scanList[key]);
                                            }
                                            

                                            }

                                            
                                            Danke für die Hilfe welche ich im Forum schon gefunden habe!
                                            
                                            Frank
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            544
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            28
                                            254
                                            57375
                                            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