Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. Ошибка
    5. ioBroker ошибки
    6. Ошибка создания объекта в OWFS

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Ошибка создания объекта в OWFS

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

      у меня при записи через FS(добавил строчки в драйвер) - реакция на изменении менее 1 сек. 7 шт DS2413(движение, стиральная машина, нагреватель воды, насос подкачки воды и т.д.). порт А вход с детектора движения, В выход на реле.

      1 Reply Last reply Reply Quote 0
      • J
        jeorgep last edited by

        > у меня при записи через FS(добавил строчки в драйвер) - реакция на изменении менее 1 сек. 7 шт DS2413(движение, стиральная машина, нагреватель воды, насос подкачки воды и т.д.). порт А вход с детектора движения, В выход на реле.

        Клас!

        делись строчками в драйвере 🙂

        1 Reply Last reply Reply Quote 0
        • H
          Haus last edited by

          @Alekseym6:

          у меня при записи через FS(добавил строчки в драйвер) - реакция на изменении менее 1 сек. 7 шт DS2413(движение, стиральная машина, нагреватель воды, насос подкачки воды и т.д.). порт А вход с детектора движения, В выход на реле. `
          Какой адаптер, как подключен?

          1 Reply Last reply Reply Quote 0
          • A
            Alekseym6 last edited by

            адаптер DS9490B, DS9490R USB to 1-Wire.

            подключение датчиков звездой, DS2413(7 шт), DS2405, питание 5В на DS18B20(21 шт), кабель UTP5. максимальная длинна 30 метров до бани.

            запускаю сервис owserver owfs

            добавил запись значений через FS в /opt/iobroker/node_modules/iobroker.owfs/main.js

            var fs = require('fs');

            …

            function writeWire(wire, value) {

            if (wire) {

            adapter.log.debug('Write /' + wire.id + '/' + (wire.property || 'temperature') + ' with "' + value + '"');

            var path1wire = "/var/1-wire";

            if (wire.property == "sensed.BYTE") {

            var pathfs = "/" + wire.id + "/PIO.BYTE";

            } else if (wire.property == "PIO.BYTE") {

            var pathfs = "/" + wire.id + "/PIO.BYTE";

            } else {

            var pathfs = "/" + wire.id + '/' + (wire.property || 'temperature');

            }

            path1wire = path1wire + pathfs;

            var dataV = parseInt(value);

            adapter.log.debug(path1wire + ' with "' + dataV + '"');

            // Пишем в файл.

            fs.writeFile(path1wire, dataV, function(err, written) {

            if (err) {

            // Произошла ошибка при записи

            adapter.log.warn('Cannot write value of ' + path1wire + ': ' + err);

            }

            });

            client.write('/' + wire.id + '/' + (wire.property || 'temperature'), value, function(err, message) {

            adapter.log.debug('Write /' + wire.id + '/' + (wire.property || 'temperature') + ':' + message);

            //no idea what is received here

            if (err) {

            adapter.log.warn('Cannot write value of /' + wire.id + '/' + (wire.property || 'temperature') + ': ' + err);

            }

            });

            }

            }

            1 Reply Last reply Reply Quote 0
            • J
              jeorgep last edited by

              > добавил запись значений через FS в /opt/iobroker/node_modules/iobroker.owfs/main.js
              Спасибо! буду пробовать

              ` > подключение датчиков звездой, DS2413(7 шт), DS2405, питание 5В на DS18B20(21 шт), кабель UTP5. максимальная длинна 30 метров до бани.

              запускаю сервис owserver owfs `
              У меня тоже UTP5 до 20 м в луче звезды.

              питание 9В и около датчиков ставлю стабилизатор 7805 - копейки стоит, а душе спокойнее 🙂

              Раньше при питании 5В и включениях реле - бывали сбои.

              Все на одном UPS ES 550G.

              Мне больше нравится DS2408S - 8-канальный ключ. Часть портов использую на вход

              (датчики движения, герконы, выходы компараторов датчиков дыма/газа, протечки, фотодиоды и т. п.)

              часть на управление (светодиоды - индикация, реле, тиристоры).

              В DS2408 есть приятная особенность - alarm.

              Раньше, когда моя система была на Raspberry Pi и самописных Python/bash скриптах -

              ресурсов катастрофически не хватало, и удобно было в цикле просматривать лишь папку alarm

              и при возникновении алармов про изменение состояния порта -

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

              Для датчиков освещения, влажности, поточных значений датчиков газа/дыма - использую DS2438.

              Для отсылки срочных сообщений - GPRS Shield на SIM900.

              1 Reply Last reply Reply Quote 0
              • H
                Haus last edited by

                @Alekseym6:

                адаптер DS9490B, DS9490R USB to 1-Wire.

                подключение датчиков звездой, DS2413(7 шт), DS2405, питание 5В на DS18B20(21 шт), кабель UTP5. максимальная длинна 30 метров до бани.

                запускаю сервис owserver owfs

                добавил запись значений через FS в /opt/iobroker/node_modules/iobroker.owfs/main.js `
                Alekseym6, в ioBroker в драйвере owfs есть кнопка "Read addresses" она у тебя находит датчики и ключи?

                1 Reply Last reply Reply Quote 0
                • J
                  jeorgep last edited by

                  > добавил запись значений через FS в /opt/iobroker/node_modules/iobroker.owfs/main.js
                  Наверное тогда нужно закомментировать строки:

                  client.write('/' + wire.id + '/' + (wire.property || 'temperature'), value, function (err, message) {
                  ...
                  });
                  

                  Чтобы не было попытки клиентом переписать повторно значение.

                  И добавить для чтения что-то вроде:

                  function readWire(wire) {
                      if (wire) {
                          var path1wire = "/mnt/1wire";
                          var pathfs = "/" + wire.id + '/' + (wire.property || 'temperature');
                          path1wire = path1wire + pathfs;
                          fs.readFile(path1wire, 'utf8', function (err,result) {
                              if (err) {
                                  adapter.log.warn('Cannot read value of ' + path1wire + ': ' + err);
                              }
                          });
                  
                  

                  Закомментировав:
                  ` > client.read('/' + wire.id + '/' + (wire.property || 'temperature'), function(err, result) {

                  …

                  }); `

                  Вечером дома протестирую

                  1 Reply Last reply Reply Quote 0
                  • A
                    Alekseym6 last edited by

                    адаптер owfs не обновляю, версия 0.0.2. кнопки поиска нет.

                    строчку не исключаю - для проверки

                    1 Reply Last reply Reply Quote 0
                    • J
                      jeorgep last edited by

                      Мои изменения в <u>/opt/iobroker/node_modules/iobroker.owfs/main.js</u>

                      (версия 0.2.2 (2016-07-29))

                      var fs = require('fs');

                      Функция writeWire

                      ! function writeWire(wire, value) {
                      ! if (wire) {
                      ! adapter.log.debug('Write /' + wire.id + '/' + (wire.property || 'temperature') + ' with "' + value + '"');
                      ! var path1wire = "/mnt/1wire";
                      ! if (wire.property == "sensed.BYTE") {
                      ! var pathfs = "/" + wire.id + "/PIO.BYTE";
                      ! } else if (wire.property == "PIO.BYTE") {
                      ! var pathfs = "/" + wire.id + "/PIO.BYTE";
                      ! } else {
                      ! var pathfs = "/" + wire.id + '/' + (wire.property || 'temperature');
                      ! }
                      ! var pathfile = path1wire + pathfs;
                      ! var dataV = parseInt(value);
                      ! adapter.log.debug(pathfile + ' with "' + dataV + '"');
                      ! // Write to file
                      ! fs.writeFile(pathfile, dataV, function(err, written) {
                      ! if (err) {
                      ! // Write error
                      ! adapter.log.warn('Cannot write value of ' + pathfile + ': ' + JSON.stringify(err));
                      ! adapter.setState('wires.' + wire._name, {val: 0, ack: true, q: 0x84});
                      ! } else {
                      ! if (wire.property.indexOf('PIO') === -1) {
                      ! adapter.setState('wires.' + wire._name, parseFloat(value) || 0, true);
                      ! } else {
                      ! adapter.setState('wires.' + wire._name, !(value === '0' || value === 0 || value === 'false' || value === false), true);
                      ! }
                      ! }
                      ! });
                      ! /*
                      ! client.write('/' + wire.id + '/' + (wire.property || 'temperature'), value, function (err, message) {
                      ! if (message !== undefined) {
                      ! adapter.log.debug('Response for write /' + wire.name + '/' + (wire.property || 'temperature') + ': ' + message);
                      ! }
                      ! // no idea what is received here
                      ! if (err) {
                      ! adapter.log.warn('Cannot write value of /' + wire.id + '/' + (wire.property || 'temperature') + ': ' + JSON.stringify(err));
                      ! adapter.setState('wires.' + wire._name, {val: 0, ack: true, q: 0x84});
                      ! } else {
                      ! if (wire.property.indexOf('PIO') === -1) {
                      ! adapter.setState('wires.' + wire._name, parseFloat(value) || 0, true);
                      ! } else {
                      ! adapter.setState('wires.' + wire._name, !(value === '0' || value === 0 || value === 'false' || value === false), true);
                      ! }
                      ! }
                      ! });
                      ! */
                      ! }
                      ! }

                      Функция readWire

                      ! function readWire(wire) {
                      ! if (wire) {
                      ! /*
                      ! client.read('/' + wire.id + '/' + (wire.property || 'temperature'), function(err, result) {
                      ! result.value = result.value || '0';
                      ! result.value = result.value.trim();
                      ! adapter.log.debug('Read ' + result.path + ':' + result.value);
                      ! if (!err) {
                      ! if (wire.property.indexOf('PIO') !== -1) {
                      ! adapter.setState('wires.' + wire._name, (result.value == '1'), true);
                      ! } else {
                      ! adapter.setState('wires.' + wire._name, parseFloat(result.value) || 0, true);
                      ! }
                      ! } else {
                      ! adapter.setState('wires.' + wire._name, {val: 0, ack: true, q: 0x84}); // sensor reports error
                      ! adapter.log.warn('Cannot read value of /' + wire.id + '/' + (wire.property || 'temperature') + ': ' + err);
                      ! }
                      ! });
                      ! */
                      ! var path1wire = "/mnt/1wire";
                      ! var pathfs = "/" + wire.id + '/' + (wire.property || 'temperature');
                      ! var pathfile = path1wire + pathfs;
                      ! // Read from file
                      ! fs.readFile(pathfile, function (err,data) {
                      ! var result = data;
                      ! adapter.log.debug('Read ' + pathfile + ':' + result);
                      ! if (!err) {
                      ! if (wire.property.indexOf('PIO') !== -1) {
                      ! adapter.setState('wires.' + wire._name, (result == '1'), true);
                      ! } else {
                      ! adapter.setState('wires.' + wire._name, parseFloat(result) || 0, true);
                      ! }
                      ! } else {
                      ! adapter.setState('wires.' + wire._name, {val: 0, ack: true, q: 0x84}); // sensor reports error
                      ! adapter.log.warn('Cannot read value of ' + pathfile + ': ' + err);
                      ! }
                      ! });
                      ! }
                      ! }

                      В настройках адаптера OWFS в ioBroker:

                      Timeout(ms): 3000

                      Poll interval(sec): 2

                      Работает неделю без сбоев.

                      Реакция на read/rwite где-то около секунды-двух.

                      это приемлемо для обработки сигнала от датчиков движения.

                      Конечно это будет работать лишь на локальной системе.

                      Поэтому правильнее бы в настройки адаптера OWFS вывести возможность

                      выбора - локальное включение или удаленная работа по tcp (IMHO)

                      И нужно учесть, что при такой частоте опроса увеличивается нагрузка на процессор.

                      Но в моей Orange Pi+2 это практически не ощутимо

                      1 Reply Last reply Reply Quote 0
                      • H
                        Haus last edited by

                        @Bluefox:

                        @Haus:

                        Главное посмотри почему с удалённого неработает `
                        Поменяй в файле /etc/owfs.conf

                        # With this setup, any client (but owserver) uses owserver on the
                        # local machine...
                        !server: -s 4304
                        
                        

                        и

                        ####################### OWSERVER ########################
                        
                        server: -p 4304
                        
                        

                        У тебя только локальный доступ настроен `
                        Локально или нелокально все равно больше одного-трёх "Read addresses" не читает. При этом owfs, majordom, demo(Андрея) находит всегда и визде.

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

                          А вот подскажите пожалуйста

                          Раньше драйвер, в случае невозможности считать данные с датчика, тут же рапортовал об ошибке в логе, с указанием адреса датчика.

                          А вот в новой версии такого не происходит. Отключил датчик, а брокер в объектах сообщает его последнее значение.

                          Как вернуть сообщение об ошибке. Я подозреваю где-то возможно указать время в течение которого драйвер пытается считать значения не выдавая ошибку. Однако я не нашел где:(

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          812
                          Online

                          31.8k
                          Users

                          80.0k
                          Topics

                          1.3m
                          Posts

                          5
                          74
                          16741
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo