NEWS
Ошибка создания объекта в OWFS
-
Где я такое говорил? `
в настройках
Ты настроил драйвер так, что бы он читал эту переменную. Удали её из конфига.
Чего та недопонимаю, ставлю новый owfs.2, включаю, захожу в настройки по умолчанию, нажимаю read получаю на DS18B20 два параметра 28.FFF67D3B0400/temperature, 28.FFF67D3B0400/fasttemp
Нажать на удалить не пробовал?Сначала создаются возможные полезные значения, а тебе выбирать, хочешь ты их читать или нет
48_2016-07-29_23_32_51-iobroker.admin.png -
в настройках
Ты настроил драйвер так, что бы он читал эту переменную. Удали её из конфига.
Чего та недопонимаю, ставлю новый owfs.2, включаю, захожу в настройки по умолчанию, нажимаю read получаю на DS18B20 два параметра 28.FFF67D3B0400/temperature, 28.FFF67D3B0400/fasttemp
Нажать на удалить не пробовал?Сначала создаются возможные полезные значения, а тебе выбирать, хочешь ты их читать или нет `
Не знаю кому и зачем нужен fasttemp. Закомментировал в admin````
'heat_index',
'humidex',
'light',
'temperature',
//'fasttemp',
'set_alarm',
'date', -
DS2408 в OWFS:
(http://owfs.org/uploads/DS2408.3.html#sect10)
PIO используются для записи в них 0/1
sensed используются для чтения информации с портов
latch используются для получения информации об изменении состояния порта
(бит 1 указывает, что состояние изменялось)
Для очистки состояния latch применяется запись в любой из latch портов. Например:
echo 1 > latch.0
При этом очищаюся ВСЕ восемь latch портов, то-есть для сохранения информации
об изменениях состояний портов со времени последней очистки - необходимо сохранить latch.ALL
и лишь потом производить очистку.
Перед использованием DS2408 необходимо провести ее инициализацию:
echo 1 > out_of_testmode
И для использования функции запись в порт - необходимо включить strobe:
echo 1 > strobe
В iobroker нужно использовать как минимум PIO и sensed - для возможности записи/чтения в порт.
-
После установки версии 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 для реакции на быстрые события.
-
После установки версии 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/ов).
-
` > Привет,
Может есть возможность проверить удалённое подключение или большее количество датчиков на 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 не нужен.
-
у меня при записи через FS(добавил строчки в драйвер) - реакция на изменении менее 1 сек. 7 шт DS2413(движение, стиральная машина, нагреватель воды, насос подкачки воды и т.д.). порт А вход с детектора движения, В выход на реле.
-
> у меня при записи через FS(добавил строчки в драйвер) - реакция на изменении менее 1 сек. 7 шт DS2413(движение, стиральная машина, нагреватель воды, насос подкачки воды и т.д.). порт А вход с детектора движения, В выход на реле.
Клас!
делись строчками в драйвере
-
у меня при записи через FS(добавил строчки в драйвер) - реакция на изменении менее 1 сек. 7 шт DS2413(движение, стиральная машина, нагреватель воды, насос подкачки воды и т.д.). порт А вход с детектора движения, В выход на реле. `
Какой адаптер, как подключен? -
адаптер 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);
}
});
}
}
-
> добавил запись значений через 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.
-
адаптер 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" она у тебя находит датчики и ключи? -
> добавил запись значений через 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) {…
}); `
Вечером дома протестирую
-
адаптер owfs не обновляю, версия 0.0.2. кнопки поиска нет.
строчку не исключаю - для проверки
-
Мои изменения в <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 это практически не ощутимо
-
Главное посмотри почему с удалённого неработает `
Поменяй в файле /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(Андрея) находит всегда и визде. -
А вот подскажите пожалуйста
Раньше драйвер, в случае невозможности считать данные с датчика, тут же рапортовал об ошибке в логе, с указанием адреса датчика.
А вот в новой версии такого не происходит. Отключил датчик, а брокер в объектах сообщает его последнее значение.
Как вернуть сообщение об ошибке. Я подозреваю где-то возможно указать время в течение которого драйвер пытается считать значения не выдавая ошибку. Однако я не нашел где:(