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

  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. ioBroker драйвера
  5. Драйвер ioBroker MySensors

NEWS

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

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

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

Драйвер ioBroker MySensors

Geplant Angeheftet Gesperrt Verschoben ioBroker драйвера
106 Beiträge 13 Kommentatoren 32.5k 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.
  • fishka18rusF Offline
    fishka18rusF Offline
    fishka18rus
    schrieb am zuletzt editiert von
    #50

    @Vlad_k:

    Драйвер предназначен для работы с беспроводными устройствами (arduino+nrf24), использующими библиотеку с http://www.mysensors.org/…

    драйвер в обкатке, предложения(пожелания) не игнорируются :D `

    Привет!

    Адаптер для mysensors это действительно круто. Я давно лелеял надежду что кто-нибудь напишет подобную штуку, так как сам совсем не программист. Но, как я понял, данный адаптер в режиме tcp или udp выступает в качестве шлюза для устрйств mysensensors, т.е. работает как сервер и ждет подключений на порт 5003? Разве не логичнее ему получать данные от mysensors gateway запущенном на какой-нибудь esp8266? И есть ли в планах такой режим?

    1 Antwort Letzte Antwort
    0
    • H Offline
      H Offline
      Haba
      schrieb am zuletzt editiert von
      #51

      fishka18rus Не совсем так. Данный драйвер принимает данные (посылает команды) через физический шлюз, выполненный на одном из вариантов Serial, MQTT или Ethernet. Соответственно на чем сделан шлюз (ардуина + usb или esp8266 или сетевой модуль) не важно для ioBroker, будет работать с любой железкой либо через uart, либо через сеть

      1 Antwort Letzte Antwort
      0
      • H Offline
        H Offline
        Haba
        schrieb am zuletzt editiert von
        #52

        Возможность автоматической раздачи id, новым подключаемым узлам и возможность обновления прошивки по воздуху (на основе загрузчика MYSBootloader планируется?

        1 Antwort Letzte Antwort
        0
        • M Offline
          M Offline
          Maxtox
          schrieb am zuletzt editiert von
          #53

          da… v planax est

          Arduino MEGA 2560 R3 / ioBroker / DOino Sketch

          1 Antwort Letzte Antwort
          0
          • H Offline
            H Offline
            Haba
            schrieb am zuletzt editiert von
            #54

            Кто может подказать по такой штуке…

            в скетче описал датчики, они появились в Объектах в таком виде:

            ~~![](</s><URL url=)http://s019.radikal.ru/i634/1604/fe/567a3f1240f8.png" />

            В скетче датчики описаны так:

            MyMessage AlmStatus(MyAlm, V_VAR1);  
            MyMessage BatStatus(MyBat, V_WATT);
            MyMessage NetStatus(MyNet, V_VAR2);
            
             gw.present(MyAlm, S_CUSTOM, "123", false);
             gw.present(MyBat, S_POWER, "123", false);
             gw.present(MyNet, S_CUSTOM, "123", false);
            
            

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

            А для S_POWER добавилась лишняя переменная, которая не была описана.

            Чтобы данные с переменных V_VAR1 и V_VAR2 тоже было видно, прописал ручками так:

            ~~![](</s><URL url=)http://s017.radikal.ru/i409/1604/d3/89954a1243f8.png" />

            Но по идее этот подход не соответсвуют идее разработчика. Как вообще правильно надо описывать датчики в MySensors?

            Я предполагал, что драйвер брокера из gw.present вытягивает переменные S_…, а потом уже из сообщений тянет типы переменных V_…. При таком подходе в Объектах было бы только то, что описанно в скетче и ничего лишнего.~~~~

            1 Antwort Letzte Antwort
            0
            • M Offline
              M Offline
              Maxtox
              schrieb am zuletzt editiert von
              #55

              @Haba:

              Но по идее этот подход не соответсвуют идее разработчика. Как вообще правильно надо описывать датчики в MySensors?

              Я предполагал, что драйвер брокера из gw.present вытягивает переменные S_…, а потом уже из сообщений тянет типы переменных V_…. При таком подходе в Объектах было бы только то, что описанно в скетче и ничего лишнего. `

              а как вытащить тип переменной из V… ?

              пример S_Custom :D

              Arduino MEGA 2560 R3 / ioBroker / DOino Sketch

              1 Antwort Letzte Antwort
              0
              • H Offline
                H Offline
                Haba
                schrieb am zuletzt editiert von
                #56

                По идее все просто…

                gw.present(2, S_CUSTOM, "text", false);

                в шлюз придет:

                30;2;0;0;23;text

                где:

                __30 - адрес узла

                2 - child-sensor-id - адрес датчика

                0 - message-type "presentation"

                0 - ack

                23 - sub-type "S_CUSTOM"__

                т.е. переменную S_… получили из презентации

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

                теперь будем получать код переменной V…

                __MyMessage AlmStatus(2, V_VAR2);

                gw.send(AlmStatus.set(-84));__

                в шлюз получим:

                2016-04-05 11:43:04 warn Serial data received: 30;2;1;0;25;-84

                где:

                __30 - адрес узла

                2 - child-sensor-id - адрес датчика

                1 - message-type "set"

                0 - ack__

                25 - sub-type "V_VAR2"

                -84 - значение

                В результате дерево объектов можно построить следующим образом:

                1. с узла при презентации получаем: арес узла, адреса датчиков, их тип S_… и комментарий, название скетча, версия скетча

                2. При отправке сообщений gw.send(MyMessage.set(x)); добавляем в дерево объектов подобъекты типов V_…, к каким добавить объектам S_… определяем по адресу датчика.

                1 Antwort Letzte Antwort
                0
                • BluefoxB Offline
                  BluefoxB Offline
                  Bluefox
                  schrieb am zuletzt editiert von
                  #57

                  @Haba:

                  По идее все просто…

                  gw.present(2, S_CUSTOM, "text", false);

                  в шлюз придет:

                  30;2;0;0;23;text

                  где:

                  __30 - адрес узла

                  2 - child-sensor-id - адрес датчика

                  0 - message-type "presentation"

                  0 - ack

                  23 - sub-type "S_CUSTOM"__

                  т.е. переменную S_… получили из презентации

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

                  теперь будем получать код переменной V…

                  __MyMessage AlmStatus(2, V_VAR2);

                  gw.send(AlmStatus.set(-84));__

                  в шлюз получим:

                  2016-04-05 11:43:04 warn Serial data received: 30;2;1;0;25;-84

                  где:

                  __30 - адрес узла

                  2 - child-sensor-id - адрес датчика

                  1 - message-type "set"

                  0 - ack__

                  25 - sub-type "V_VAR2"

                  -84 - значение

                  В результате дерево объектов можно построить следующим образом:

                  1. с узла при презентации получаем: арес узла, адреса датчиков, их тип S_… и комментарий, название скетча, версия скетча

                  2. При отправке сообщений gw.send(MyMessage.set(x)); добавляем в дерево объектов подобъекты типов V_…, к каким добавить объектам S_… определяем по адресу датчика. `
                  Это означает, что пока сенсоры не пошлют данные, объекты не создадутся. А если это output? И данные никогда не придут? Или температура, которая каждые 30 мин обновляется?

                  1 Antwort Letzte Antwort
                  0
                  • H Offline
                    H Offline
                    Haba
                    schrieb am zuletzt editiert von
                    #58

                    если output, то правильно использовать вот эту штуку:

                    The ack parameter has the following meaning:

                    Outgoing: 0 = unacknowledged message, 1 = request ack from destination node

                    Incoming: 0 = normal message, 1 = this is an ack message

                    что логично, если мы посылаем команду на узел надо ведь получить подтверждение, что команда принята, а не потерялась?

                    > Или температура, которая каждые 30 мин обновляется?
                    Можно проверять есть ли в дереве объектов уже такая переменная у датчика №х, если нет, то добавляем в дерево. Если есть просто обновляем значение у нее.

                    И потом, можно сделать гибрид :roll:

                    т.е. оставить все как сейчас + добавить это:
                    > Можно проверять есть ли уже в дереве объектов такая переменная у датчика, если нет, то добавляем в дерево. Если есть просто обновляем значение у нее.

                    1 Antwort Letzte Antwort
                    0
                    • H Offline
                      H Offline
                      Haba
                      schrieb am zuletzt editiert von
                      #59

                      По идее что-то типа такого должно выходить для сенсоров S_CUSTOM

                      ~~![](</s><URL url=)http://s020.radikal.ru/i710/1604/3f/3fb04f1da99b.png" />

                      1-й адрес уже работает, данные видны

                      2-й еще скетч не додлелал, поэтому пока false~~

                      1 Antwort Letzte Antwort
                      0
                      • H Offline
                        H Offline
                        Haba
                        schrieb am zuletzt editiert von
                        #60

                        как отправить команду на узел mySensors?

                        …

                        скриптом так sendTo ('mysensors.0', 'send', '30;1;1;0;24;3\n');

                        кнопкой из vis можно как то послать команду не используя скрипты?

                        1 Antwort Letzte Antwort
                        0
                        • H Offline
                          H Offline
                          Haba
                          schrieb am zuletzt editiert von
                          #61

                          Bluefox переделал немного библиотеку, чтобы как и говорил ранее, добавлялись новые датчики, которые по умолчанию не входят в список.

                          файл main.js

                          ! ```
                          /* jshint -W097 */// jshint strict:false /*jslint node: true */ "use strict"; ! // you have to require the utils module and call adapter function var utils = require(__dirname + '/lib/utils'); // Get common adapter utils var serialport; var Parses = require('sensors'); var MySensors = require(__dirname + '/lib/mysensors'); var getMeta = require(__dirname + '/lib/getmeta').getMetaInfo; var getMeta2 = require(__dirname + '/lib/getmeta').getMetaInfo2; ! var adapter = utils.adapter('mysensors'); var devices = {}; var mySensorsInterface; var floatRegEx = /^[+-]?\d+(\.\d*)$/; var inclusionOn = false; var inclusionTimeout = false; ! var config = {}; ! try { serialport = require('serialport');//.SerialPort; } catch (e) { console.warn('Serial port is not available'); } ! //принимаем и обрабатываем сообщения adapter.on('message', function (obj) { if (obj) { switch (obj.command) { case 'listUart': if (obj.callback) { if (serialport) { // read all found serial ports serialport.list(function (err, ports) { adapter.log.info('List of port: ' + JSON.stringify(ports)); adapter.sendTo(obj.from, obj.command, ports, obj.callback); }); } else { adapter.log.warn('Module serialport is not available'); adapter.sendTo(obj.from, obj.command, [{comName: 'Not available'}], obj.callback); } } ! break; } } }); ! // is called when adapter shuts down - callback has to be called under any circumstances! adapter.on('unload', function (callback) { adapter.setState('info.connection', false, true); try { if (mySensorsInterface) mySensorsInterface.destroy(); mySensorsInterface = null; callback(); } catch (e) { callback(); } }); ! // is called if a subscribed state changes adapter.on('stateChange', function (id, state) { if (!state || state.ack || !mySensorsInterface) return; ! // Warning, state can be null if it was deleted adapter.log.debug('stateChange ' + id + ' ' + JSON.stringify(state)); ! if (id === adapter.namespace + '.inclusionOn') { setInclusionState(state.val); } else // output to mysensors if (devices[id] && devices[id].type == 'state') { if (typeof state.val === 'boolean') state.val = state.val ? 1 : 0; if (state.val === 'true') state.val = 1; if (state.val === 'false') state.val = 0; ! mySensorsInterface.write( devices[id].native.id + ';' + devices[id].native.childId + ';1;0;' + devices[id].native.varTypeNum + ';' + state.val, devices[id].native.ip); } }); ! adapter.on('objectChange', function (id, obj) { if (!obj) { if (devices[id]) delete devices[id]; } else { if (obj.native.id !== undefined && obj.native.childId !== undefined && obj.native.subType !== undefined) { devices[id] = obj; } } }); ! // is called when databases are connected and adapter received configuration. // start here! adapter.on('ready', function () { main(); }); ! // start here! adapter.on('unload', function () { adapter.setState('inclusionOn', false, true); }); ! var presentationDone = false; ! function setInclusionState(val) { val = val === 'true' || val === true || val === 1 || val === '1'; inclusionOn = val; ! if (inclusionTimeout) clearTimeout(inclusionTimeout); inclusionTimeout = null; ! if (inclusionOn && adapter.config.inclusionTimeout) { inclusionTimeout = setTimeout(function () { inclusionOn = false; adapter.setState('inclusionOn', false, true); }, adapter.config.inclusionTimeout); } } ! function processPresentation(data, ip, port) { var result = Parses.parse(data.toString()); ! //var result = [{ // id: lineParts[0], // childId: lineParts[1], // type: Values.types[lineParts[2]], // ack: lineParts[3] === '1', // payload: lineParts[5] // subType: Values.subTypes[result.type][lineParts[4]]; //}]; ! if (!result || !result.length) { adapter.log.warn('Cannot parse data: ' + data); return null; } ! for (var i = 0; i < result.length; i++) { adapter.log.debug('Got: ' + JSON.stringify(result[i])); if (result[i].type === 'presentation' && result[i].subType) { adapter.log.debug('Сообщение Презетация'); presentationDone = true; var found = false; for (var id in devices) { adapter.log.debug('id = ' + id); if ((!ip || ip === devices[id].native.ip) && devices[id].native.id == result[i].id && devices[id].native.childId == result[i].childId && devices[id].native.subType == result[i].subType) { found = true; adapter.log.debug('Найден id = ' + id); break; } } ! // Add new node if (!found) { adapter.log.debug('Не найден id. Добавляем новый узел'); var objs = getMeta(result[i], ip, port, config[ip || 'serial']); for (var j = 0; j < objs.length; j++) { adapter.log.debug('Проверка ' + devices[adapter.namespace + '.' + objs[j]._id]); if (!devices[adapter.namespace + '.' + objs[j]._id]) { devices[adapter.namespace + '.' + objs[j]._id] = objs[j]; adapter.log.info('Add new object: ' + objs[j]._id + ' - ' + objs[j].common.name); adapter.setObject(objs[j]._id, objs[j], function (err) { if (err) adapter.log.error(err); }); } } } // проверяем, есть ли принятая переменная в объектах } else if (result[i].type === 'set' && result[i].subType) { adapter.log.debug('Тип "set". Ищем переменную в базе...'); var found = false; var id_found; // сюда сохраним id совпавший по параметрам id и childId for (var id in devices) { if ((!ip || ip === devices[id].native.ip) && devices[id].native.id == result[i].id && devices[id].native.childId == result[i].childId && devices[id].native.varType == result[i].subType) { found = true; adapter.log.debug('Найден id = ' + id); break; } if (devices[id].native.id == result[i].id && devices[id].native.childId == result[i].childId){ id_found = id; adapter.log.debug('Сохранили id_found с совпавшими id и childId'); adapter.log.debug('devices[id_found].native.id = ' + devices[id_found].native.id); adapter.log.debug('devices[id_found].native.childId = ' + devices[id_found].native.childId); } adapter.log.debug('Объект не найден!!!'); } // Добавляем новую переменную в существующий узел if (!found) { adapter.log.debug('Не найден id. Добавляем новую переменную'); var common_name = devices[id_found].common.name.split('.'); var objs = getMeta2(result[i], ip, port, config[ip || 'serial'],devices[id_found].native.subType,common_name[0]); if (!devices[adapter.namespace + '.' + objs[0]._id]) { devices[adapter.namespace + '.' + objs[0]._id] = objs[0]; adapter.log.info('Add new object: ' + objs[0]._id + ' - ' + objs[0].common.name); adapter.setObject(objs[0]._id, objs[0], function (err) { if (err) adapter.log.error(err); }); } } } else { // try to convert value var val = result[i].payload; if (floatRegEx.test(val)) val = parseFloat(val); if (val === 'true') val = true; if (val === 'false') val = false; result[i].payload = val; } } return result; } /* function syncObjects(index, cb) { if (typeof index === 'function') { cb = index; index = 0; } ! index = index || 0; ! if (!adapter.config.devices || index >= adapter.config.devices.length) { cb && cb(); return; } ! var id = adapter.config.devices[index].name.replace(/[.\s]+/g, '_'); ! adapter.getObject(id, function (err, obj) { if (err) adapter.log.error(err); ! // if new or changed if (!obj || JSON.stringify(obj.native) !== JSON.stringify(adapter.config.devices[index])) { adapter.setObject(id, { common: { name: adapter.config.devices[index].name, def: false, type: 'boolean', // нужный тип надо подставить read: 'true', write: 'true', // нужный режим надо подставить role: 'state', desc: obj ? obj.common.desc : 'Variable from mySensors' }, type: 'state', native: adapter.config.devices[index] }, function (err) { // Sync Rooms adapter.deleteStateFromEnum('rooms', '', '', id, function () { if (adapter.config.devices[index].room) { adapter.addStateToEnum('rooms', adapter.config.devices[index].room, '', '', id); } }); ! if (err) adapter.log.error(err); if (!obj) { adapter.log.debug('Create state ' + id); ! // if new object => create state adapter.setState(id, null, true, function () { setTimeout(function () { syncObjects(index + 1, cb); }, 0); }); } else { adapter.log.debug('Update state ' + id); setTimeout(function () { syncObjects(index + 1, cb); }, 0); } }); } else { setTimeout(function () { syncObjects(index + 1, cb); }, 0); } }); } ! function deleteStates(states, cb) { if (!states || !states.length) { cb && cb(); return; } var id = states.pop(); adapter.log.debug('Delete state ' + id); adapter.delForeignObject(id, function (err) { adapter.deleteStateFromEnum('rooms', '', '', id); ! if (err) adapter.log.error(err); ! adapter.delForeignState(id, function (err) { if (err) adapter.log.error(err); ! setTimeout(function () { deleteStates(states, cb); }, 0); }) }); } */ function main() { adapter.getState('inclusionOn', function (err, state) { setInclusionState(state ? state.val : false); }); ! // read current existing objects (прочитать текущие существующие объекты) adapter.getForeignObjects(adapter.namespace + '.*', 'state', function (err, states) { // subscribe on changes adapter.subscribeStates('*'); adapter.subscribeObjects('*'); devices = states; ! if (!devices[adapter.namespace + '.info.connection'] || !devices[adapter.namespace + '.info.connection'].common || (devices[adapter.namespace + '.info.connection'].common.type === 'boolean' && adapter.config.type !== 'serial') || (devices[adapter.namespace + '.info.connection'].common.type !== 'boolean' && adapter.config.type === 'serial')) { adapter.setForeignObject(adapter.namespace + '.info.connection', { "_id": "info.connection", "type": "state", "common": { "role": "indicator.connected", "name": adapter.config.type === 'serial' ? 'If connected to my sensors' : 'List of connected gateways', "type": adapter.config.type === 'serial' ? 'boolean' : 'string', "read": true, "write": false, "def": false }, "native": { ! } }, function (err) { if (err) adapter.log.error(err); }); } ! mySensorsInterface = new MySensors(adapter.config, adapter.log, function (error) { // if object created mySensorsInterface.write('0;0;3;0;14;Gateway startup complete'); ! // process received data mySensorsInterface.on('data', function (data, ip, port) { var result = processPresentation(data, ip, port); // update configuration if presentation received ! if (!result) return; ! for (var i = 0; i < result.length; i++) { if (result[i].type === 'set') { adapter.log.debug('Тип сообщения: set'); // If set quality if (result[i].subType == 77) { adapter.log.debug('subType = 77'); for (var id in devices) { if (devices[id].native && (!ip || ip == devices[id].native.ip) && devices[id].native.id == result[i].id && devices[id].native.childId == result[i].childId) { adapter.log.debug('Set quality of ' + (devices[id].common.name || id) + ' ' + result[i].childId + ': ' + result[i].payload + ' ' + typeof result[i].payload); adapter.setState(id, {q: typeof result[i].payload}, true); } } } else { if (result[i].subType === 'V_LIGHT') result[i].subType = 'V_STATUS'; if (result[i].subType === 'V_DIMMER') result[i].subType = 'V_PERCENTAGE'; ! for (var id in devices) { adapter.log.debug(devices[id].native.varType + ' /// ' + result[i].subType); if (devices[id].native && (!ip || ip == devices[id].native.ip) && devices[id].native.id == result[i].id && devices[id].native.childId == result[i].childId && devices[id].native.varType == result[i].subType) { ! if (devices[id].common.type == 'boolean') { result[i].payload = result[i].payload === 'true' || result[i].payload === true || result[i].payload === '1' || result[i].payload === 1; } adapter.log.debug('Set value ' + (devices[id].common.name || id) + ' ' + result[i].childId + ': ' + result[i].payload + ' ' + typeof result[i].payload); adapter.setState(id, result[i].payload, true); break; } } } } else if(result[i].type === 'internal') { var saveValue = false; adapter.log.debug('Внутреннее сообщение'); switch (result[i].subType) { case 'I_BATTERY_LEVEL': // 0 Use this to report the battery level (in percent 0-100). adapter.log.info('Battery level ' + (ip ? ' from ' + ip + ' ': '') + ':' + result[i].payload); saveValue = true; break; ! case 'I_TIME': // 1 Sensors can request the current time from the Controller using this message. The time will be reported as the seconds since 1970 adapter.log.info('Time ' + (ip ? ' from ' + ip + ' ': '') + ':' + result[i].payload); if (!result[i].ack) { // send response: internal, ack=1 mySensorsInterface.write(result[i].id + ';' + result[i].childId + ';3;1;' + result[i].subType + ';' + Math.round(new Date().getTime() / 1000), ip); } break; ! case 'I_VERSION': // 2 Used to request gateway version from controller. adapter.log.info('Version ' + (ip ? ' from ' + ip + ' ': '') + ':' + result[i].payload); saveValue = true; if (!result[i].ack) { // send response: internal, ack=1 mySensorsInterface.write(result[i].id + ';' + result[i].childId + ';3;1;' + result[i].subType + ';' + (adapter.version || 0), ip); } break; ! case 'I_SKETCH_NAME': // 2 Used to request gateway version from controller. adapter.log.info('Name ' + (ip ? ' from ' + ip + ' ': '') + ':' + result[i].payload); saveValue = true; break; ! case 'I_INCLUSION_MODE': // 5 Start/stop inclusion mode of the Controller (1=start, 0=stop). adapter.log.info('inclusion mode ' + (ip ? ' from ' + ip + ' ': '') + ':' + result[i].payload ? 'STARTED' : 'STOPPED'); break; ! case 'I_CONFIG': // 6 Config request from node. Reply with (M)etric or (I)mperal back to sensor. result[i].payload = (result[i].payload == 'I') ? 'Imperial' : 'Metric'; adapter.log.info('Config ' + (ip ? ' from ' + ip + ' ': '') + ':' + result[i].payload); config[ip || 'serial'] = config[ip || 'serial'] || {}; config[ip || 'serial'].metric = result[i].payload; saveValue = true; break; ! case 'I_LOG_MESSAGE': // 9 Sent by the gateway to the Controller to trace-log a message adapter.log.info('Log ' + (ip ? ' from ' + ip + ' ': '') + ':' + result[i].payload); break; ! case 'I_ID_REQUEST': if (inclusionOn) { // find maximal index var maxId = 0; for (var id in devices) { if (devices[id].native && (!ip || ip == devices[id].native.ip) && devices[id].native.id > maxId) { maxId = devices[id].native.id; } } maxId++; if (!result[i].ack) { // send response: internal, ack=0, I_ID_RESPONSE mySensorsInterface.write(result[i].id + ';' + result[i].childId + ';3;0;4;' + maxId, ip); } } else { adapter.log.warn('Received I_ID_REQUEST, but inclusion mode is disabled'); } break; ! default: adapter.log.info('Received INTERNAL message: ' + result[i].subType + ': ' + result[i].payload); } ! if (saveValue) { for (var id in devices) { adapter.log.debug('2 ' + devices[id].native.varType + ' /// ' + result[i].subType); if (devices[id].native && (!ip || ip == devices[id].native.ip) && devices[id].native.id == result[i].id && devices[id].native.childId == result[i].childId && devices[id].native.varType == result[i].subType) { ! if (devices[id].common.type == 'boolean') result[i].payload = !!result[i].payload; if (devices[id].common.type == 'number') result[i].payload = parseFloat(result[i].payload); ! adapter.log.info('Set value ' + (devices[id].common.name || id) + ' ' + result[i].childId + ': ' + result[i].payload + ' ' + typeof result[i].payload); adapter.setState(id, result[i].payload, true); break; } } } ! } } }); ! mySensorsInterface.on('connectionChange', function (isConn, ip, port) { adapter.setState('info.connection', isConn, true); // try soft request if (!presentationDone && isConn) { // request metric system mySensorsInterface.write('0;0;3;0;6;get metric', ip, port); mySensorsInterface.write('0;0;3;0;19;force presentation', ip, port); setTimeout(function () { // send reboot command if still no presentation if (!presentationDone) { mySensorsInterface.write('0;0;3;0;13;force restart', ip, port); } }, 1500); } }); }); }); }
                          файл getmeta.js (добавил функцию)
                          ! >! [spoiler]`~~[code]~~function getMetaInfo2(packet, ip, port, config, subType, common_name) {
                          ! config = config || {};
                          var type = presentation[subType];
                          if (!type) {
                          type = {
                          type: 'string',
                          role: 'state',
                          vars: ['V_VAR1', 'V_VAR2', 'V_VAR3', 'V_VAR4', 'V_VAR5'],
                          index: packet.subType
                          };
                          }
                          var varType = packet.subType;
                          var variable = vars[varType];
                          var id = (ip ? ip.replace(/./g, '') + '.' : '') + packet.id + '.' + packet.childId + '' + subType.replace('S_', '') + /*'.' + packet.subType + */ '.' + varType;

                          var result = [
                              {
                                      _id:            (ip ? ip.replace(/\./g, '_') + '.'  : '') + packet.id + '.' + packet.childId + '_' + subType.replace('S_', '') + '.' + varType,
                                      common: {
                                          name:       common_name ? (common_name + '.' + varType) : id,
                                          type:       variable.type,
                                          role:       variable.role + (type.role ? '.' + type.role : ''),
                                          min:        variable.min,
                                          max:        variable.max,
                                          unit:       variable.unit,
                                          def:        variable.def,
                                          read:       variable.read,
                                          write:      variable.write
                                      },
                                      native: {
                                          ip:         ip,
                                          id:         packet.id,
                                          childId:    packet.childId,
                                          subType:    packet.subType,
                                          subTypeNum: type.index,
                                          varType:    varType,
                                          varTypeNum: variable.index
                                      },
                                      type: 'state'
                                  }
                              ]; 
                          

                          ! return result;
                          }
                          ! module.exports.getMetaInfo = getMetaInfo;
                          module.exports.getMetaInfo2 = getMetaInfo2;[/code]`[/spoiler][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]

                          1 Antwort Letzte Antwort
                          0
                          • S Offline
                            S Offline
                            sanich2908
                            schrieb am zuletzt editiert von
                            #62

                            Почему не видит сом порт на Raspi ???

                            evice converter now attached to ttyUSB0

                            root@raspberrypi:~# dmesg

                            Нажмите Ctrl+A и Ctrl+C, что бы скопировать в буфер обмена и после этого нажмите мышкой в любом месте.

                            mysensors-0 2016-09-24 21:32:56.957 warn Module serialport is not available

                            mysensors-0 2016-09-24 21:32:55.643 info starting. Version 1.0.2 in /opt/iobroker/node_modules/iobroker.mysensors

                            host-raspberrypi 2016-09-24 21:32:53.436 info instance system.adapter.mysensors.0 started with pid 2654

                            host-raspberrypi 2016-09-24 21:32:51.029 info instance system.adapter.mysensors.0 terminated with code 0 (OK)

                            mysensors-0 2016-09-24 21:32:51.000 info terminating

                            host-raspberrypi 2016-09-24 21:32:50.916 info stopInstance system.adapter.mysensors.0 killing pid 2648

                            host-raspberrypi 2016-09-24 21:32:50.915 info stopInstance system.adapter.mysensors.0

                            1 Antwort Letzte Antwort
                            0
                            • H Offline
                              H Offline
                              Haus
                              schrieb am zuletzt editiert von
                              #63

                              @sanich2908:

                              Почему не видит сом порт на Raspi ???

                              evice converter now attached to ttyUSB0

                              root@raspberrypi:~# dmesg

                              Нажмите Ctrl+A и Ctrl+C, что бы скопировать в буфер обмена и после этого нажмите мышкой в любом месте.

                              mysensors-0 2016-09-24 21:32:56.957 warn Module serialport is not available

                              mysensors-0 2016-09-24 21:32:55.643 info starting. Version 1.0.2 in /opt/iobroker/node_modules/iobroker.mysensors

                              host-raspberrypi 2016-09-24 21:32:53.436 info instance system.adapter.mysensors.0 started with pid 2654

                              host-raspberrypi 2016-09-24 21:32:51.029 info instance system.adapter.mysensors.0 terminated with code 0 (OK)

                              mysensors-0 2016-09-24 21:32:51.000 info terminating

                              host-raspberrypi 2016-09-24 21:32:50.916 info stopInstance system.adapter.mysensors.0 killing pid 2648

                              host-raspberrypi 2016-09-24 21:32:50.915 info stopInstance system.adapter.mysensors.0 `

                              sudo apt-get update

                              sudo apt-get install build-essential

                              sudo apt-get install python2.7

                              js-controller: 1.5.7 / node.js: v8.15.1/ npm: 6.4.1

                              admin: 3.6.0

                              javascript: 4.1.10

                              web: 2.4.1 vis: 1.1.10

                              cloud: 2.6.2

                              Server: DELL FX170 / linux: Debian 9.5 Stretch

                              Adapter: MegaD-2561, Mega-ES…

                              1 Antwort Letzte Antwort
                              0
                              • S Offline
                                S Offline
                                sanich2908
                                schrieb am zuletzt editiert von
                                #64

                                Да установлено всё это, а СОМ порт не видит :oops:

                                1 Antwort Letzte Antwort
                                0
                                • BluefoxB Offline
                                  BluefoxB Offline
                                  Bluefox
                                  schrieb am zuletzt editiert von
                                  #65

                                  @sanich2908:

                                  Да установлено всё это, а СОМ порт не видит :oops: `
                                  Ruf mal noch mal:

                                  cd /opt/iobroker
                                  iobroker stop mysensors
                                  npm install iobroker.mysensors --production --force
                                  iobroker upload mysensors
                                  iobroker start mysensors
                                  
                                  

                                  Danach sollten die Ports in der Konfig drin sein.

                                  1 Antwort Letzte Antwort
                                  0
                                  • S Offline
                                    S Offline
                                    sanich2908
                                    schrieb am zuletzt editiert von
                                    #66

                                    Ещё пару переустановок всего и заработало :shock:

                                    1 Antwort Letzte Antwort
                                    0
                                    • M Offline
                                      M Offline
                                      Maxtox
                                      schrieb am zuletzt editiert von
                                      #67

                                      @sanich2908:

                                      Ещё пару переустановок всего и заработало :shock: `
                                      Молодец!

                                      Arduino MEGA 2560 R3 / ioBroker / DOino Sketch

                                      1 Antwort Letzte Antwort
                                      0
                                      • S Offline
                                        S Offline
                                        sanich2908
                                        schrieb am zuletzt editiert von
                                        #68

                                        Вот ни где не сказано, что inclusionON надо в Обьектах поставить в TRUE, и тогда добавляются сенсоры в Нодах.

                                        1 Antwort Letzte Antwort
                                        0
                                        • BluefoxB Offline
                                          BluefoxB Offline
                                          Bluefox
                                          schrieb am zuletzt editiert von
                                          #69

                                          @sanich2908:

                                          Вот ни где не сказано, что inclusionON надо в Обьектах поставить в TRUE, и тогда добавляются сенсоры в Нодах. `
                                          По идее должно управляться из настроек. Получается что не работает?

                                          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

                                          526

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          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