Skip to content
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. [Major Update] UniFi Adapter v0.5.0

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

[Major Update] UniFi Adapter v0.5.0

Geplant Angeheftet Gesperrt Verschoben Entwicklung
unifi
510 Beiträge 54 Kommentatoren 115.4k Aufrufe 51 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • BBTownB BBTown

    @braindead
    Wenn es eine Whitelist gäbe, würde ich mich auch wieder mit dem Adapter auseinandersetzen...

    braindeadB Offline
    braindeadB Offline
    braindead
    Developer
    schrieb am zuletzt editiert von
    #223

    @BBTown Motivation kannst Du. Danke. 🤔

    BBTownB 1 Antwort Letzte Antwort
    0
    • SunshinemakerS Offline
      SunshinemakerS Offline
      Sunshinemaker
      schrieb am zuletzt editiert von
      #224

      @braindead Funktioniert der Controller eigentlich auch mit dem Cloud Key gen 2? Evtl mit ganz viel Pech werd ich den bald im Einsatz haben. Meiner scheint sich gerade zu verabschieden. Wenn ich ihn nicht wiederbeleben kann kann muß was neues her.

      dslraserD 1 Antwort Letzte Antwort
      0
      • SunshinemakerS Sunshinemaker

        @braindead Funktioniert der Controller eigentlich auch mit dem Cloud Key gen 2? Evtl mit ganz viel Pech werd ich den bald im Einsatz haben. Meiner scheint sich gerade zu verabschieden. Wenn ich ihn nicht wiederbeleben kann kann muß was neues her.

        dslraserD Offline
        dslraserD Offline
        dslraser
        Forum Testing Most Active
        schrieb am zuletzt editiert von
        #225

        @Sören sagte in [Major Update] UniFi Adapter v0.5.0:

        Cloud Key gen 2

        Ich antworte mal.
        Ja, funktioniert, ich habe den selbst.

        1 Antwort Letzte Antwort
        2
        • dslraserD dslraser

          @braindead sagte in [Major Update] UniFi Adapter v0.5.0:

          In v0.5.1-beta.5 gibt es die null/false bzw. null/true Problematik nicht mehr. Kannst Du das bitte einmal testen und bestätigen?

          @crunchip

          Zum Thema Anwesenheit:
          Ich habe mal schnell was mit Blockly zusammengeklöppelt und werde damit mal ne Weile probieren. Ich habe bei mir erstmal nur zwei Personen zur Anwesenheit drinn. Bisher sieht das ganz gut aus, danke @braindead Mal sehen wie sich die Handys im Ruhemodus schlagen (zwei x Samsung)


          Hier in der Funktion die Namen der Personen eintragen. In die Funktion klicken und zuden Zeilen 129/130 scrollen
          Bildschirmfoto 2020-05-22 um 14.22.15.png
          Da die Namen eintragen
          Bildschirmfoto 2020-05-22 um 14.22.02.png
          und im Blockly vor dem ersten Start auf die eigenen Daten anpassen
          Bildschirmfoto 2020-05-22 um 14.57.13.png
          Nach dem ersten Blockly Start werden die Datenpunkte erstellt und der aktuelle Zustand der beiden Geräte eingelesen.
          Bildschirmfoto 2020-05-22 um 14.36.09.png

          <xml xmlns="http://www.w3.org/1999/xhtml">
            <variables>
              <variable type="" id=";k,Ihk0[-)fmYrQXm8m^">anlegen_in</variable>
              <variable type="" id="fyVM({2.Ubq}R7hxFVRc">speicherort</variable>
              <variable type="" id="nTXOZ!3I{zM-7hg^DXcc">person_1_is_online_DP</variable>
              <variable type="" id="lvz.2`K]e8c1*JEc-vJu">anwesenheit_person_1</variable>
              <variable type="" id="@i-nl2q|$|OFpK!Yx+CC">anwesenheit_person_2</variable>
              <variable type="" id="yB(N?#)zIjYIo%.B@UT(">person_2_is_online_DP</variable>
              <variable type="" id=";^euFaDvC/jHl4C^!SUw">person_1</variable>
              <variable type="undefined" id="start">start</variable>
              <variable type="" id="sgYRW3,@::dC5Ux]x;8|">person_2</variable>
              <variable type="" id="![EW]9b!hQ9S[MT.q}6-">telegram_benutzer</variable>
            </variables>
            <block type="procedures_defcustomnoreturn" id="eZsGA^2r{c%G,YpuLp]K" x="13" y="13">
              <mutation statements="false">
                <arg name="anlegen_in" varid=";k,Ihk0[-)fmYrQXm8m^"></arg>
              </mutation>
              <field name="NAME">Datenpunkte_anlegen</field>
              <field name="SCRIPT">LyoqCiAqIENyZWF0ZSBzdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wIG9yIGphdmFzY3JpcHQueAogKiBDdXJyZW50IFZlcnNpb246ICAgICBodHRwczovL2dpdGh1Yi5jb20vTWljLU0vaW9icm9rZXIuY3JlYXRlVXNlclN0YXRlcwogKiBTdXBwb3J0OiAgICAgICAgICAgICBodHRwczovL2ZvcnVtLmlvYnJva2VyLm5ldC90b3BpYy8yNjgzOS8KICogQXV0b3I6ICAgICAgICAgICAgICAgTWljIChpb0Jyb2tlcikgfCBNaWMtTSAoZ2l0aHViKQogKiBWZXJzaW9uOiAgICAgICAgICAgICAxLjEgKDI2IEphbnVhcnkgMjAyMCkKICogRXhhbXBsZTogICAgICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzI2JlaXNwaWVsCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFBMRUFTRSBOT1RFOiBQZXIgaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgCiAqICAgICAgICAgICAgICBleGVjdXRlcyB0aGUgY2FsbGJhY2sgUFJJT1IgdG8gY29tcGxldGluZyB0aGUgc3RhdGUgY3JlYXRpb24uIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlci4gCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEBwYXJhbSB7c3RyaW5nfSB3aGVyZSAgICAgICAgICBXaGVyZSB0byBjcmVhdGUgdGhlIHN0YXRlOiAnMF91c2VyZGF0YS4wJyBvciAnamF2YXNjcmlwdC54Jy4KICogQHBhcmFtIHtib29sZWFufSBmb3JjZSAgICAgICAgIEZvcmNlIHN0YXRlIGNyZWF0aW9uIChvdmVyd3JpdGUpLCBpZiBzdGF0ZSBpcyBleGlzdGluZy4KICogQHBhcmFtIHthcnJheX0gc3RhdGVzVG9DcmVhdGUgIFN0YXRlKHMpIHRvIGNyZWF0ZS4gc2luZ2xlIGFycmF5IG9yIGFycmF5IG9mIGFycmF5cwogKiBAcGFyYW0ge29iamVjdH0gW2NhbGxiYWNrXSAgICAgT3B0aW9uYWw6IGEgY2FsbGJhY2sgZnVuY3Rpb24gLS0gVGhpcyBwcm92aWRlZCBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCBzdGF0ZXMgYXJlIGNyZWF0ZWQuCiAqLwoKCmZ1bmN0aW9uIGNyZWF0ZVVzZXJTdGF0ZXMod2hlcmUsIGZvcmNlLCBzdGF0ZXNUb0NyZWF0ZSwgY2FsbGJhY2sgPSB1bmRlZmluZWQpIHsKIAogICAgY29uc3QgV0FSTiA9IGZhbHNlOyAvLyBPbmx5IGZvciAwX3VzZXJkYXRhLjA6IFRocm93cyB3YXJuaW5nIGluIGxvZywgaWYgc3RhdGUgaXMgYWxyZWFkeSBleGlzdGluZyBhbmQgZm9yY2U9ZmFsc2UuIERlZmF1bHQgaXMgZmFsc2UsIHNvIG5vIHdhcm5pbmcgaW4gbG9nLCBpZiBzdGF0ZSBleGlzdHMuCiAgICBjb25zdCBMT0dfREVCVUcgPSBmYWxzZTsgLy8gVG8gZGVidWcgdGhpcyBmdW5jdGlvbiwgc2V0IHRvIHRydWUKICAgIC8vIFBlciBpc3N1ZSAjNDc0IChodHRwczovL2dpdGh1Yi5jb20vaW9Ccm9rZXIvaW9Ccm9rZXIuamF2YXNjcmlwdC9pc3N1ZXMvNDc0KSwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgZXhlY3V0ZXMgdGhlIGNhbGxiYWNrIAogICAgLy8gYmVmb3JlIHRoZSBzdGF0ZSBpcyBhY3R1YWwgY3JlYXRlZC4gVGhlcmVmb3JlLCB3ZSB1c2UgYSBzZXRUaW1lb3V0IGFuZCBjb3VudGVyIGFzIGEgd29ya2Fyb3VuZC4KICAgIGNvbnN0IERFTEFZID0gNTA7IC8vIERlbGF5IGluIG1pbGxpc2Vjb25kcyAobXMpLiBJbmNyZWFzZSB0aGlzIHRvIDEwMCwgaWYgaXQgaXMgbm90IHdvcmtpbmcuCgogICAgLy8gVmFsaWRhdGUgIndoZXJlIgogICAgaWYgKHdoZXJlLmVuZHNXaXRoKCcuJykpIHdoZXJlID0gd2hlcmUuc2xpY2UoMCwgLTEpOyAvLyBSZW1vdmUgdHJhaWxpbmcgZG90CiAgICBpZiAoICh3aGVyZS5tYXRjaCgvXigoamF2YXNjcmlwdFwuKFsxLTldWzAtOV18WzAtOV0pKSR8MF91c2VyZGF0YVwuMCQpLykgPT0gbnVsbCkgKSB7CiAgICAgICAgbG9nKCdUaGlzIHNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IHRvIGNyZWF0ZSBzdGF0ZXMgdW5kZXIgWycgKyB3aGVyZSArICddJywgJ2Vycm9yJyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFByZXBhcmUgInN0YXRlc1RvQ3JlYXRlIiBzaW5jZSB3ZSBhbHNvIGFsbG93IGEgc2luZ2xlIHN0YXRlIHRvIGNyZWF0ZQogICAgaWYoIUFycmF5LmlzQXJyYXkoc3RhdGVzVG9DcmVhdGVbMF0pKSBzdGF0ZXNUb0NyZWF0ZSA9IFtzdGF0ZXNUb0NyZWF0ZV07IC8vIHdyYXAgaW50byBhcnJheSwgaWYganVzdCBvbmUgYXJyYXkgYW5kIG5vdCBpbnNpZGUgYW4gYXJyYXkKCiAgICAvLyBBZGQgIndoZXJlIiB0byBTVEFURVNfVE9fQ1JFQVRFCiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXRlc1RvQ3JlYXRlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGV0IGxwUGF0aCA9IHN0YXRlc1RvQ3JlYXRlW2ldWzBdLnJlcGxhY2UoL1wuKlwuL2csICcuJyk7IC8vIHJlcGxhY2UgYWxsIG11bHRpcGxlIGRvdHMgbGlrZSAnLi4nLCAnLi4uJyB3aXRoIGEgc2luZ2xlICcuJwogICAgICAgIGxwUGF0aCA9IGxwUGF0aC5yZXBsYWNlKC9eKChqYXZhc2NyaXB0XC4oWzEtOV1bMC05XXxbMC05XSlcLil8MF91c2VyZGF0YVwuMFwuKS8sJycpIC8vIHJlbW92ZSBhbnkgamF2YXNjcmlwdC54LiAvIDBfdXNlcmRhdGEuMC4gZnJvbSBiZWdpbm5pbmcKICAgICAgICBscFBhdGggPSB3aGVyZSArICcuJyArIGxwUGF0aDsgLy8gYWRkIHdoZXJlIHRvIGJlZ2lubmluZyBvZiBzdHJpbmcKICAgICAgICBzdGF0ZXNUb0NyZWF0ZVtpXVswXSA9IGxwUGF0aDsKICAgIH0KCiAgICBpZiAod2hlcmUgIT0gJzBfdXNlcmRhdGEuMCcpIHsKICAgICAgICAvLyBDcmVhdGUgU3RhdGVzIHVuZGVyIGphdmFzY3JpcHQueAogICAgICAgIGxldCBudW1TdGF0ZXMgPSBzdGF0ZXNUb0NyZWF0ZS5sZW5ndGg7CiAgICAgICAgc3RhdGVzVG9DcmVhdGUuZm9yRWFjaChmdW5jdGlvbihsb29wUGFyYW0pIHsKICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIE5vdyB3ZSBhcmUgY3JlYXRpbmcgbmV3IHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKTsKICAgICAgICAgICAgbGV0IGxvb3BJbml0ID0gKGxvb3BQYXJhbVsxXVsnZGVmJ10gPT0gdW5kZWZpbmVkKSA/IG51bGwgOiBsb29wUGFyYW1bMV1bJ2RlZiddOyAvLyBtaW1pYyBzYW1lIGJlaGF2aW9yIGFzIGNyZWF0ZVN0YXRlIGlmIG5vIGluaXQgdmFsdWUgaXMgcHJvdmlkZWQKICAgICAgICAgICAgY3JlYXRlU3RhdGUobG9vcFBhcmFtWzBdLCBsb29wSW5pdCwgZm9yY2UsIGxvb3BQYXJhbVsxXSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBudW1TdGF0ZXMtLTsKICAgICAgICAgICAgICAgIGlmIChudW1TdGF0ZXMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBwcm9jZXNzZWQuJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGlmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIHRvIHBhcmFtZXRlciBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gRnVuY3Rpb24gdG8gY2FsbGJhY2sgcGFyYW1ldGVyIHdhcyBwcm92aWRlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQ3JlYXRlIFN0YXRlcyB1bmRlciAwX3VzZXJkYXRhLjAKICAgICAgICBsZXQgbnVtU3RhdGVzID0gc3RhdGVzVG9DcmVhdGUubGVuZ3RoOwogICAgICAgIGxldCBjb3VudGVyID0gLTE7CiAgICAgICAgc3RhdGVzVG9DcmVhdGUuZm9yRWFjaChmdW5jdGlvbihsb29wUGFyYW0pIHsKICAgICAgICAgICAgY291bnRlciArPSAxOwogICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2cgKCdbRGVidWddIEN1cnJlbnRseSBwcm9jZXNzaW5nIGZvbGxvd2luZyBzdGF0ZTogWycgKyBsb29wUGFyYW1bMF0gKyAnXScpOwogICAgICAgICAgICBpZiggKCQobG9vcFBhcmFtWzBdKS5sZW5ndGggPiAwKSAmJiAoZXhpc3RzU3RhdGUobG9vcFBhcmFtWzBdKSkgKSB7IC8vIFdvcmthcm91bmQgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9pb0Jyb2tlci9pb0Jyb2tlci5qYXZhc2NyaXB0L2lzc3Vlcy80NzgKICAgICAgICAgICAgICAgIC8vIFN0YXRlIGlzIGV4aXN0aW5nLgogICAgICAgICAgICAgICAgaWYgKFdBUk4gJiYgIWZvcmNlKSBsb2coJ1N0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10gaXMgYWxyZWFkeSBleGlzdGluZyBhbmQgd2lsbCBubyBsb25nZXIgYmUgY3JlYXRlZC4nLCAnd2FybicpOwogICAgICAgICAgICAgICAgaWYgKCFXQVJOICYmIExPR19ERUJVRykgbG9nKCdbRGVidWddIFN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10gaXMgYWxyZWFkeSBleGlzdGluZy4gT3B0aW9uIGZvcmNlICg9b3ZlcndyaXRlKSBpcyBzZXQgdG8gWycgKyBmb3JjZSArICddLicpOwogICAgICAgICAgICAgICAgaWYoIWZvcmNlKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gU3RhdGUgZXhpc3RzIGFuZCBzaGFsbCBub3QgYmUgb3ZlcndyaXR0ZW4gc2luY2UgZm9yY2U9ZmFsc2UKICAgICAgICAgICAgICAgICAgICAvLyBTbywgd2UgZG8gbm90IHByb2NlZWQuCiAgICAgICAgICAgICAgICAgICAgbnVtU3RhdGVzLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIScpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgaWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgdG8gcGFyYW1ldGVyIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gd2FzIHByb3ZpZGVkLCB3aGljaCB3ZSBhcmUgZ29pbmcgdG8gZXhlY3V0ZSBub3cuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZ28gb3V0IGFuZCBjb250aW51ZSB3aXRoIG5leHQgZWxlbWVudCBpbiBsb29wLgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE4NDUyOTIwL2NvbnRpbnVlLWluLWN1cnNvci1mb3JlYWNoCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAvLyBpZighZm9yY2UpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFN0YXRlIGlzIG5vdCBleGlzdGluZyBvciBmb3JjZSA9IHRydWUsIHNvIHdlIGFyZSBjb250aW51aW5nIHRvIGNyZWF0ZSB0aGUgc3RhdGUgdGhyb3VnaCBzZXRPYmplY3QoKS4KICAgICAgICAgICAgbGV0IG9iaiA9IHt9OwogICAgICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgICAgIG9iai5uYXRpdmUgPSB7fTsKICAgICAgICAgICAgb2JqLmNvbW1vbiA9IGxvb3BQYXJhbVsxXTsKICAgICAgICAgICAgc2V0T2JqZWN0KGxvb3BQYXJhbVswXSwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0IGZvciBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddOiAnICsgZXJyKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIE5vdyB3ZSBhcmUgY3JlYXRpbmcgbmV3IHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKQogICAgICAgICAgICAgICAgICAgIGxldCBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnJzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbG9vcFBhcmFtWzFdLmRlZjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUobG9vcFBhcmFtWzBdLCBpbml0LCB0cnVlLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBzZXRTdGF0ZSBkdXJjaGdlZsO8aHJ0OiAnICsgbG9vcFBhcmFtWzBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVN0YXRlcy0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbGwgc3RhdGVzIHByb2Nlc3NlZC4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgaWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgdG8gcGFyYW1ldGVyIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBGdW5jdGlvbiB0byBjYWxsYmFjayBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSwgREVMQVkgKyAoMjAgKiBjb3VudGVyKSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0KfQoKcGVyc29uMSA9ICdIZWlrbycKcGVyc29uMiA9ICdLZXJzdGluJwpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICAvL0Fud2VzZW5oZWl0IFBlcnNvbmVuL0hhbmR5cwogICAgWydVbmlmaS5Bbndlc2VuaGVpdC4nK1twZXJzb24xXSwgeyduYW1lJzpbcGVyc29uMV0rJyBBbndlc2VuaGVpdCcsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwKICAgIFsnVW5pZmkuQW53ZXNlbmhlaXQuJytbcGVyc29uMl0sIHsnbmFtZSc6W3BlcnNvbjJdKycgQW53ZXNlbmhlaXQnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sCiAgIApdOwoKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLCBmYWxzZSwgc3RhdGVzVG9DcmVhdGUsIGZ1bmN0aW9uKCl7OwogICAgbWFpbigpOwp9KTsKCgo=</field>
              <comment pinned="false" h="80" w="160">Datenpunkte erstellen</comment>
            </block>
            <block type="variables_set" id="oODt+HYM*+ptP0jLnPoN" x="13" y="62">
              <field name="VAR" id="fyVM({2.Ubq}R7hxFVRc" variabletype="">speicherort</field>
              <value name="VALUE">
                <block type="text" id="^a2)}wPt=s[~]UsHJqvr">
                  <field name="TEXT">0_userdata.0</field>
                </block>
              </value>
              <next>
                <block type="comment" id="@hJky?+Qv5OpJOJa;Tl6">
                  <field name="COMMENT">Unifi Adapter Client DP is_online</field>
                  <next>
                    <block type="variables_set" id="Y?6=|YzWSeM4LOdF5$XM">
                      <field name="VAR" id="nTXOZ!3I{zM-7hg^DXcc" variabletype="">person_1_is_online_DP</field>
                      <value name="VALUE">
                        <block type="field_oid" id="knG,[`=1g+b,s{kx1EP,">
                          <field name="oid">unifi.0.default.clients.8c:b8:4a:34:ac:85.is_online</field>
                        </block>
                      </value>
                      <next>
                        <block type="comment" id="/R=ulymL%~caLxh2Ilfo">
                          <field name="COMMENT">Unifi Adapter Client DP is_online</field>
                          <next>
                            <block type="variables_set" id="Vx9vV3Sg8kY@H?;zDw@(">
                              <field name="VAR" id="yB(N?#)zIjYIo%.B@UT(" variabletype="">person_2_is_online_DP</field>
                              <value name="VALUE">
                                <block type="field_oid" id="!feFu(z:sKBl~0nK`eGu">
                                  <field name="oid">unifi.0.default.clients.04:d6:aa:76:06:53.is_online</field>
                                </block>
                              </value>
                              <next>
                                <block type="variables_set" id="9m,K[:2^)KFEl|00rZQ7">
                                  <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field>
                                  <value name="VALUE">
                                    <block type="text" id="pJ}1(u|}l3lA7~[z+Wg5">
                                      <field name="TEXT">Heiko</field>
                                    </block>
                                  </value>
                                  <next>
                                    <block type="variables_set" id="k`L|~6i[HzfGD|D*L^Z[">
                                      <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field>
                                      <value name="VALUE">
                                        <block type="text" id="$^o6%]+%A^W3{Txo4Yds">
                                          <field name="TEXT">Kerstin</field>
                                        </block>
                                      </value>
                                      <next>
                                        <block type="variables_set" id="bEu?$N6,|qbfd8h2t;xr">
                                          <field name="VAR" id="![EW]9b!hQ9S[MT.q}6-" variabletype="">telegram_benutzer</field>
                                          <value name="VALUE">
                                            <block type="text" id="@AJ19!Lch7=H%ib(sX@`">
                                              <field name="TEXT">Heiko</field>
                                            </block>
                                          </value>
                                          <next>
                                            <block type="procedures_callcustomnoreturn" id="(4(-f$1VS~CwO}P[R@.6" collapsed="true">
                                              <mutation name="Datenpunkte_anlegen">
                                                <arg name="anlegen_in"></arg>
                                              </mutation>
                                              <value name="ARG0">
                                                <block type="variables_get" id="!74)L93;^_?DR0pALJ9f">
                                                  <field name="VAR" id="fyVM({2.Ubq}R7hxFVRc" variabletype="">speicherort</field>
                                                </block>
                                              </value>
                                            </block>
                                          </next>
                                        </block>
                                      </next>
                                    </block>
                                  </next>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </next>
                </block>
              </next>
            </block>
            <block type="procedures_defnoreturn" id="SSMy$1MUVX,GQsbb[2*m" x="12" y="313">
              <field name="NAME">main</field>
              <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
              <statement name="STACK">
                <block type="timeouts_cleartimeout" id="TZP~F0nTRJ5tX).DDSa`" collapsed="true">
                  <field name="NAME">start</field>
                  <next>
                    <block type="variables_set" id=",U2@|cXpD(cMh/t+?6ch" collapsed="true">
                      <field name="VAR" id="lvz.2`K]e8c1*JEc-vJu" variabletype="">anwesenheit_person_1</field>
                      <value name="VALUE">
                        <block type="text_join" id="!1[II16BPGnRh-7=6hz[">
                          <mutation items="3"></mutation>
                          <value name="ADD0">
                            <block type="variables_get" id="xK5Ij}90B8}K(46SJ?nI">
                              <field name="VAR" id="fyVM({2.Ubq}R7hxFVRc" variabletype="">speicherort</field>
                            </block>
                          </value>
                          <value name="ADD1">
                            <block type="text" id="j|:+t7a^%@D?7F{x85Vu">
                              <field name="TEXT">.Unifi.Anwesenheit.</field>
                            </block>
                          </value>
                          <value name="ADD2">
                            <block type="variables_get" id="/d9dG48mWBBOwwOV|b7q">
                              <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field>
                            </block>
                          </value>
                        </block>
                      </value>
                      <next>
                        <block type="variables_set" id="!b3P0hupqzO)$LYY_96G" collapsed="true">
                          <field name="VAR" id="@i-nl2q|$|OFpK!Yx+CC" variabletype="">anwesenheit_person_2</field>
                          <value name="VALUE">
                            <block type="text_join" id="j^1|XvQ;,bZdK7j*e[W]">
                              <mutation items="3"></mutation>
                              <value name="ADD0">
                                <block type="variables_get" id="{e5Na0l3aK]%yCR.A^B{">
                                  <field name="VAR" id="fyVM({2.Ubq}R7hxFVRc" variabletype="">speicherort</field>
                                </block>
                              </value>
                              <value name="ADD1">
                                <block type="text" id="IVD:VEYV~yR=s_-/Xf!N">
                                  <field name="TEXT">.Unifi.Anwesenheit.</field>
                                </block>
                              </value>
                              <value name="ADD2">
                                <block type="variables_get" id="Aty5L{S^6krr(,SAac[M">
                                  <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field>
                                </block>
                              </value>
                            </block>
                          </value>
                          <next>
                            <block type="timeouts_settimeout" id=".|_m4*n~bGC)tC]M]!E^" collapsed="true">
                              <field name="NAME">start</field>
                              <field name="DELAY">1</field>
                              <field name="UNIT">sec</field>
                              <statement name="STATEMENT">
                                <block type="controls_if" id="@IdN-@8]b19pM5K:RKAV">
                                  <mutation else="1"></mutation>
                                  <value name="IF0">
                                    <block type="logic_compare" id="mOtoF5ZD{_J6ssks0m)y">
                                      <field name="OP">EQ</field>
                                      <value name="A">
                                        <block type="get_value_var" id="P=ub#}lCd=k9sU(YPcg:">
                                          <field name="ATTR">val</field>
                                          <value name="OID">
                                            <shadow type="text" id="+?=%oVJ6|*ti.6j6/Wxj">
                                              <field name="TEXT"></field>
                                            </shadow>
                                            <block type="variables_get" id="l+hT5v.Pk.O2J$/Iaqt,">
                                              <field name="VAR" id="nTXOZ!3I{zM-7hg^DXcc" variabletype="">person_1_is_online_DP</field>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                      <value name="B">
                                        <block type="logic_boolean" id="9{xgUNQr|Jen;~u_$)6d">
                                          <field name="BOOL">TRUE</field>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                  <statement name="DO0">
                                    <block type="control_ex" id=".V]CdR(,WY/[gHi[+RLy" inline="true">
                                      <field name="TYPE">true</field>
                                      <field name="CLEAR_RUNNING">FALSE</field>
                                      <value name="OID">
                                        <shadow type="field_oid" id="hRVN~;8VstUL/pd4KSAZ">
                                          <field name="oid">Object ID</field>
                                        </shadow>
                                        <block type="variables_get" id="3%^DGT`3E`2/0p:w3{4^">
                                          <field name="VAR" id="lvz.2`K]e8c1*JEc-vJu" variabletype="">anwesenheit_person_1</field>
                                        </block>
                                      </value>
                                      <value name="VALUE">
                                        <shadow type="logic_boolean" id="bbVKs5v:Ert)PYdo!`!i">
                                          <field name="BOOL">TRUE</field>
                                        </shadow>
                                        <block type="text_join" id="f8$xC!VB#l1J#2YIx60!">
                                          <mutation items="3"></mutation>
                                          <value name="ADD0">
                                            <block type="variables_get" id="1oBT:?uj_zr?Mgi+#WM`">
                                              <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field>
                                            </block>
                                          </value>
                                          <value name="ADD1">
                                            <block type="text" id="SWk`f2QCt@7CE*{M9F=y">
                                              <field name="TEXT"> </field>
                                            </block>
                                          </value>
                                          <value name="ADD2">
                                            <block type="text" id="Gh(!zydv3Jh_{d7dIKNr">
                                              <field name="TEXT">ist online ✅</field>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                      <value name="DELAY_MS">
                                        <shadow type="math_number" id="I7CJ`-|pTzVbPm]Rm~#j">
                                          <field name="NUM">0</field>
                                        </shadow>
                                      </value>
                                    </block>
                                  </statement>
                                  <statement name="ELSE">
                                    <block type="control_ex" id="Rm7t|TP;p?8IkYCVTFYf" inline="true">
                                      <field name="TYPE">true</field>
                                      <field name="CLEAR_RUNNING">FALSE</field>
                                      <value name="OID">
                                        <shadow type="field_oid" id="hRVN~;8VstUL/pd4KSAZ">
                                          <field name="oid">Object ID</field>
                                        </shadow>
                                        <block type="variables_get" id="rh!@7z?k=8.uZbxF?DoI">
                                          <field name="VAR" id="lvz.2`K]e8c1*JEc-vJu" variabletype="">anwesenheit_person_1</field>
                                        </block>
                                      </value>
                                      <value name="VALUE">
                                        <shadow type="logic_boolean" id="bbVKs5v:Ert)PYdo!`!i">
                                          <field name="BOOL">TRUE</field>
                                        </shadow>
                                        <block type="text_join" id=";.n,Hn*I2XhhSW85o_Q2">
                                          <mutation items="3"></mutation>
                                          <value name="ADD0">
                                            <block type="variables_get" id="tu5-.4UIt2~I(onp}L$P">
                                              <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field>
                                            </block>
                                          </value>
                                          <value name="ADD1">
                                            <block type="text" id="`*!Euh8@c0Kv1`dL)`|]">
                                              <field name="TEXT"> </field>
                                            </block>
                                          </value>
                                          <value name="ADD2">
                                            <block type="text" id="OP@O9n8`%s$i4iu!qalG">
                                              <field name="TEXT">ist offline ❌</field>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                      <value name="DELAY_MS">
                                        <shadow type="math_number" id="?QJBHR?P%=ONW9U|7bz~">
                                          <field name="NUM">0</field>
                                        </shadow>
                                      </value>
                                    </block>
                                  </statement>
                                  <next>
                                    <block type="controls_if" id="CW7PDI-i5$*GOj_KJb4Q">
                                      <mutation else="1"></mutation>
                                      <value name="IF0">
                                        <block type="logic_compare" id="-!aPk*oy9xC5J=ysP)7=">
                                          <field name="OP">EQ</field>
                                          <value name="A">
                                            <block type="get_value_var" id="n+Ps:J5qI;GEdiv{)E?z">
                                              <field name="ATTR">val</field>
                                              <value name="OID">
                                                <shadow type="text" id="+?=%oVJ6|*ti.6j6/Wxj">
                                                  <field name="TEXT"></field>
                                                </shadow>
                                                <block type="variables_get" id="!|b(=p?G65~q+jglAR8w">
                                                  <field name="VAR" id="yB(N?#)zIjYIo%.B@UT(" variabletype="">person_2_is_online_DP</field>
                                                </block>
                                              </value>
                                            </block>
                                          </value>
                                          <value name="B">
                                            <block type="logic_boolean" id="!(SIj5PDvV$R:iUQ*(LP">
                                              <field name="BOOL">TRUE</field>
                                            </block>
                                          </value>
                                        </block>
                                      </value>
                                      <statement name="DO0">
                                        <block type="control_ex" id="4VEiHKIjpLMpRX2h?+MR" inline="true">
                                          <field name="TYPE">true</field>
                                          <field name="CLEAR_RUNNING">FALSE</field>
                                          <value name="OID">
                                            <shadow type="field_oid" id="hRVN~;8VstUL/pd4KSAZ">
                                              <field name="oid">Object ID</field>
                                            </shadow>
                                            <block type="variables_get" id="MTibw$-yf66T#p]`3z?r">
                                              <field name="VAR" id="@i-nl2q|$|OFpK!Yx+CC" variabletype="">anwesenheit_person_2</field>
                                            </block>
                                          </value>
                                          <value name="VALUE">
                                            <shadow type="logic_boolean" id="bbVKs5v:Ert)PYdo!`!i">
                                              <field name="BOOL">TRUE</field>
                                            </shadow>
                                            <block type="text_join" id=":iT@UQ1eLTq{?.Nc0-Ob">
                                              <mutation items="3"></mutation>
                                              <value name="ADD0">
                                                <block type="variables_get" id=")vF^Rbw,2,7/)$D8gF};">
                                                  <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field>
                                                </block>
                                              </value>
                                              <value name="ADD1">
                                                <block type="text" id="23zE8haiF=Z5L.H#Pk7i">
                                                  <field name="TEXT"> </field>
                                                </block>
                                              </value>
                                              <value name="ADD2">
                                                <block type="text" id="+0!/qeY$7F8aH-xnRR*0">
                                                  <field name="TEXT">ist online ✅</field>
                                                </block>
                                              </value>
                                            </block>
                                          </value>
                                          <value name="DELAY_MS">
                                            <shadow type="math_number" id="l4gI%#`:C=?(4rd|p`^.">
                                              <field name="NUM">0</field>
                                            </shadow>
                                          </value>
                                        </block>
                                      </statement>
                                      <statement name="ELSE">
                                        <block type="control_ex" id="W?x]+MW|=5vu@Uj(3,75" inline="true">
                                          <field name="TYPE">true</field>
                                          <field name="CLEAR_RUNNING">FALSE</field>
                                          <value name="OID">
                                            <shadow type="field_oid" id="hRVN~;8VstUL/pd4KSAZ">
                                              <field name="oid">Object ID</field>
                                            </shadow>
                                            <block type="variables_get" id="VV1Lj`Qf^tQkmc+x.maW">
                                              <field name="VAR" id="@i-nl2q|$|OFpK!Yx+CC" variabletype="">anwesenheit_person_2</field>
                                            </block>
                                          </value>
                                          <value name="VALUE">
                                            <shadow type="logic_boolean" id="bbVKs5v:Ert)PYdo!`!i">
                                              <field name="BOOL">TRUE</field>
                                            </shadow>
                                            <block type="text_join" id="ll.R;kcidI|hRLwDFVB{">
                                              <mutation items="3"></mutation>
                                              <value name="ADD0">
                                                <block type="variables_get" id="WD$^uCEDqYwF6:QS*F]j">
                                                  <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field>
                                                </block>
                                              </value>
                                              <value name="ADD1">
                                                <block type="text" id="wR$`1P`CT=B)$/YSN(~J">
                                                  <field name="TEXT"> </field>
                                                </block>
                                              </value>
                                              <value name="ADD2">
                                                <block type="text" id="4c(~/}V#~bT!jwy2iB}J">
                                                  <field name="TEXT">ist offline ❌</field>
                                                </block>
                                              </value>
                                            </block>
                                          </value>
                                          <value name="DELAY_MS">
                                            <shadow type="math_number" id="!d5FRdKZAaU7?)=#m4%_">
                                              <field name="NUM">0</field>
                                            </shadow>
                                          </value>
                                        </block>
                                      </statement>
                                    </block>
                                  </next>
                                </block>
                              </statement>
                              <next>
                                <block type="on_ext" id="SX%6!fqcVoVlD@SU-7Y4" collapsed="true">
                                  <mutation items="1"></mutation>
                                  <field name="CONDITION">ne</field>
                                  <field name="ACK_CONDITION"></field>
                                  <value name="OID0">
                                    <shadow type="field_oid" id=";0_S:)AqTJF$]lRUv@gx">
                                      <field name="oid">default</field>
                                    </shadow>
                                    <block type="variables_get" id="UKe(AmN7{4GdYH(3_`O#">
                                      <field name="VAR" id="nTXOZ!3I{zM-7hg^DXcc" variabletype="">person_1_is_online_DP</field>
                                    </block>
                                  </value>
                                  <statement name="STATEMENT">
                                    <block type="controls_if" id="_z?rO3%XvQmDU%U1=lon">
                                      <mutation else="1"></mutation>
                                      <value name="IF0">
                                        <block type="on_source" id="_(Fal+8L^ATHe#Hq|y+9">
                                          <field name="ATTR">state.val</field>
                                        </block>
                                      </value>
                                      <statement name="DO0">
                                        <block type="control_ex" id="LM-KIX/g(V6Tuik9CLF/" inline="true">
                                          <field name="TYPE">true</field>
                                          <field name="CLEAR_RUNNING">FALSE</field>
                                          <value name="OID">
                                            <shadow type="field_oid" id="hRVN~;8VstUL/pd4KSAZ">
                                              <field name="oid">Object ID</field>
                                            </shadow>
                                            <block type="variables_get" id="7,y}skvg#u?n$OT[5K=S">
                                              <field name="VAR" id="lvz.2`K]e8c1*JEc-vJu" variabletype="">anwesenheit_person_1</field>
                                            </block>
                                          </value>
                                          <value name="VALUE">
                                            <shadow type="logic_boolean" id="bbVKs5v:Ert)PYdo!`!i">
                                              <field name="BOOL">TRUE</field>
                                            </shadow>
                                            <block type="text_join" id="l|J80x/T-`0?9M^7b]:N">
                                              <mutation items="3"></mutation>
                                              <value name="ADD0">
                                                <block type="variables_get" id=".qiA1:)|eFl9@:8-b6*`">
                                                  <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field>
                                                </block>
                                              </value>
                                              <value name="ADD1">
                                                <block type="text" id="G0=0Fc~I_fA]0O)}g3W(">
                                                  <field name="TEXT"> </field>
                                                </block>
                                              </value>
                                              <value name="ADD2">
                                                <block type="text" id="]N,+4OnsaC~Lw_.k0/hh">
                                                  <field name="TEXT">ist online ✅</field>
                                                </block>
                                              </value>
                                            </block>
                                          </value>
                                          <value name="DELAY_MS">
                                            <shadow type="math_number" id="1:S1**dQmdnwe.l7.Z-b">
                                              <field name="NUM">0</field>
                                            </shadow>
                                          </value>
                                          <next>
                                            <block type="telegram" id="54*y/hkmyWndQBH{h#)V">
                                              <field name="INSTANCE"></field>
                                              <field name="LOG"></field>
                                              <field name="SILENT">FALSE</field>
                                              <field name="PARSEMODE">Markdown</field>
                                              <value name="MESSAGE">
                                                <shadow type="text" id="F8`_}5Ls0W8c7x2c+hZa">
                                                  <field name="TEXT">text</field>
                                                </shadow>
                                                <block type="text_join" id="IGB?:md|3ZD;,sYcS|bg">
                                                  <mutation items="3"></mutation>
                                                  <value name="ADD0">
                                                    <block type="variables_get" id="/tAT/wS-)[}+6m*I4~g8">
                                                      <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field>
                                                    </block>
                                                  </value>
                                                  <value name="ADD1">
                                                    <block type="text" id="fFlUO))aCIA!f=Yag|;M">
                                                      <field name="TEXT"> </field>
                                                    </block>
                                                  </value>
                                                  <value name="ADD2">
                                                    <block type="text" id="V[o?yVyX~D{w{(:^NNVr">
                                                      <field name="TEXT">ist online ✅</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </value>
                                              <value name="USERNAME">
                                                <block type="variables_get" id="41ZPm5?AKrt.cqhBg3{2">
                                                  <field name="VAR" id="![EW]9b!hQ9S[MT.q}6-" variabletype="">telegram_benutzer</field>
                                                </block>
                                              </value>
                                            </block>
                                          </next>
                                        </block>
                                      </statement>
                                      <statement name="ELSE">
                                        <block type="control_ex" id="YN=l|7.)+2WVOGMcg!/`" inline="true">
                                          <field name="TYPE">true</field>
                                          <field name="CLEAR_RUNNING">FALSE</field>
                                          <value name="OID">
                                            <shadow type="field_oid" id="hRVN~;8VstUL/pd4KSAZ">
                                              <field name="oid">Object ID</field>
                                            </shadow>
                                            <block type="variables_get" id="4.t^B;y;~YJA^DTb;gyE">
                                              <field name="VAR" id="lvz.2`K]e8c1*JEc-vJu" variabletype="">anwesenheit_person_1</field>
                                            </block>
                                          </value>
                                          <value name="VALUE">
                                            <shadow type="logic_boolean" id="bbVKs5v:Ert)PYdo!`!i">
                                              <field name="BOOL">TRUE</field>
                                            </shadow>
                                            <block type="text_join" id="o}K:*wP8{onf4yKv=4YT">
                                              <mutation items="3"></mutation>
                                              <value name="ADD0">
                                                <block type="variables_get" id="941ISD`abMu2l=]8Y(/m">
                                                  <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field>
                                                </block>
                                              </value>
                                              <value name="ADD1">
                                                <block type="text" id="ZM+pW%,1k!o2Vf?t0R?l">
                                                  <field name="TEXT"> </field>
                                                </block>
                                              </value>
                                              <value name="ADD2">
                                                <block type="text" id="S__OPp))@Dgo/JTcf}ax">
                                                  <field name="TEXT">ist offline ❌</field>
                                                </block>
                                              </value>
                                            </block>
                                          </value>
                                          <value name="DELAY_MS">
                                            <shadow type="math_number" id="f6RJ7!swO;Le1Bfko;L2">
                                              <field name="NUM">0</field>
                                            </shadow>
                                          </value>
                                          <next>
                                            <block type="telegram" id="gONL!Ak:KiDx*lp_)..%">
                                              <field name="INSTANCE"></field>
                                              <field name="LOG"></field>
                                              <field name="SILENT">FALSE</field>
                                              <field name="PARSEMODE">Markdown</field>
                                              <value name="MESSAGE">
                                                <shadow type="text" id="=nQH.TsZSn{lfpy^dbYY">
                                                  <field name="TEXT">text</field>
                                                </shadow>
                                                <block type="text_join" id="z,us3C]4=+L0DA.p_}lp">
                                                  <mutation items="3"></mutation>
                                                  <value name="ADD0">
                                                    <block type="variables_get" id="i3Q4|n~53-sQ?^T*H.TC">
                                                      <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field>
                                                    </block>
                                                  </value>
                                                  <value name="ADD1">
                                                    <block type="text" id="QFr-g%mo//Sg8;:roRfA">
                                                      <field name="TEXT"> </field>
                                                    </block>
                                                  </value>
                                                  <value name="ADD2">
                                                    <block type="text" id=")0nYWe-N-O.,_Jrn${Vm">
                                                      <field name="TEXT">ist offline ❌</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </value>
                                              <value name="USERNAME">
                                                <block type="variables_get" id="vm,}kUg}PwBi!:PsGM,{">
                                                  <field name="VAR" id="![EW]9b!hQ9S[MT.q}6-" variabletype="">telegram_benutzer</field>
                                                </block>
                                              </value>
                                            </block>
                                          </next>
                                        </block>
                                      </statement>
                                    </block>
                                  </statement>
                                  <next>
                                    <block type="on_ext" id="~ObZs=5%-:^CnQuYO(z=" collapsed="true">
                                      <mutation items="1"></mutation>
                                      <field name="CONDITION">ne</field>
                                      <field name="ACK_CONDITION"></field>
                                      <value name="OID0">
                                        <shadow type="field_oid" id=";0_S:)AqTJF$]lRUv@gx">
                                          <field name="oid">default</field>
                                        </shadow>
                                        <block type="variables_get" id="Olbu@Xq[MZTK?j4d_a#g">
                                          <field name="VAR" id="yB(N?#)zIjYIo%.B@UT(" variabletype="">person_2_is_online_DP</field>
                                        </block>
                                      </value>
                                      <statement name="STATEMENT">
                                        <block type="controls_if" id="!K2H`_FR~oD9eh*@T1|w">
                                          <mutation else="1"></mutation>
                                          <value name="IF0">
                                            <block type="on_source" id="*I8C7_{s9`7I(Zx#@%|2">
                                              <field name="ATTR">state.val</field>
                                            </block>
                                          </value>
                                          <statement name="DO0">
                                            <block type="control_ex" id="mFAN(dDUr6q/gR6UwBVZ" inline="true">
                                              <field name="TYPE">true</field>
                                              <field name="CLEAR_RUNNING">FALSE</field>
                                              <value name="OID">
                                                <shadow type="field_oid" id="hRVN~;8VstUL/pd4KSAZ">
                                                  <field name="oid">Object ID</field>
                                                </shadow>
                                                <block type="variables_get" id="$UftmC*.f}ze-ab-ys,Q">
                                                  <field name="VAR" id="@i-nl2q|$|OFpK!Yx+CC" variabletype="">anwesenheit_person_2</field>
                                                </block>
                                              </value>
                                              <value name="VALUE">
                                                <shadow type="logic_boolean" id="bbVKs5v:Ert)PYdo!`!i">
                                                  <field name="BOOL">TRUE</field>
                                                </shadow>
                                                <block type="text_join" id="P3N04_kX]?qG{Xs2[(fH">
                                                  <mutation items="3"></mutation>
                                                  <value name="ADD0">
                                                    <block type="variables_get" id="P5IAcPBtd#@dS,*2B@fW">
                                                      <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field>
                                                    </block>
                                                  </value>
                                                  <value name="ADD1">
                                                    <block type="text" id="r7@)j/8/+({|VPB=@6%r">
                                                      <field name="TEXT"> </field>
                                                    </block>
                                                  </value>
                                                  <value name="ADD2">
                                                    <block type="text" id="xxE=NzJgw3NYsn-%!LPx">
                                                      <field name="TEXT">ist online ✅</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </value>
                                              <value name="DELAY_MS">
                                                <shadow type="math_number" id="p/d5]r.~2%E#lqUZ+Zzo">
                                                  <field name="NUM">0</field>
                                                </shadow>
                                              </value>
                                              <next>
                                                <block type="telegram" id="G/k/uD]_e{FwK|;oni_9">
                                                  <field name="INSTANCE"></field>
                                                  <field name="LOG"></field>
                                                  <field name="SILENT">FALSE</field>
                                                  <field name="PARSEMODE">Markdown</field>
                                                  <value name="MESSAGE">
                                                    <shadow type="text" id="F8`_}5Ls0W8c7x2c+hZa">
                                                      <field name="TEXT">text</field>
                                                    </shadow>
                                                    <block type="text_join" id="EwI{:V.W#KbT~#,))hp4">
                                                      <mutation items="3"></mutation>
                                                      <value name="ADD0">
                                                        <block type="variables_get" id="rXJ#~l_SmSueR^}c}c+2">
                                                          <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field>
                                                        </block>
                                                      </value>
                                                      <value name="ADD1">
                                                        <block type="text" id="{++h2{_?][DK]_UJQ!1;">
                                                          <field name="TEXT"> </field>
                                                        </block>
                                                      </value>
                                                      <value name="ADD2">
                                                        <block type="text" id="+T~B`e5Yo89(P:rS[eXJ">
                                                          <field name="TEXT">ist online ✅</field>
                                                        </block>
                                                      </value>
                                                    </block>
                                                  </value>
                                                  <value name="USERNAME">
                                                    <block type="variables_get" id="SIP/Bn3+q.?-|~fP{|mj">
                                                      <field name="VAR" id="![EW]9b!hQ9S[MT.q}6-" variabletype="">telegram_benutzer</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </next>
                                            </block>
                                          </statement>
                                          <statement name="ELSE">
                                            <block type="control_ex" id="L{2Dp(q220seA@K)H~:9" inline="true">
                                              <field name="TYPE">true</field>
                                              <field name="CLEAR_RUNNING">FALSE</field>
                                              <value name="OID">
                                                <shadow type="field_oid" id="hRVN~;8VstUL/pd4KSAZ">
                                                  <field name="oid">Object ID</field>
                                                </shadow>
                                                <block type="variables_get" id="37B(F$tlde-Bt#u.;L~#">
                                                  <field name="VAR" id="@i-nl2q|$|OFpK!Yx+CC" variabletype="">anwesenheit_person_2</field>
                                                </block>
                                              </value>
                                              <value name="VALUE">
                                                <shadow type="logic_boolean" id="bbVKs5v:Ert)PYdo!`!i">
                                                  <field name="BOOL">TRUE</field>
                                                </shadow>
                                                <block type="text_join" id="eFy4q-cPhD:xWFQ|LO1f">
                                                  <mutation items="3"></mutation>
                                                  <value name="ADD0">
                                                    <block type="variables_get" id=";$UrDWF]KPE{L^K`r/hr">
                                                      <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field>
                                                    </block>
                                                  </value>
                                                  <value name="ADD1">
                                                    <block type="text" id="wwJ^.~7}z9=7(BjXQ.p)">
                                                      <field name="TEXT"> </field>
                                                    </block>
                                                  </value>
                                                  <value name="ADD2">
                                                    <block type="text" id="lM_E)oJ#UCr|#hxu*pAT">
                                                      <field name="TEXT">ist offline ❌</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </value>
                                              <value name="DELAY_MS">
                                                <shadow type="math_number" id="~ECK]+XM?KdV2JNU{|2O">
                                                  <field name="NUM">0</field>
                                                </shadow>
                                              </value>
                                              <next>
                                                <block type="telegram" id="QrG*QsVt38c~9UI4H1.U">
                                                  <field name="INSTANCE"></field>
                                                  <field name="LOG"></field>
                                                  <field name="SILENT">FALSE</field>
                                                  <field name="PARSEMODE">Markdown</field>
                                                  <value name="MESSAGE">
                                                    <shadow type="text" id="=nQH.TsZSn{lfpy^dbYY">
                                                      <field name="TEXT">text</field>
                                                    </shadow>
                                                    <block type="text_join" id="i*RxzVi!*A==)}IS5C}S">
                                                      <mutation items="3"></mutation>
                                                      <value name="ADD0">
                                                        <block type="variables_get" id="}%!^~Qa|-+l=w6[91@*f">
                                                          <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field>
                                                        </block>
                                                      </value>
                                                      <value name="ADD1">
                                                        <block type="text" id="nE0K73Q(?EJwI52FCdl@">
                                                          <field name="TEXT"> </field>
                                                        </block>
                                                      </value>
                                                      <value name="ADD2">
                                                        <block type="text" id="zQ8F1qC^L?*7c#hE}z_A">
                                                          <field name="TEXT">ist offline ❌</field>
                                                        </block>
                                                      </value>
                                                    </block>
                                                  </value>
                                                  <value name="USERNAME">
                                                    <block type="variables_get" id="M|AZ+FjOe.JP3wkCCbbC">
                                                      <field name="VAR" id="![EW]9b!hQ9S[MT.q}6-" variabletype="">telegram_benutzer</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </next>
                                            </block>
                                          </statement>
                                        </block>
                                      </statement>
                                    </block>
                                  </next>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </next>
                </block>
              </statement>
            </block>
          </xml>
          
          dslraserD Offline
          dslraserD Offline
          dslraser
          Forum Testing Most Active
          schrieb am zuletzt editiert von dslraser
          #226

          @dslraser sagte in [Major Update] UniFi Adapter v0.5.0:

          Zum Thema Anwesenheit:
          Ich habe mal schnell was mit Blockly zusammengeklöppelt und werde damit mal ne Weile probieren. Ich habe bei mir erstmal nur zwei Personen zur Anwesenheit drinn. Bisher sieht das ganz gut aus, danke @braindead Mal sehen wie sich die Handys im Ruhemodus schlagen (zwei x Samsung)

          @braindead
          Ich zitiere mich mal selbst. Bei mir kommt es immer wieder vor das ich eine offline Meldung bekomme, manchmal genau im Stundenrhytmus(Nachts), keine Ahnung was die Handys machen. Es kann aber sein das die Handys kurz die AP wechseln und dafür das Abfrageintervall zu kurz ist. Ich werde das Abfrageintervall mal verlängern und in mein Blockly vielleicht auch eine Verzögerung einbauen.
          Wenn ich z.B. in den Keller oder Garten gehe (andere AP) kommt das auch vor, daher meine Vermutung. Die Handys sind übrigens bei der nächsten Abfrage/Durchlauf direkt wieder online... Mal schauen.
          Screenshot_20200524-125740_Telegram.jpg

          Edit: das Handy meiner Frau liegt in diesem Beispiel gerade nur rum und wurde nicht vom Fleck bewegt. (so wie Nachts auch)

          braindeadB crunchipC 2 Antworten Letzte Antwort
          0
          • dslraserD dslraser

            @dslraser sagte in [Major Update] UniFi Adapter v0.5.0:

            Zum Thema Anwesenheit:
            Ich habe mal schnell was mit Blockly zusammengeklöppelt und werde damit mal ne Weile probieren. Ich habe bei mir erstmal nur zwei Personen zur Anwesenheit drinn. Bisher sieht das ganz gut aus, danke @braindead Mal sehen wie sich die Handys im Ruhemodus schlagen (zwei x Samsung)

            @braindead
            Ich zitiere mich mal selbst. Bei mir kommt es immer wieder vor das ich eine offline Meldung bekomme, manchmal genau im Stundenrhytmus(Nachts), keine Ahnung was die Handys machen. Es kann aber sein das die Handys kurz die AP wechseln und dafür das Abfrageintervall zu kurz ist. Ich werde das Abfrageintervall mal verlängern und in mein Blockly vielleicht auch eine Verzögerung einbauen.
            Wenn ich z.B. in den Keller oder Garten gehe (andere AP) kommt das auch vor, daher meine Vermutung. Die Handys sind übrigens bei der nächsten Abfrage/Durchlauf direkt wieder online... Mal schauen.
            Screenshot_20200524-125740_Telegram.jpg

            Edit: das Handy meiner Frau liegt in diesem Beispiel gerade nur rum und wurde nicht vom Fleck bewegt. (so wie Nachts auch)

            braindeadB Offline
            braindeadB Offline
            braindead
            Developer
            schrieb am zuletzt editiert von
            #227

            @dslraser Ich tippe auch darauf, dass das Abfrageinterval zu kurz ist. Das ließe ich entweder durch ein Offset (wie im UniFi Script) lösen oder indem das Abfrageinterval höher gesetzt wird.

            Welches Interval hast Du momentan eingestellt? Bei mir sind es 60 Sekunden und ich konnte den Effekt bisher nicht beobachten.

            dslraserD 1 Antwort Letzte Antwort
            0
            • braindeadB braindead

              @dslraser Ich tippe auch darauf, dass das Abfrageinterval zu kurz ist. Das ließe ich entweder durch ein Offset (wie im UniFi Script) lösen oder indem das Abfrageinterval höher gesetzt wird.

              Welches Interval hast Du momentan eingestellt? Bei mir sind es 60 Sekunden und ich konnte den Effekt bisher nicht beobachten.

              dslraserD Offline
              dslraserD Offline
              dslraser
              Forum Testing Most Active
              schrieb am zuletzt editiert von
              #228

              @braindead sagte in [Major Update] UniFi Adapter v0.5.0:

              Bei mir sind es 60 Sekunden

              bei mir auch. ( 3 AP + 2 Mesh) Ich setze das Intervall mal auf 90 Sekunden.

              1 Antwort Letzte Antwort
              1
              • braindeadB braindead

                @BBTown Motivation kannst Du. Danke. 🤔

                BBTownB Offline
                BBTownB Offline
                BBTown
                schrieb am zuletzt editiert von BBTown
                #229

                @braindead sagte in [Major Update] UniFi Adapter v0.5.0:

                @BBTown Motivation kannst Du. Danke. 🤔

                Ja ich weiß, das ist nicht immer fair und ich werde deiner Leistung/Unterstützung damit nicht unbedingt gerecht 😞
                Andererseits, schau doch mal nach wann ich das erste mal den Vorschlag/die Bitte nach einer Whitelist hier eingestellt habe. Im Anschluss kam diese Bitte immer wieder von mir und auch anderen Anwendern.

                Wenn ich alle Themen rund um UniFi querlese und zusammenfasse, dann ist die am häufigsten genannte Funktion/Idee der Einsatz für die Anwesenheitserkennung. Wenn dem so ist, dann benötigst Du eben einfach nur eine handvoll an Devices/Datenpunkten.

                Aber RX/TX scheint einfach wichtiger zu sein ...

                ioBroker auf NUC (VM debian v13 (Trixie ), node v22.21.0 npm v10.9.4, js-controller v7.0.7 jsonl/jsonl / HomeMatic CCU-2 (Wired und Funk) / Philips HUE / echo.DOT / Broadlink RM pro / SONOS

                braindeadB 1 Antwort Letzte Antwort
                0
                • BBTownB BBTown

                  @braindead sagte in [Major Update] UniFi Adapter v0.5.0:

                  @BBTown Motivation kannst Du. Danke. 🤔

                  Ja ich weiß, das ist nicht immer fair und ich werde deiner Leistung/Unterstützung damit nicht unbedingt gerecht 😞
                  Andererseits, schau doch mal nach wann ich das erste mal den Vorschlag/die Bitte nach einer Whitelist hier eingestellt habe. Im Anschluss kam diese Bitte immer wieder von mir und auch anderen Anwendern.

                  Wenn ich alle Themen rund um UniFi querlese und zusammenfasse, dann ist die am häufigsten genannte Funktion/Idee der Einsatz für die Anwesenheitserkennung. Wenn dem so ist, dann benötigst Du eben einfach nur eine handvoll an Devices/Datenpunkten.

                  Aber RX/TX scheint einfach wichtiger zu sein ...

                  braindeadB Offline
                  braindeadB Offline
                  braindead
                  Developer
                  schrieb am zuletzt editiert von
                  #230

                  @BBTown Ich habe klar kommuniziert, was ich mit dem Adapter erreichen möchte und in welcher Reihenfolge das passiert. Einige Dinge (RX/TX) werden nebenbei mitgenommen, andere werden eingebaut sobald sie ins Konzept passen.

                  Es steht wirklich jedem frei einen Beitrag zum Adapter zu leisten in Form von Commits auf GitHub. Dein verlinkter Kommentar ist mittlerweile 22 Tage alt, also mehr als genug Zeit den Commit zu machen.

                  Aber irgendetwas scheint auch für Dich einfach wichtiger zu sein ... 😉

                  BBTownB 1 Antwort Letzte Antwort
                  1
                  • dslraserD dslraser

                    @dslraser sagte in [Major Update] UniFi Adapter v0.5.0:

                    Zum Thema Anwesenheit:
                    Ich habe mal schnell was mit Blockly zusammengeklöppelt und werde damit mal ne Weile probieren. Ich habe bei mir erstmal nur zwei Personen zur Anwesenheit drinn. Bisher sieht das ganz gut aus, danke @braindead Mal sehen wie sich die Handys im Ruhemodus schlagen (zwei x Samsung)

                    @braindead
                    Ich zitiere mich mal selbst. Bei mir kommt es immer wieder vor das ich eine offline Meldung bekomme, manchmal genau im Stundenrhytmus(Nachts), keine Ahnung was die Handys machen. Es kann aber sein das die Handys kurz die AP wechseln und dafür das Abfrageintervall zu kurz ist. Ich werde das Abfrageintervall mal verlängern und in mein Blockly vielleicht auch eine Verzögerung einbauen.
                    Wenn ich z.B. in den Keller oder Garten gehe (andere AP) kommt das auch vor, daher meine Vermutung. Die Handys sind übrigens bei der nächsten Abfrage/Durchlauf direkt wieder online... Mal schauen.
                    Screenshot_20200524-125740_Telegram.jpg

                    Edit: das Handy meiner Frau liegt in diesem Beispiel gerade nur rum und wurde nicht vom Fleck bewegt. (so wie Nachts auch)

                    crunchipC Abwesend
                    crunchipC Abwesend
                    crunchip
                    Forum Testing Most Active
                    schrieb am zuletzt editiert von
                    #231

                    @dslraser ich habe das nun auch eine Weile beobachtet, dazu auch zusätzlich dein Script😜 👍 genutzt.
                    Intervall habe ich 60sek im Adapter eingestellt.

                    Egal zu welchen Tages/Nachtzeiten und in unregelmäßigen Abständen, kommen "Fehlmeldungen".
                    Bedeutet, es Kommen offline Meldungen, obwohl ich im Netz bin.
                    Dabei ist es egal ob das Handy durchs Haus irrt oder am Platz liegt.
                    Am Handy ist extra "Energiesparmodus" deaktiviert. Also es schläft nicht.
                    Auch habe ich meinen zweiten AP deaktiviert, somit sollte auch das wechseln zwischen AP ´s nicht damit zusammen hängen.
                    Zuverlässig läuft nur mein anders Skript, meldet nur, wenn ich wirklich off/online bin.

                    umgestiegen von Proxmox auf Unraid

                    braindeadB 1 Antwort Letzte Antwort
                    0
                    • crunchipC crunchip

                      @dslraser ich habe das nun auch eine Weile beobachtet, dazu auch zusätzlich dein Script😜 👍 genutzt.
                      Intervall habe ich 60sek im Adapter eingestellt.

                      Egal zu welchen Tages/Nachtzeiten und in unregelmäßigen Abständen, kommen "Fehlmeldungen".
                      Bedeutet, es Kommen offline Meldungen, obwohl ich im Netz bin.
                      Dabei ist es egal ob das Handy durchs Haus irrt oder am Platz liegt.
                      Am Handy ist extra "Energiesparmodus" deaktiviert. Also es schläft nicht.
                      Auch habe ich meinen zweiten AP deaktiviert, somit sollte auch das wechseln zwischen AP ´s nicht damit zusammen hängen.
                      Zuverlässig läuft nur mein anders Skript, meldet nur, wenn ich wirklich off/online bin.

                      braindeadB Offline
                      braindeadB Offline
                      braindead
                      Developer
                      schrieb am zuletzt editiert von
                      #232

                      @crunchip said in [Major Update] UniFi Adapter v0.5.0:

                      Zuverlässig läuft nur mein anders Skript, meldet nur, wenn ich wirklich off/online bin.

                      OK, dann Butter bei die Fische: Wie oft läuft Dein Script und gibt es ein Offset? Bitte auch mal das Script hier posten, damit ich das genau nachvollziehen kann. 🙂

                      crunchipC 1 Antwort Letzte Antwort
                      0
                      • braindeadB braindead

                        @crunchip said in [Major Update] UniFi Adapter v0.5.0:

                        Zuverlässig läuft nur mein anders Skript, meldet nur, wenn ich wirklich off/online bin.

                        OK, dann Butter bei die Fische: Wie oft läuft Dein Script und gibt es ein Offset? Bitte auch mal das Script hier posten, damit ich das genau nachvollziehen kann. 🙂

                        crunchipC Abwesend
                        crunchipC Abwesend
                        crunchip
                        Forum Testing Most Active
                        schrieb am zuletzt editiert von
                        #233

                        @braindead hatte ich weiter oben schon genannt
                        was anderes macht du ja auch nicht im Adapter?

                        codeschnipsel

                        function checkUAP () {
                            for (var i=0; i<wificlients.devices.length; i++) {
                                // UAP abfragen
                                var lchange = getState("unifi.0.default.clients." + wificlients.devices[i].mac + ".uptime_by_uap").lc;
                                var uap_anwesenheit = (lchange - ((new Date().getTime()) - 60000) < 0 === true) ? false : true;
                                
                                if (logging) log('Gerät ' + wificlients.devices[i].geraet + ' von ' + wificlients.devices[i].nutzer + ' ist ' + uap_anwesenheit);
                                
                                // Datenpunkt verzögert beschreiben
                                var idUAP = "javascript." + instance + ".Anwesend.UAP." + wificlients.devices[i].nutzer;
                                setStateDelayed(idUAP, uap_anwesenheit, 1000);
                                
                            }
                        } 
                         
                        // jede Minute
                        schedule('* * * * * *', checkUAP);
                         
                        // bei Skriptstart
                        createStates(); // Datenpunkte erstmal anlegen
                        setTimeout(function() { // 2s verzögert Abfrage erstmals ausführen
                            checkUAP();
                        }, 2*1000);
                        

                        umgestiegen von Proxmox auf Unraid

                        dslraserD 1 Antwort Letzte Antwort
                        0
                        • crunchipC crunchip

                          @braindead hatte ich weiter oben schon genannt
                          was anderes macht du ja auch nicht im Adapter?

                          codeschnipsel

                          function checkUAP () {
                              for (var i=0; i<wificlients.devices.length; i++) {
                                  // UAP abfragen
                                  var lchange = getState("unifi.0.default.clients." + wificlients.devices[i].mac + ".uptime_by_uap").lc;
                                  var uap_anwesenheit = (lchange - ((new Date().getTime()) - 60000) < 0 === true) ? false : true;
                                  
                                  if (logging) log('Gerät ' + wificlients.devices[i].geraet + ' von ' + wificlients.devices[i].nutzer + ' ist ' + uap_anwesenheit);
                                  
                                  // Datenpunkt verzögert beschreiben
                                  var idUAP = "javascript." + instance + ".Anwesend.UAP." + wificlients.devices[i].nutzer;
                                  setStateDelayed(idUAP, uap_anwesenheit, 1000);
                                  
                              }
                          } 
                           
                          // jede Minute
                          schedule('* * * * * *', checkUAP);
                           
                          // bei Skriptstart
                          createStates(); // Datenpunkte erstmal anlegen
                          setTimeout(function() { // 2s verzögert Abfrage erstmals ausführen
                              checkUAP();
                          }, 2*1000);
                          
                          dslraserD Offline
                          dslraserD Offline
                          dslraser
                          Forum Testing Most Active
                          schrieb am zuletzt editiert von
                          #234

                          @crunchip
                          okay, in Deinem Script ist eine Verzögerung drinn....Dann ändere ich meins auch mal. Wenn Du den "Schraubenschlüssel" für Telegramm nimmst, dann kommen auch keine Nachrichten zwischendurch, oder doch ?

                          crunchipC 1 Antwort Letzte Antwort
                          0
                          • dslraserD dslraser

                            @crunchip
                            okay, in Deinem Script ist eine Verzögerung drinn....Dann ändere ich meins auch mal. Wenn Du den "Schraubenschlüssel" für Telegramm nimmst, dann kommen auch keine Nachrichten zwischendurch, oder doch ?

                            crunchipC Abwesend
                            crunchipC Abwesend
                            crunchip
                            Forum Testing Most Active
                            schrieb am zuletzt editiert von
                            #235

                            @dslraser
                            Wenn ich den Datenpunkt über den Schraubenschlüssel konfigurieren möchte, sei es per Telegram oder auch iogo Nachrichten zu senden, bekomme ich keine Benachrichtigung, warum auch immer.
                            Daher hab ich mir wiederum dafür ein Blockly erstellt

                            umgestiegen von Proxmox auf Unraid

                            1 Antwort Letzte Antwort
                            0
                            • M Offline
                              M Offline
                              mtaxer
                              schrieb am zuletzt editiert von
                              #236

                              @braindead
                              Welcher Zeitraum steckt denn hinter den Datenpunkten:
                              unifi.0.default.devices.[USG 3P].port_table.wan.rx_bytes
                              und
                              unifi.0.default.devices.[USG 3P].port_table.wan.tx_bytes

                              Danke

                              SG
                              Mario

                              1 Antwort Letzte Antwort
                              0
                              • braindeadB braindead

                                @BBTown Ich habe klar kommuniziert, was ich mit dem Adapter erreichen möchte und in welcher Reihenfolge das passiert. Einige Dinge (RX/TX) werden nebenbei mitgenommen, andere werden eingebaut sobald sie ins Konzept passen.

                                Es steht wirklich jedem frei einen Beitrag zum Adapter zu leisten in Form von Commits auf GitHub. Dein verlinkter Kommentar ist mittlerweile 22 Tage alt, also mehr als genug Zeit den Commit zu machen.

                                Aber irgendetwas scheint auch für Dich einfach wichtiger zu sein ... 😉

                                BBTownB Offline
                                BBTownB Offline
                                BBTown
                                schrieb am zuletzt editiert von
                                #237

                                @braindead sagte in [Major Update] UniFi Adapter v0.5.0:

                                Es steht wirklich jedem frei einen Beitrag zum Adapter zu leisten in Form von Commits auf GitHub. Dein verlinkter Kommentar ist mittlerweile 22 Tage alt, also mehr als genug Zeit den Commit zu machen.
                                Aber irgendetwas scheint auch für Dich einfach wichtiger zu sein ...

                                ja, wenn es rein um die Form geht, und Du Wünsche und Kommentare hier im Thread nicht berücksichtigen magst, dann kann man das selbstverständlich so handhaben. Entweder baut man einen Adapter der möglichst viele anspricht, oder man baut den eben vorrangig für sich selbst.

                                Mitunter schmeckt der Köder dem Angler eben besser als dem Fisch 😎

                                ioBroker auf NUC (VM debian v13 (Trixie ), node v22.21.0 npm v10.9.4, js-controller v7.0.7 jsonl/jsonl / HomeMatic CCU-2 (Wired und Funk) / Philips HUE / echo.DOT / Broadlink RM pro / SONOS

                                braindeadB SunshinemakerS 2 Antworten Letzte Antwort
                                0
                                • BBTownB BBTown

                                  @braindead sagte in [Major Update] UniFi Adapter v0.5.0:

                                  Es steht wirklich jedem frei einen Beitrag zum Adapter zu leisten in Form von Commits auf GitHub. Dein verlinkter Kommentar ist mittlerweile 22 Tage alt, also mehr als genug Zeit den Commit zu machen.
                                  Aber irgendetwas scheint auch für Dich einfach wichtiger zu sein ...

                                  ja, wenn es rein um die Form geht, und Du Wünsche und Kommentare hier im Thread nicht berücksichtigen magst, dann kann man das selbstverständlich so handhaben. Entweder baut man einen Adapter der möglichst viele anspricht, oder man baut den eben vorrangig für sich selbst.

                                  Mitunter schmeckt der Köder dem Angler eben besser als dem Fisch 😎

                                  braindeadB Offline
                                  braindeadB Offline
                                  braindead
                                  Developer
                                  schrieb am zuletzt editiert von
                                  #238

                                  @BBTown Interessant, den ersten Teil meiner Antwort zitierst Du nicht. Wahrscheinlich passt er nicht zu Deiner gewollten Aussage und dem flotten Spruch am Ende, oder?

                                  Um das Thema abzuschließen: Eine Whitelist kommt, sobald alle wichtigeren Punkte abgearbeitet sind. Wenn der Adapter bis dahin für Dich nicht zu gebrauchen ist, dann sei es so. Mehr als 1000 Installationen >= v0.4.3 zeugen davon, dass es genug User gibt, die den Adapter auch ohne Whitelist nutzen.

                                  BBTownB 1 Antwort Letzte Antwort
                                  2
                                  • BBTownB BBTown

                                    @braindead sagte in [Major Update] UniFi Adapter v0.5.0:

                                    Es steht wirklich jedem frei einen Beitrag zum Adapter zu leisten in Form von Commits auf GitHub. Dein verlinkter Kommentar ist mittlerweile 22 Tage alt, also mehr als genug Zeit den Commit zu machen.
                                    Aber irgendetwas scheint auch für Dich einfach wichtiger zu sein ...

                                    ja, wenn es rein um die Form geht, und Du Wünsche und Kommentare hier im Thread nicht berücksichtigen magst, dann kann man das selbstverständlich so handhaben. Entweder baut man einen Adapter der möglichst viele anspricht, oder man baut den eben vorrangig für sich selbst.

                                    Mitunter schmeckt der Köder dem Angler eben besser als dem Fisch 😎

                                    SunshinemakerS Offline
                                    SunshinemakerS Offline
                                    Sunshinemaker
                                    schrieb am zuletzt editiert von
                                    #239

                                    @BBTown said in [Major Update] UniFi Adapter v0.5.0:

                                    Mitunter schmeckt der Köder dem Angler eben besser als dem Fisch 😎

                                    Ich würde mal behaupten das die meisten Adapter daraus Endstanden sind das jemand etwas für sich selbst gebraucht hat was es bisdahin nicht gab oder er mit dem was es gab unzufrieden war. Es ist also jedem freigestellt, wenn er nicht zufrieden ist, etwas eigenes auf die Beine zu stellen. Aber die meisten machen es nicht weil die es entweder nicht können, keine zeit oder lust oder beides haben sich damit zu beschäftigen und es lernen oder ganz einfach nur zu faul dafür sind.

                                    Ich für meinen Teil will nicht abstreiten das mir auch auch die Motivation fehlt es zu lernen einen Adapter zu schreiben, aber ich versuche auch nicht die Hand zu beißen die mich füttert.

                                    Muß eben jeder selber wissen wie er sich verhält.

                                    1 Antwort Letzte Antwort
                                    0
                                    • braindeadB braindead

                                      @BBTown Interessant, den ersten Teil meiner Antwort zitierst Du nicht. Wahrscheinlich passt er nicht zu Deiner gewollten Aussage und dem flotten Spruch am Ende, oder?

                                      Um das Thema abzuschließen: Eine Whitelist kommt, sobald alle wichtigeren Punkte abgearbeitet sind. Wenn der Adapter bis dahin für Dich nicht zu gebrauchen ist, dann sei es so. Mehr als 1000 Installationen >= v0.4.3 zeugen davon, dass es genug User gibt, die den Adapter auch ohne Whitelist nutzen.

                                      BBTownB Offline
                                      BBTownB Offline
                                      BBTown
                                      schrieb am zuletzt editiert von
                                      #240

                                      @braindead sagte in [Major Update] UniFi Adapter v0.5.0:

                                      @BBTown Interessant, den ersten Teil meiner Antwort zitierst Du nicht. Wahrscheinlich passt er nicht zu Deiner gewollten Aussage und dem flotten Spruch am Ende, oder?

                                      das ganze Thema ist ja wie gesagt nicht neu, und zum Thema "Github" und "es interessiert mich nicht", verweise ich einfach mal auf diesen Beitrag ...

                                      Ich wollte mich übrigens gar nicht streiten 😎

                                      ioBroker auf NUC (VM debian v13 (Trixie ), node v22.21.0 npm v10.9.4, js-controller v7.0.7 jsonl/jsonl / HomeMatic CCU-2 (Wired und Funk) / Philips HUE / echo.DOT / Broadlink RM pro / SONOS

                                      1 Antwort Letzte Antwort
                                      0
                                      • L Offline
                                        L Offline
                                        looxer01
                                        schrieb am zuletzt editiert von looxer01
                                        #241

                                        Hi,
                                        super Arbeit !!!!
                                        Ich habe schon lange einen Unifi Access Point. Eigentlich lief es bisher ok aber jetzt ist das SetUp wesentlich effizienter und übersichtlicher.
                                        Vielen Dank dafür.
                                        Für alle die Interesse haben und als kleines Danke schön an @braindead Ich habe vor Jahren mal ein AnwesenheitsControl Script für TR64 geschrieben. Jetzt habe ich ein kleines Script für den Unifi Adapter geschrieben (eigentlich für mich - Teile ich aber gerne 🙂
                                        Das Script kann wie gehabt ein externes Logging, eine Jason mit Komm und Geht und eine einfache Liste der Anwesenheiten.
                                        Ausserdem lassen sich die States aus Unifi spiegeln. Vielleicht hilft das bei dem Thema WhiteList.
                                        Der Hauptnutzen des Scriptes ist es aber einen Datenpunkt zu haben, der die Anwesenheiten kumuliert. Also JemandDA oder nicht..

                                        weiter unten das Script. Habe es einfach gehalten. Damit sollten also Anpassungen leicht möglich sein.

                                        Liebe Grüße
                                        Looxer

                                        //-----------------------------------------------------------------------------------------------------
                                        // Einstellungsbereich
                                        //-----------------------------------------------------------------------------------------------------
                                        
                                        // Liste der teilnehmenden User/Geräte
                                        var Anwesenheit = [];
                                        Anwesenheit[0] = ['unifi.0.default.clients.7c:94:2a:xx:4e:xx.is_online', 'Daisy' ];
                                        Anwesenheit[1] = ['unifi.0.default.clients.b8:7b:c5:xx:4c:xx.is_online', 'Micky' ];
                                        Anwesenheit[2] = ['unifi.0.default.clients.d0:2b:20:xx:98:xx.is_online', 'Tick' ];
                                        Anwesenheit[3] = ['unifi.0.default.clients.8c:8e:f2:xx:6f:xx.is_online', 'Trick' ];
                                        Anwesenheit[4] = ['unifi.0.default.clients.88:44:77:xx:5b:xx.is_online', 'Track' ];
                                        
                                        var path = "javascript.0.Anwesenheitssteuerung.Userlist."
                                                                                       
                                        //Logging
                                           var logflag = false;                                                         // logging enabled
                                           var LogPath = "/opt/iobroker/iobroker-data/Anwesenheiten2.csv";             // Pfad und Dateiname des externen Logs
                                        
                                        // Debug
                                        var debug = true;                                                                   // mehr/weniger meldungen im Log
                                        
                                        // States anlegen ?
                                        var CreateAllStates = true;                                                    // checken ob alle States angeleget sind ? dann auf true
                                        
                                        var shadowing = true;                                                           // user Status spiegeln 
                                        
                                        //-------------------------------------------------------------------------------------------------------
                                        // Start der Logik
                                        //-------------------------------------------------------------------------------------------------------
                                        var fs = require('fs');                     // enable write fuer externes log
                                        
                                        var UserAllText         = "JemandDa"; // ist irgendwer da ?
                                        var UserString          = "Liste"; // Statename fuer die Liste in VIS
                                        
                                        if (CreateAllStates) {
                                            CreateStates(); // States anlegen
                                        };
                                        Subscribe(); // Subscriptions fuer alle User anlegen
                                        
                                        
                                        
                                        
                                        
                                        //-----------------------------------------------------------------------------------------------------
                                        // Suscription
                                        //-----------------------------------------------------------------------------------------------------
                                        function Subscribe () {
                                        
                                            for (var i in Anwesenheit) {  // loop ueber alle 
                                                log("Subscription fuer "+Anwesenheit[i][1] + " erstellt","info");
                                                on({id: Anwesenheit[i][0], change: 'any'}, function(obj) {  // erstelle subscription
                                                    if (obj.state.val !== obj.oldState.val) {
                                                        if(debug ) {log ("Anwesenheitsstatus Aenderung fuer Objekt " + obj.id  +" auf " + obj.state.val + " erkannt","info" )};
                                                        UserUpdate(obj.id,obj.state.val );
                                                    }
                                        
                                                }); // endon
                                            }
                                        }
                                        
                                        //-----------------------------------------------------------------------------------------------------
                                        // Userupdate
                                        //-----------------------------------------------------------------------------------------------------
                                        function UserUpdate (objekt,Status) {
                                            var User = "";
                                            var CreationTime = formatDate(new Date(),"TT.MM.JJJJ SS:mm:ss");
                                            var LogString= "";
                                            var anzahluser = 0;
                                            
                                            // auslösenden User ermitteln
                                            for (var i in Anwesenheit) {  // loop ueber alle
                                                anzahluser = anzahluser + 1 ;
                                                if(Anwesenheit[i][0] === objekt ) {     // das ist der Auslöser
                                                    User = Anwesenheit[i][1]
                                                    log ("Anwesenheitsstatus Aenderung fuer User " + User + " auf " + Status + " erkannt","info" );
                                                }
                                            }
                                            if(debug) {log("Anzahl User in der Userlist = "+ anzahluser,"info")}
                                            if(Status === true) {                   // user wurde auf anwesend gesetzt
                                                setState(path+"1KommtGeht."+User+"Kommt",CreationTime);
                                                LogString = User + ";"+ "Kommt";         
                                                writelog(LogString);    
                                            }else{  
                                                setState(path+"1KommtGeht."+User+"Geht",CreationTime);
                                                LogString = User + ";" + "Geht"; 
                                                writelog(LogString);   
                                            }
                                        
                                            // jetzt schauen ob kein User mehr da ist
                                            var Userda = false;
                                            var Userlist = "";
                                            for (var i in Anwesenheit) {  // loop ueber alle
                                                if (existsState(Anwesenheit[i][0]) ) { 
                                                    if (getState(Anwesenheit[i][0]).val) {
                                                        Userda = true;
                                                        Userlist = Userlist + " " + Anwesenheit[i][1];
                                                    }
                                                }
                                            } 
                                            if(!Userda) {
                                                setState(path+UserAllText,false );   // kein User da
                                                Userlist = "Niemand";              // kein User da
                                        
                                            }else{
                                                setState(path+UserAllText,true );   // wenn mindestens ein user da ist dann ist der state JemandDa = true
                                            }
                                            setState(path+UserString,Userlist );   // update der Userlist
                                        
                                        
                                        // jetzt Jason füllen
                                            var JasonString ="";
                                            var counter = 0;
                                            var UserStatus = false;
                                            var UserKommt = "";
                                            var UserGeht = "";
                                            for (var i in Anwesenheit) {  // loop ueber alle
                                                counter = counter + 1 ;
                                                //   Jason (Descr1, Wert1,  Deesc2, Wert2,  Deesc3, Wer3,  Deesc4, Wert4,
                                                if ( counter === 1 ) {                                                                    // Eroeffnung der Json Tabelle
                                                    JasonString = "[";                                                      
                                                }
                                                if (existsState(Anwesenheit[i][0]) ) { 
                                                    UserStatus = getState(Anwesenheit[i][0]).val;
                                                }else {
                                                    UserStatus = false;
                                                };
                                        
                                                if(Anwesenheit[i][1] === User ) {                                                   // auslösender User
                                                    if(Status === true) {                                                           // user ist gekommen
                                                        UserKommt = CreationTime;                                                   // aktuelle Zeit setzen
                                                        UserGeht = getState(path+"1KommtGeht."+Anwesenheit[i][1]+"Geht").val;
                                                        if(shadowing) {
                                                            setState(path+Anwesenheit[i][1],true);
                                                        }
                                                     }else {                                                                        // user ist gegangen
                                                        UserGeht = CreationTime;
                                                        UserKommt =getState(path+"1KommtGeht."+Anwesenheit[i][1]+"Kommt").val; 
                                                        if(shadowing  ) {
                                                            setState(path+Anwesenheit[i][1],false);
                                                        }
                                                     } 
                                                  }else {
                                                    UserKommt =getState(path+"1KommtGeht."+Anwesenheit[i][1]+"Kommt").val;          // wenn dieser User nicht auslösend war dann nur den gespeicherten Wert einlesen --- Kommt
                                                    UserGeht = getState(path+"1KommtGeht."+Anwesenheit[i][1]+"Geht").val;
                                                    if(shadowing) {
                                                        if (existsState(Anwesenheit[i][0])) {
                                                            setState(path+Anwesenheit[i][1],getState(Anwesenheit[i][0]).val);
                                                           }else {
                                                            setState(path+Anwesenheit[i][1],false);
                                                        }
                                                    }
                                                };
                                                JasonString = JasonString +JasonCreate ("Name", Anwesenheit[i][1], "Status", UserStatus, "Kommt", UserKommt , "Geht", UserGeht );
                                                if ( counter === anzahluser ) { 
                                                    JasonString = JasonString + "]";                                                // Schliessen der Json Tabelle
                                                 } else {
                                                    JasonString = JasonString + ",";                                                  // Schliessen einer einzelnen Zeile - nur die letzte nicht
                                                };
                                            
                                            } // ende for
                                            setState(path+'1KommtGeht.' + "AnwesenheitJason", JasonString);       
                                        
                                        
                                        
                                        }  // Ende Funktion
                                        
                                        
                                        //-----------------------------------------------------------------------------------------------------
                                        // Erstellung von jason strings zur Tabellendarstellung
                                        //-----------------------------------------------------------------------------------------------------
                                        function JasonCreate (Desc1, Wert1, Desc2, Wert2, Desc3,Wert3, Desc4,Wert4) {
                                        
                                        var buildzeile = "{";
                                        buildzeile = buildzeile +  '"'  + Desc1+ '":';
                                        buildzeile = buildzeile +  '"'  + Wert1 + '"' + ",";
                                        buildzeile = buildzeile +  '"'  + Desc2 + '"' + ":";
                                        buildzeile = buildzeile +  '"'  + Wert2 + '"' + ",";
                                        buildzeile = buildzeile +  '"'  + Desc3 + '"' + ":";
                                        buildzeile = buildzeile +  '"'  + Wert3 + '"' + ",";
                                        buildzeile = buildzeile +  '"'  + Desc4 + '"' + ":";
                                        buildzeile = buildzeile +  '"'  + Wert4 + '"' + "}";
                                        
                                        
                                        return buildzeile;
                                            
                                        } // Ende Funktion
                                        
                                        //-----------------------------------------------------------------------------------------------------
                                        // Funktion schreibt einen Logeintrag in das Filesystem und auch in das interne Log-System
                                        //-----------------------------------------------------------------------------------------------------
                                        function writelog(string) {
                                            if (logflag === true) {
                                                var logdate = formatDate(new Date(),"TT.MM.JJJJ");
                                                var logtime = formatDate(new Date(),"SS:mm:ss");
                                        
                                                fs.readFile(LogPath, 'utf8', function(err,data){
                                                    if (!err){
                                                        fs.appendFileSync(LogPath, logdate+" ;"+logtime+" ;"+string + "\n");       // Füge Satz in Datei ein
                                                    }else{
                                                        log("Logfile nicht gefunden - wird angelegt"), "info";
                                                        var headerLine= "Datum;Uhrzeit;Name;Kommt-Geht";
                                                        fs.appendFileSync(LogPath, headerLine + "\n");       // Füge Satz in Datei ein
                                                        fs.appendFileSync(LogPath, logdate+" ;"+logtime+" ;"+string + "\n");       // Füge Satz in Datei ein
                                                    } // ende check error
                                                }); // ende check File
                                            } // endif check logflag
                                        
                                        } // Ende Funktion
                                        
                                        //-----------------------------------------------------------------------------------------------------
                                        // States erstellen
                                        //-----------------------------------------------------------------------------------------------------
                                        function CreateStates () {
                                        
                                        
                                            for (var i in Anwesenheit) {  // loop ueber alle 
                                                if(shadowing) { 
                                                    createState(path+Anwesenheit[i][1] , false , {read: true, write: true, type: 'boolean', name: 'Anwesenheit - User '+Anwesenheit[i][1], desc: 'ZAnwesenheit - User '+Anwesenheit[i][1] } );       
                                                }
                                                createState(path+"1KommtGeht."+Anwesenheit[i][1]+"Geht"   , "", {read: true, write: true, type: 'string', name: 'Anwesenheit Zeit ausloggen', desc: 'Zeit gehen  User '+Anwesenheit[i][1] } );
                                                createState(path+"1KommtGeht."+Anwesenheit[i][1]+"Kommt" , "", {read: true, write: true, type: 'string', name: 'Anwesenheit Zeit einloggen', desc: 'Zeit kommen User '+Anwesenheit[i][1] } );
                                            };
                                            createState(path+UserAllText      , false, {read: true, write: true, type: 'boolean', name: 'Anwesenheit alle User', desc: 'Anwesenheit alle User'})
                                            createState(path+UserString , "Niemand", {read: true, write: true, type: 'string', name: 'Anwesenheit Userliste', desc: 'Anwesenheit Userliste'});
                                            createState( path + '1KommtGeht.' + "AnwesenheitJason", "",{read: true, write: true, type: 'string', name: 'Anwesenheitsstatus Jason Liste', desc: 'UserListe als Jason'});
                                        
                                        };  // Ende Funktion
                                        
                                        
                                        

                                        dslraserD 1 Antwort Letzte Antwort
                                        0
                                        • L looxer01

                                          Hi,
                                          super Arbeit !!!!
                                          Ich habe schon lange einen Unifi Access Point. Eigentlich lief es bisher ok aber jetzt ist das SetUp wesentlich effizienter und übersichtlicher.
                                          Vielen Dank dafür.
                                          Für alle die Interesse haben und als kleines Danke schön an @braindead Ich habe vor Jahren mal ein AnwesenheitsControl Script für TR64 geschrieben. Jetzt habe ich ein kleines Script für den Unifi Adapter geschrieben (eigentlich für mich - Teile ich aber gerne 🙂
                                          Das Script kann wie gehabt ein externes Logging, eine Jason mit Komm und Geht und eine einfache Liste der Anwesenheiten.
                                          Ausserdem lassen sich die States aus Unifi spiegeln. Vielleicht hilft das bei dem Thema WhiteList.
                                          Der Hauptnutzen des Scriptes ist es aber einen Datenpunkt zu haben, der die Anwesenheiten kumuliert. Also JemandDA oder nicht..

                                          weiter unten das Script. Habe es einfach gehalten. Damit sollten also Anpassungen leicht möglich sein.

                                          Liebe Grüße
                                          Looxer

                                          //-----------------------------------------------------------------------------------------------------
                                          // Einstellungsbereich
                                          //-----------------------------------------------------------------------------------------------------
                                          
                                          // Liste der teilnehmenden User/Geräte
                                          var Anwesenheit = [];
                                          Anwesenheit[0] = ['unifi.0.default.clients.7c:94:2a:xx:4e:xx.is_online', 'Daisy' ];
                                          Anwesenheit[1] = ['unifi.0.default.clients.b8:7b:c5:xx:4c:xx.is_online', 'Micky' ];
                                          Anwesenheit[2] = ['unifi.0.default.clients.d0:2b:20:xx:98:xx.is_online', 'Tick' ];
                                          Anwesenheit[3] = ['unifi.0.default.clients.8c:8e:f2:xx:6f:xx.is_online', 'Trick' ];
                                          Anwesenheit[4] = ['unifi.0.default.clients.88:44:77:xx:5b:xx.is_online', 'Track' ];
                                          
                                          var path = "javascript.0.Anwesenheitssteuerung.Userlist."
                                                                                         
                                          //Logging
                                             var logflag = false;                                                         // logging enabled
                                             var LogPath = "/opt/iobroker/iobroker-data/Anwesenheiten2.csv";             // Pfad und Dateiname des externen Logs
                                          
                                          // Debug
                                          var debug = true;                                                                   // mehr/weniger meldungen im Log
                                          
                                          // States anlegen ?
                                          var CreateAllStates = true;                                                    // checken ob alle States angeleget sind ? dann auf true
                                          
                                          var shadowing = true;                                                           // user Status spiegeln 
                                          
                                          //-------------------------------------------------------------------------------------------------------
                                          // Start der Logik
                                          //-------------------------------------------------------------------------------------------------------
                                          var fs = require('fs');                     // enable write fuer externes log
                                          
                                          var UserAllText         = "JemandDa"; // ist irgendwer da ?
                                          var UserString          = "Liste"; // Statename fuer die Liste in VIS
                                          
                                          if (CreateAllStates) {
                                              CreateStates(); // States anlegen
                                          };
                                          Subscribe(); // Subscriptions fuer alle User anlegen
                                          
                                          
                                          
                                          
                                          
                                          //-----------------------------------------------------------------------------------------------------
                                          // Suscription
                                          //-----------------------------------------------------------------------------------------------------
                                          function Subscribe () {
                                          
                                              for (var i in Anwesenheit) {  // loop ueber alle 
                                                  log("Subscription fuer "+Anwesenheit[i][1] + " erstellt","info");
                                                  on({id: Anwesenheit[i][0], change: 'any'}, function(obj) {  // erstelle subscription
                                                      if (obj.state.val !== obj.oldState.val) {
                                                          if(debug ) {log ("Anwesenheitsstatus Aenderung fuer Objekt " + obj.id  +" auf " + obj.state.val + " erkannt","info" )};
                                                          UserUpdate(obj.id,obj.state.val );
                                                      }
                                          
                                                  }); // endon
                                              }
                                          }
                                          
                                          //-----------------------------------------------------------------------------------------------------
                                          // Userupdate
                                          //-----------------------------------------------------------------------------------------------------
                                          function UserUpdate (objekt,Status) {
                                              var User = "";
                                              var CreationTime = formatDate(new Date(),"TT.MM.JJJJ SS:mm:ss");
                                              var LogString= "";
                                              var anzahluser = 0;
                                              
                                              // auslösenden User ermitteln
                                              for (var i in Anwesenheit) {  // loop ueber alle
                                                  anzahluser = anzahluser + 1 ;
                                                  if(Anwesenheit[i][0] === objekt ) {     // das ist der Auslöser
                                                      User = Anwesenheit[i][1]
                                                      log ("Anwesenheitsstatus Aenderung fuer User " + User + " auf " + Status + " erkannt","info" );
                                                  }
                                              }
                                              if(debug) {log("Anzahl User in der Userlist = "+ anzahluser,"info")}
                                              if(Status === true) {                   // user wurde auf anwesend gesetzt
                                                  setState(path+"1KommtGeht."+User+"Kommt",CreationTime);
                                                  LogString = User + ";"+ "Kommt";         
                                                  writelog(LogString);    
                                              }else{  
                                                  setState(path+"1KommtGeht."+User+"Geht",CreationTime);
                                                  LogString = User + ";" + "Geht"; 
                                                  writelog(LogString);   
                                              }
                                          
                                              // jetzt schauen ob kein User mehr da ist
                                              var Userda = false;
                                              var Userlist = "";
                                              for (var i in Anwesenheit) {  // loop ueber alle
                                                  if (existsState(Anwesenheit[i][0]) ) { 
                                                      if (getState(Anwesenheit[i][0]).val) {
                                                          Userda = true;
                                                          Userlist = Userlist + " " + Anwesenheit[i][1];
                                                      }
                                                  }
                                              } 
                                              if(!Userda) {
                                                  setState(path+UserAllText,false );   // kein User da
                                                  Userlist = "Niemand";              // kein User da
                                          
                                              }else{
                                                  setState(path+UserAllText,true );   // wenn mindestens ein user da ist dann ist der state JemandDa = true
                                              }
                                              setState(path+UserString,Userlist );   // update der Userlist
                                          
                                          
                                          // jetzt Jason füllen
                                              var JasonString ="";
                                              var counter = 0;
                                              var UserStatus = false;
                                              var UserKommt = "";
                                              var UserGeht = "";
                                              for (var i in Anwesenheit) {  // loop ueber alle
                                                  counter = counter + 1 ;
                                                  //   Jason (Descr1, Wert1,  Deesc2, Wert2,  Deesc3, Wer3,  Deesc4, Wert4,
                                                  if ( counter === 1 ) {                                                                    // Eroeffnung der Json Tabelle
                                                      JasonString = "[";                                                      
                                                  }
                                                  if (existsState(Anwesenheit[i][0]) ) { 
                                                      UserStatus = getState(Anwesenheit[i][0]).val;
                                                  }else {
                                                      UserStatus = false;
                                                  };
                                          
                                                  if(Anwesenheit[i][1] === User ) {                                                   // auslösender User
                                                      if(Status === true) {                                                           // user ist gekommen
                                                          UserKommt = CreationTime;                                                   // aktuelle Zeit setzen
                                                          UserGeht = getState(path+"1KommtGeht."+Anwesenheit[i][1]+"Geht").val;
                                                          if(shadowing) {
                                                              setState(path+Anwesenheit[i][1],true);
                                                          }
                                                       }else {                                                                        // user ist gegangen
                                                          UserGeht = CreationTime;
                                                          UserKommt =getState(path+"1KommtGeht."+Anwesenheit[i][1]+"Kommt").val; 
                                                          if(shadowing  ) {
                                                              setState(path+Anwesenheit[i][1],false);
                                                          }
                                                       } 
                                                    }else {
                                                      UserKommt =getState(path+"1KommtGeht."+Anwesenheit[i][1]+"Kommt").val;          // wenn dieser User nicht auslösend war dann nur den gespeicherten Wert einlesen --- Kommt
                                                      UserGeht = getState(path+"1KommtGeht."+Anwesenheit[i][1]+"Geht").val;
                                                      if(shadowing) {
                                                          if (existsState(Anwesenheit[i][0])) {
                                                              setState(path+Anwesenheit[i][1],getState(Anwesenheit[i][0]).val);
                                                             }else {
                                                              setState(path+Anwesenheit[i][1],false);
                                                          }
                                                      }
                                                  };
                                                  JasonString = JasonString +JasonCreate ("Name", Anwesenheit[i][1], "Status", UserStatus, "Kommt", UserKommt , "Geht", UserGeht );
                                                  if ( counter === anzahluser ) { 
                                                      JasonString = JasonString + "]";                                                // Schliessen der Json Tabelle
                                                   } else {
                                                      JasonString = JasonString + ",";                                                  // Schliessen einer einzelnen Zeile - nur die letzte nicht
                                                  };
                                              
                                              } // ende for
                                              setState(path+'1KommtGeht.' + "AnwesenheitJason", JasonString);       
                                          
                                          
                                          
                                          }  // Ende Funktion
                                          
                                          
                                          //-----------------------------------------------------------------------------------------------------
                                          // Erstellung von jason strings zur Tabellendarstellung
                                          //-----------------------------------------------------------------------------------------------------
                                          function JasonCreate (Desc1, Wert1, Desc2, Wert2, Desc3,Wert3, Desc4,Wert4) {
                                          
                                          var buildzeile = "{";
                                          buildzeile = buildzeile +  '"'  + Desc1+ '":';
                                          buildzeile = buildzeile +  '"'  + Wert1 + '"' + ",";
                                          buildzeile = buildzeile +  '"'  + Desc2 + '"' + ":";
                                          buildzeile = buildzeile +  '"'  + Wert2 + '"' + ",";
                                          buildzeile = buildzeile +  '"'  + Desc3 + '"' + ":";
                                          buildzeile = buildzeile +  '"'  + Wert3 + '"' + ",";
                                          buildzeile = buildzeile +  '"'  + Desc4 + '"' + ":";
                                          buildzeile = buildzeile +  '"'  + Wert4 + '"' + "}";
                                          
                                          
                                          return buildzeile;
                                              
                                          } // Ende Funktion
                                          
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion schreibt einen Logeintrag in das Filesystem und auch in das interne Log-System
                                          //-----------------------------------------------------------------------------------------------------
                                          function writelog(string) {
                                              if (logflag === true) {
                                                  var logdate = formatDate(new Date(),"TT.MM.JJJJ");
                                                  var logtime = formatDate(new Date(),"SS:mm:ss");
                                          
                                                  fs.readFile(LogPath, 'utf8', function(err,data){
                                                      if (!err){
                                                          fs.appendFileSync(LogPath, logdate+" ;"+logtime+" ;"+string + "\n");       // Füge Satz in Datei ein
                                                      }else{
                                                          log("Logfile nicht gefunden - wird angelegt"), "info";
                                                          var headerLine= "Datum;Uhrzeit;Name;Kommt-Geht";
                                                          fs.appendFileSync(LogPath, headerLine + "\n");       // Füge Satz in Datei ein
                                                          fs.appendFileSync(LogPath, logdate+" ;"+logtime+" ;"+string + "\n");       // Füge Satz in Datei ein
                                                      } // ende check error
                                                  }); // ende check File
                                              } // endif check logflag
                                          
                                          } // Ende Funktion
                                          
                                          //-----------------------------------------------------------------------------------------------------
                                          // States erstellen
                                          //-----------------------------------------------------------------------------------------------------
                                          function CreateStates () {
                                          
                                          
                                              for (var i in Anwesenheit) {  // loop ueber alle 
                                                  if(shadowing) { 
                                                      createState(path+Anwesenheit[i][1] , false , {read: true, write: true, type: 'boolean', name: 'Anwesenheit - User '+Anwesenheit[i][1], desc: 'ZAnwesenheit - User '+Anwesenheit[i][1] } );       
                                                  }
                                                  createState(path+"1KommtGeht."+Anwesenheit[i][1]+"Geht"   , "", {read: true, write: true, type: 'string', name: 'Anwesenheit Zeit ausloggen', desc: 'Zeit gehen  User '+Anwesenheit[i][1] } );
                                                  createState(path+"1KommtGeht."+Anwesenheit[i][1]+"Kommt" , "", {read: true, write: true, type: 'string', name: 'Anwesenheit Zeit einloggen', desc: 'Zeit kommen User '+Anwesenheit[i][1] } );
                                              };
                                              createState(path+UserAllText      , false, {read: true, write: true, type: 'boolean', name: 'Anwesenheit alle User', desc: 'Anwesenheit alle User'})
                                              createState(path+UserString , "Niemand", {read: true, write: true, type: 'string', name: 'Anwesenheit Userliste', desc: 'Anwesenheit Userliste'});
                                              createState( path + '1KommtGeht.' + "AnwesenheitJason", "",{read: true, write: true, type: 'string', name: 'Anwesenheitsstatus Jason Liste', desc: 'UserListe als Jason'});
                                          
                                          };  // Ende Funktion
                                          
                                          
                                          

                                          dslraserD Offline
                                          dslraserD Offline
                                          dslraser
                                          Forum Testing Most Active
                                          schrieb am zuletzt editiert von
                                          #242

                                          @looxer01
                                          kannst Du Dein Script bitte komplett in Code Tags Packen.
                                          Damit (in der Menüleiste)
                                          Bildschirmfoto 2020-05-24 um 20.05.10.png

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          496

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe