Skip to content
  • Home
  • 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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. Скрипты
  5. ioBroker скрипты
  6. Скрипт управления замком при помощи iButton (MegaD)

NEWS

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

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

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

Скрипт управления замком при помощи iButton (MegaD)

Geplant Angeheftet Gesperrt Verschoben ioBroker скрипты
6 Beiträge 3 Kommentatoren 3.2k Aufrufe
  • Ä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.
  • K Offline
    K Offline
    kID
    schrieb am zuletzt editiert von
    #1

    Поскольку MegaD обзавелась замечательной функцией считывания ID ключа iButton и отправки его на сервер, а глубокоуважаемый Bluefox, научил драйвер меги работать с этими данными, я начинаю писать скрипт для управления элктромеханическим замком калитки, управляемым при помощи считывателя EM-Marine.

    Планы тех. задания.

    Необходимо осуществить подачу напряжения на замок на 2 секунды при внесении в пространство считывателя ключа находящегося в файле keys.txt

    При этом в логе должен появляться факт этого действия и принадлежность ключа.

    При внесении в пространство считывателя не зарегистрированного ключа, замок не открывается. В логе фиксируется факт этого события.

    При установленном флаге programming_key, незарегистрированный ключ заносится в файл keys.txt

    Каким образом все это осуществить я пока не знаю, но буду потихоньку изучать javascript :roll:

    Пока для проверки факта работы с iButton написал затравочный скрипт, который знает только один ключ и при его появлении открывает замок, остальные ключи грубо отвергает.

    createState('ibutton.value',0);
    createState('programming_key',"");    
        var idSayIt = "sayit.0.tts.text";
        var volume = 100;
        var lock_port = "megad.0.p1_P1";    // порт электромеханического замка 
        var ibutton = "megad.0.p13_P13";    // порт подключеного iButton
        var programming_key = "";            // признак программирования ключа
    
    on(ibutton, function (obj) {
        log(obj.newState.val);
        if (obj.newState.val !== null){
        setState('ibutton.value', obj.newState.val);
            if (obj.newState.val == '18570c000200'){
            setState (idSayIt, 'Ключ опознан');
            log('открыт замок калитки');
            setState (lock_port, true); 
            setStateDelayed (lock_port, false,5000);
            }else {
            setState (idSayIt, 'неизвестный ключ');}
       log(obj.newState.val);
    }});
    
    1 Antwort Letzte Antwort
    0
    • K Offline
      K Offline
      kID
      schrieb am zuletzt editiert von
      #2

      Доделал скрипт согласно описанному тех. заданию

      Получилось следующее:

      `//*********************************************************************************
      // Script purpose:  обслуживание считывателя IButton  для MegaD                         
      // Ver 0.1
      //
      //*********************************************************************************
      // Структура файла ключей: код ключа_1,"принадлежность ключа_1,"код ключа_2,"принадлежность ключа_2" 
      // и т.д
      // Для внесения ключа меняем значение programming_key на true, после чего при касании 
      // ключами они добавляются в файл ключей. 
      // При внесении нового ключа в конец файла добавляется запись код ключа_x,"ключ добавлен" 
      // Далее вручную меняем принадлежность ключа.
      // После ручного редактирования файла надо перезапустить скрипт.
      var lock_port = "megad.1.p6_Откр_калитка";  // порт электромеханического замка 
      var ibutton = "megad.1.a6_P14"/*P14*/;      // порт подключеного iButton
      var file = '/opt/iobroker/keys.txt';        // путь к файлу ключей и его имя
      createState('programming_key', false);      // при false обычное функционирование замка;
                                                  // true добавляем новые ключи
      var idSayIt = "sayit.0.tts.text";           // проговариваем события 
      var volume = 100;
      var fs = require('fs');  // для обработки файловой системы
      var current_key;        // считанный ключ
      var arrayPosition;      // позиция считанного ключа в массиве ключей
      var keys = ['52a817010000','Тестовый ключ'];// можно суда добавить ключи которые вносятся в файл ключей 
                                                  // при его создании
      
      //*********************************************************************************
      function checkKey (key){                        // на входе значения ключа, проверяем есть ли совпадения 
          for (var i=0; i < keys.length; i = i + 2) { // в массиве keys если есть то возращает true 
                  if (key == keys[i]){                
                  arrayPosition = i;                  // дополнительно в arrayPosition индекс этого ключа
                  return true;
                  }    
          }
          return false;
      }
      
      function openDor(arrayPosition){            // активируем замок на 1 сек, проговариваем, и пишем в лог
          setState (idSayIt, 'Входите');
          log("Замок открыт ключом   " + keys[arrayPosition] + " принадлежащим " + keys[arrayPosition+1]);
          setState (lock_port, true); 
          setStateDelayed (lock_port, false,1000);
      }
      
      function storeKeyValue (current_key){                   // записываем новые ключи
           if (checkKey (current_key) === true) {             // проверить есть ли вводимый ключ в базе
              log ("Этот ключ " + current_key + " уже прописан в базе и принадлежит " + keys[arrayPosition+1]); // если ключ есть сообщить об этом 
          } else {                                            
              keys.push (current_key);                        // если ключа нет добавть его в массив
              keys.push("ключ добавлен");                     // создать  поле в следующей клетке массива
              log('добавлен ключ ' + current_key);
              fs.writeFileSync(file, JSON.stringify(keys)); // записать массив на диск
              }    
      }         
      
      function createFile(){
      log("Создаем файл ключей");    
      fs.writeFileSync(file, JSON.stringify(keys));    
      }
      
      //************************ инициализация******************************
      // проверить есть ли файл с кодами ключей
      if (!fs.existsSync(file)) {
          createFile();                               // если нет то создать его
      }
      //  читаем значения из файла кодов и записываем их в массив keys
      keys = JSON.parse(fs.readFileSync(file).toString()); // считаем массив keys
      
      //******************* при считывании ключа ***************************
      on({id:ibutton, change: "any"}, function (obj) {                // при изменнии ibutton
          current_key = obj.newState.val;
          if (getState ('programming_key').val === true) {       // если установлен флаг programming_key то вызываем функцию 
              storeKeyValue(current_key);     // storeKeyValue со значением считаного ключа
          } else 
              if (checkKey (current_key) === true) { 
              openDor(arrayPosition);     
              } else {
              setState (idSayIt, 'доступ запрещен, неизвестный ключ');
              log('неизвестный ключ ' + current_key);
              }
      });`
      
      Еще хочется, чтобы в при нажатии в vis кнопки  добавить ключ, появлялась клавиатура (цифровой блок) и запись ключей была возможна только при наборе верного кода.  Пока застрял на этапе вывода клавиш. Объект добавляется в режиме редактирования, но в обычном  режиме он не виден.[/i]
      
      1 Antwort Letzte Antwort
      0
      • I Offline
        I Offline
        instalator
        schrieb am zuletzt editiert von
        #3

        @kID:

        Еще хочется, чтобы в при нажатии в vis кнопки добавить ключ, появлялась клавиатура (цифровой блок) и запись ключей была возможна только при наборе верного кода. Пока застрял на этапе вывода клавиш. Объект добавляется в режиме редактирования, но в обычном режиме он не виден. `

        ! > [{"tpl":"tplKeyboardWidget","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"wname":"w00028","layout":"numpad"},"style":{"left":"0px","top":"0px","position":"","display":""},"widgetSet":"keyboard"},{"tpl":"tplJquiInput","data":{"oid":"nothing_selected","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","label":"Input","digits":"0","size":"10","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false},"style":{"left":"241px","top":"59px","width":"154px","height":"41px"},"widgetSet":"jqui"}]

        Высокий уровень Децибел вреден для здоровья!

        http://blog.instalator.ru/

        1 Antwort Letzte Antwort
        0
        • K Offline
          K Offline
          kID
          schrieb am zuletzt editiert von
          #4

          @instalator:

          @kID:

          Еще хочется, чтобы в при нажатии в vis кнопки добавить ключ, появлялась клавиатура (цифровой блок) и запись ключей была возможна только при наборе верного кода. Пока застрял на этапе вывода клавиш. Объект добавляется в режиме редактирования, но в обычном режиме он не виден. `

          ! > [{"tpl":"tplKeyboardWidget","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"wname":"w00028","layout":"numpad"},"style":{"left":"0px","top":"0px","position":"","display":""},"widgetSet":"keyboard"},{"tpl":"tplJquiInput","data":{"oid":"nothing_selected","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","label":"Input","digits":"0","size":"10","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false},"style":{"left":"241px","top":"59px","width":"154px","height":"41px"},"widgetSet":"jqui"}] `

          Спасибо. Понял что должно быть тестовое поле, куда осуществляется ввод. Поле можно скрыть.

          Т.е можно создать кнопку при нажатии на которую фокус получает скрытое поле input. Тогда вываливается клавиатура, на ней набираем код который обрабатывается скриптом прикрепленным к клавиатуре.

          Я правильно понимаю или слишком наворачиваю ?

          1 Antwort Letzte Antwort
          0
          • I Offline
            I Offline
            instalator
            schrieb am zuletzt editiert von
            #5

            @kID:

            @instalator:

            @kID:

            Еще хочется, чтобы в при нажатии в vis кнопки добавить ключ, появлялась клавиатура (цифровой блок) и запись ключей была возможна только при наборе верного кода. Пока застрял на этапе вывода клавиш. Объект добавляется в режиме редактирования, но в обычном режиме он не виден. `

            ! > [{"tpl":"tplKeyboardWidget","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"wname":"w00028","layout":"numpad"},"style":{"left":"0px","top":"0px","position":"","display":""},"widgetSet":"keyboard"},{"tpl":"tplJquiInput","data":{"oid":"nothing_selected","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","label":"Input","digits":"0","size":"10","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false},"style":{"left":"241px","top":"59px","width":"154px","height":"41px"},"widgetSet":"jqui"}] `

            Спасибо. Понял что должно быть тестовое поле, куда осуществляется ввод. Поле можно скрыть.

            Т.е можно создать кнопку при нажатии на которую фокус получает скрытое поле input. Тогда вываливается клавиатура, на ней набираем код который обрабатывается скриптом прикрепленным к клавиатуре.

            Я правильно понимаю или слишком наворачиваю ? `
            Правильно, клавиатура навешивается на виджет инпут

            Высокий уровень Децибел вреден для здоровья!

            http://blog.instalator.ru/

            1 Antwort Letzte Antwort
            0
            • H Offline
              H Offline
              hawkeye
              schrieb am zuletzt editiert von
              #6

              Отличный скрипт! Сейчас сообразить бы как его себе приспособить.

              На том дело и встало или есть прогресс?

              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

              969

              Online

              32.4k

              Benutzer

              81.5k

              Themen

              1.3m

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

              • Du hast noch kein Konto? Registrieren

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