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.
    • H
      Haus last edited by

      @jeorgep:

      После установки версии 0.2.2 проблема с созданием объектов решилась.

      Но очень долгая реакция на изменение состояния порта (sensed) в DS2408,

      где-то 30 сек или больше, что недопустимо например для датчика движения и включения света.

      У меня датчики HC-SR501 подключены к портам DS2408.

      Параллельно запускаю скрипт:

      #!/bin/bash
      while true; do
        ALL=`cat /mnt/1wire/29.XXXXXX000000/sensed.ALL`
        echo $ALL
        sleep 1
      done
      

      И наблюдаю в закладке 'Objects' когда изменяется состояние (например value.sensed.4).

      Задержка до пол-минуты относительно скрипта.

      Реально такая задержка не позволит использовать драйвер OWFS для реакции на быстрые события. `
      Привет,

      Может есть возможность проверить удалённое подключение или большее количество датчиков на 127.0.0.1, у меня Read addresses "Найдено 0 сенсор(a/ов).

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

        ` > Привет,

        Может есть возможность проверить удалённое подключение или большее количество датчиков на 127.0.0.1, у меня Read addresses "Найдено 0 сенсор(a/ов). `

        Привет,

        я не совсем понял вопрос.

        Если про мое подключение - используется Orange Pi+2.

        Как мастер - использую восьмиканальный DS2482-800 (http://datasheets.maximintegrated.com/e … 82-800.pdf).

        Ибо 1-wire не любит подключения звездой, а в моем случае сервер с мастером находятся посередине топологии, пришлось использовать ее.

        Реакция на уровне файлов OWFS или owserver неплохая - где-то на уровне секунды (точнее не замерял).

        Датчиков используется много разнообразных.

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

        то для включалелей света или датчиков движения на портах DS2408 - она критична.

        Жена не будет пол минуты после входа в помещение ждать пока загорится свет 🙂

        В результате параллельного запуска скрипта и привязаного обьекта в ioBroker -

        определил, что запаздывание от датчика движения происходит где-то до присвоения значения обьекту в ioBroker-е.

        То-есть скрипт уже давно показал, что состояние изменилось, а в ioBrokere оно остается неизмененным еще где-то 30 сек.

        Можно конечно обрабатывать состояние на уровне Bash или написать скрипт на Питоне и уже после

        обработки изменять состояние переменной в ioBroker - но тогда драйвер OWFS не нужен.

        1 Reply Last reply Reply Quote 0
        • 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

                              675
                              Online

                              31.9k
                              Users

                              80.1k
                              Topics

                              1.3m
                              Posts

                              5
                              74
                              16805
                              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