Простые устройства-функционал

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Аватара пользователя
Vlado
Сообщения: 24
Зарегистрирован: Чт окт 19, 2017 2:24 pm
Благодарил (а): 3 раза
Поблагодарили: 0

Простые устройства-функционал

Сообщение Vlado » Пн ноя 13, 2017 12:43 am

подскажите пожалуйста
Разбираюсь с простыми устройствами-очень интересный модуль.
Проблема в чем- есть тэн водонагревателя и датчик ds18b20
датчик бывает выдает неверные значения раз-два в час что то типа -1900
Естественно тен включается -так как по логике запуск при 50 градусов и выключение при 75
Пороги в простых устройствах прописаны
Нижний порог 5
Верхний порог 100
но в связанных устройствах все равно тэн при левых значениях срабатывает.

Как сделать что бы при значении выходящем за порог связанные устройства не включались????
neromih
Сообщения: 154
Зарегистрирован: Чт апр 20, 2017 5:32 am
Откуда: Томск
Благодарил (а): 55 раз
Поблагодарили: 22 раза

Re: Простые устройства-функционал

Сообщение neromih » Вт ноя 14, 2017 6:11 am

Vlado писал(а):подскажите пожалуйста
Разбираюсь с простыми устройствами-очень интересный модуль.
Проблема в чем- есть тэн водонагревателя и датчик ds18b20
датчик бывает выдает неверные значения раз-два в час что то типа -1900
Естественно тен включается -так как по логике запуск при 50 градусов и выключение при 75
Пороги в простых устройствах прописаны
Нижний порог 5
Верхний порог 100
но в связанных устройствах все равно тэн при левых значениях срабатывает.

Как сделать что бы при значении выходящем за порог связанные устройства не включались????
Как вариант в php условия прописать
что то типо:
если значение меньше 0 не включаем тен
и тд.
Raspberry Pi2, Pi3, MegaD2561RTC + 14 in + 14R, WemosD1, Mega2560, Arduino nano v.3, Arduino Uno, ESP8266 12f.
Аватара пользователя
Vlado
Сообщения: 24
Зарегистрирован: Чт окт 19, 2017 2:24 pm
Благодарил (а): 3 раза
Поблагодарили: 0

Re: Простые устройства-функционал

Сообщение Vlado » Вт ноя 14, 2017 11:47 pm

Как вариант в php условия прописать
что то типо:
если значение меньше 0 не включаем тен
и тд.
Так и сделал, причем даже использовать значения
Нижний порог 5
Верхний порог 100
не получилось , система все равно реагирует на ошибочные значения
В итоге решил вопрос вот таким условием
СпойлерПоказать
if (getGlobal('Sensor_temp03'.'.'.'alive') == '1') {
if (getGlobal('Sensor_temp03'.'.'.'value') > '10' && getGlobal('Sensor_temp03'.'.'.'value') < '100') {
if (getGlobal("Sensor_temp03.value") < '65') {
callMethod("Relay01.turnOn");
}
if (getGlobal("Sensor_temp03.value") > '75') {
callMethod("Relay01.turnOff");
}
if (getGlobal("Sensor_temp03.value") < '55') {
callMethod("Relay02.turnOn");
}
if (getGlobal("Sensor_temp03.value") > '65') {
callMethod("Relay02.turnOff");
}
if (getGlobal("Sensor_temp03.value") < '50') {
callMethod("Relay03.turnOn");
}
if (getGlobal("Sensor_temp03.value") > '60') {
callMethod("Relay03.turnOff");
}
}
}
3 тэна и датчик ds18b20 ну и то же условие для второго датчика температуры -если один из них выйдет из строя или начнет показывать чушь то второй подхватит управление...
Но эт как бы через костыль, хотелось использовать простые настройки которые есть в системе,
жаль что простые устройства так и недопилили до конца. :cry:
Условия Нижний порог Верхний порог срабатывают только на оповещения, использовать данные для проекта не получилось
neromih
Сообщения: 154
Зарегистрирован: Чт апр 20, 2017 5:32 am
Откуда: Томск
Благодарил (а): 55 раз
Поблагодарили: 22 раза

Re: Простые устройства-функционал

Сообщение neromih » Ср ноя 15, 2017 10:55 am

Vlado писал(а):
Как вариант в php условия прописать
что то типо:
если значение меньше 0 не включаем тен
и тд.
Так и сделал, причем даже использовать значения
Нижний порог 5
Верхний порог 100
не получилось , система все равно реагирует на ошибочные значения
В итоге решил вопрос вот таким условием
СпойлерПоказать
if (getGlobal('Sensor_temp03'.'.'.'alive') == '1') {
if (getGlobal('Sensor_temp03'.'.'.'value') > '10' && getGlobal('Sensor_temp03'.'.'.'value') < '100') {
if (getGlobal("Sensor_temp03.value") < '65') {
callMethod("Relay01.turnOn");
}
if (getGlobal("Sensor_temp03.value") > '75') {
callMethod("Relay01.turnOff");
}
if (getGlobal("Sensor_temp03.value") < '55') {
callMethod("Relay02.turnOn");
}
if (getGlobal("Sensor_temp03.value") > '65') {
callMethod("Relay02.turnOff");
}
if (getGlobal("Sensor_temp03.value") < '50') {
callMethod("Relay03.turnOn");
}
if (getGlobal("Sensor_temp03.value") > '60') {
callMethod("Relay03.turnOff");
}
}
}
3 тэна и датчик ds18b20 ну и то же условие для второго датчика температуры -если один из них выйдет из строя или начнет показывать чушь то второй подхватит управление...
Но эт как бы через костыль, хотелось использовать простые настройки которые есть в системе,
жаль что простые устройства так и недопилили до конца. :cry:
Условия Нижний порог Верхний порог срабатывают только на оповещения, использовать данные для проекта не получилось
А как у вас подключен датчик? ардуино? каким кабелем? Скрутки или винтовые соединения?
Просто у меня при больших расстояниях ds18b20 на megad2561 показывал что типа -168. Как вариант плохое соединение, либо кабель.
Но соглашусь костыль :)
Raspberry Pi2, Pi3, MegaD2561RTC + 14 in + 14R, WemosD1, Mega2560, Arduino nano v.3, Arduino Uno, ESP8266 12f.
neromih
Сообщения: 154
Зарегистрирован: Чт апр 20, 2017 5:32 am
Откуда: Томск
Благодарил (а): 55 раз
Поблагодарили: 22 раза

Re: Простые устройства-функционал

Сообщение neromih » Ср ноя 15, 2017 11:02 am

Как вариант кода:

Код: Выделить всё

$temperatura = gg("Sensor_temp03.value");
$tempmin = 10;
$tempmax = 75;

if ($temperatura < $tempmin)
callMethod("Relay01.turnOn");
if ($temperatura > $tempmax)
callMethod("Relay01.turnOff");
За это сообщение автора neromih поблагодарил:
Vlado (Ср ноя 15, 2017 3:37 pm)
Рейтинг: 1.16%
Raspberry Pi2, Pi3, MegaD2561RTC + 14 in + 14R, WemosD1, Mega2560, Arduino nano v.3, Arduino Uno, ESP8266 12f.
Аватара пользователя
Vlado
Сообщения: 24
Зарегистрирован: Чт окт 19, 2017 2:24 pm
Благодарил (а): 3 раза
Поблагодарили: 0

Re: Простые устройства-функционал

Сообщение Vlado » Ср ноя 15, 2017 3:37 pm

А как у вас подключен датчик? ардуино? каким кабелем? Скрутки или винтовые соединения?
Просто у меня при больших расстояниях ds18b20 на megad2561 показывал что типа -168. Как вариант плохое соединение, либо кабель.
Но соглашусь костыль :)
обычная витая пара, по дому пустил от меги метра 4-5 в данном случае, в принципе уже какое то время использую в доме мега+витая пара до 10-15 м дальше не пробовал, главное стабильное питание.
Проблем нет, кое где в одном кабель канале с 220в - тоже норм, хотя читал страшилки про наводки и т.д
полет года 2 как нормальный.
Соединения со старых разьемов с ес1840 остались там штырьки очень туго входят - контакт хороший...ну или паяю, кое где где неуверен ставлю резьбовые разьемы под болты.
По ds18b20 у меня на ардуине не реализованы задержки в коде а датчиков около 6 уже, ну и на бойлере опрос быстрый раз в 4 секунды, вот и вылетает в час пару глюков.
Это в принципе не критично
По коду вариант интересный изучу спс.
neromih
Сообщения: 154
Зарегистрирован: Чт апр 20, 2017 5:32 am
Откуда: Томск
Благодарил (а): 55 раз
Поблагодарили: 22 раза

Re: Простые устройства-функционал

Сообщение neromih » Ср ноя 15, 2017 6:01 pm

Vlado писал(а):
А как у вас подключен датчик? ардуино? каким кабелем? Скрутки или винтовые соединения?
Просто у меня при больших расстояниях ds18b20 на megad2561 показывал что типа -168. Как вариант плохое соединение, либо кабель.
Но соглашусь костыль :)
обычная витая пара, по дому пустил от меги метра 4-5 в данном случае, в принципе уже какое то время использую в доме мега+витая пара до 10-15 м дальше не пробовал, главное стабильное питание.
Проблем нет, кое где в одном кабель канале с 220в - тоже норм, хотя читал страшилки про наводки и т.д
полет года 2 как нормальный.
Соединения со старых разьемов с ес1840 остались там штырьки очень туго входят - контакт хороший...ну или паяю, кое где где неуверен ставлю резьбовые разьемы под болты.
По ds18b20 у меня на ардуине не реализованы задержки в коде а датчиков около 6 уже, ну и на бойлере опрос быстрый раз в 4 секунды, вот и вылетает в час пару глюков.
Это в принципе не критично
По коду вариант интересный изучу спс.
Может в скетче меги использовать sleep? а лучше mills?
Быть может шина в процессе опроса занята и выдает абракадабру? :)
У себя сделал период опроса 1 минута практически всех датчиков, оптимально я думаю такой период будет и для систем отопления, бойлеров, ну за минуту грубо скажем если температура достигла 75 градусов, ну максимум на 1 градус поднимется, это же не критично? Зато система будет стабильней без промежуточного мусора. Опрос раз в 4 секунды в 60 секунд плодит 15 записей в БД :) не рациональная нагрузка.
Так вот об sleep и mills, лучше последнее :)
Код будет примерно следующий (код для понятия принципа работы)

Код: Выделить всё

const int button1Pin = 2;
const int button2Pin = 3;
const int led1Pin = 4;
const int led2Pin = 5;
unsigned long led1OnTime;
unsigned long led2OnTime;
bool led1On;
bool led2On;
void setup() {
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
led1On = false;
led2On = false;
}
void loop(){
if (digitalRead(button1Pin) == HIGH) {
digitalWrite(led1Pin, HIGH);
led1On = true;
led1OnTime = millis();
}
if (digitalRead(button2Pin) == HIGH) {
digitalWrite(led2Pin, HIGH);
led2On = true;
led2OnTime = millis();
}
if(led1On)
if(millis() - led1OnTime > 30000) {
digitalWrite(led1Pin, LOW);
led1On = false;
}
if(led2On)
if(millis() - led2OnTime > 30000) {
digitalWrite(led2Pin, LOW);
led2On = false;
}
} 
Когда кнопка нажата, скетч заставляет светодиод включится, сохраняет текущее время и меняет значение в переменной статуса.
Если светодиод горит (переменная состояния равна true), скетч периодечески проверяет длительность состояния вкл. (30 секунд, то есть 30000 милисекунд): если период превышает допустимый (30 секунд 30000 миллисекунд), то это значит, что светодиод выключен.
(с) взято на просторах интернета.

глюки - это критично
п.с. - 220 может давать наводки, и как понимаю может быть очень критично для 1 wire сетей, есть страшилки что возможно и полный отказ сети в связи с тем что сгорит или что то в этом роде :)
Raspberry Pi2, Pi3, MegaD2561RTC + 14 in + 14R, WemosD1, Mega2560, Arduino nano v.3, Arduino Uno, ESP8266 12f.
Аватара пользователя
Vlado
Сообщения: 24
Зарегистрирован: Чт окт 19, 2017 2:24 pm
Благодарил (а): 3 раза
Поблагодарили: 0

Re: Простые устройства-функционал

Сообщение Vlado » Ср ноя 15, 2017 11:56 pm

Может в скетче меги использовать sleep? а лучше mills?
задержки в скетче ставить нельзя, в системе есть датчики движения и давления воды, да и бойлер если перегреется то отрубится по перегреву на минуту полностью по питанию, по расчетам даже 10 секунд много, бойлер проточный (водонагреватель) нагревается быстро.
Когда разбирался с железом сделал скетч по подобию AMS с поддержкой mqtt для различных ардуин (mega,esp,stm32) то что использую в проекте.
Помню пробовал сделать модуль с millis что бы реализовать задержки каким либо способом внутри конкретного модуля, но не получилось- не хватило знаний- и времени и он конфликтовал с модулем таймер(он тоже использует millis и реализуется без задержек основного кода -задержки для модулей).
Задержки нужны разные для различных устройств.
Все довольно примитивно , но главное что работает и уже давно.
Наводки пока не пугают, апаратная реализация получилась вполне надежная их пока не регистрирую.
Вложения
amqtt_v1.0_mega_4_reliz3.rar
пример кода на мегу
(6.78 КБ) 119 скачиваний
neromih
Сообщения: 154
Зарегистрирован: Чт апр 20, 2017 5:32 am
Откуда: Томск
Благодарил (а): 55 раз
Поблагодарили: 22 раза

Re: Простые устройства-функционал

Сообщение neromih » Чт ноя 16, 2017 3:28 am

Vlado писал(а):
Может в скетче меги использовать sleep? а лучше mills?
задержки в скетче ставить нельзя, в системе есть датчики движения и давления воды, да и бойлер если перегреется то отрубится по перегреву на минуту полностью по питанию, по расчетам даже 10 секунд много, бойлер проточный (водонагреватель) нагревается быстро.
Когда разбирался с железом сделал скетч по подобию AMS с поддержкой mqtt для различных ардуин (mega,esp,stm32) то что использую в проекте.
Помню пробовал сделать модуль с millis что бы реализовать задержки каким либо способом внутри конкретного модуля, но не получилось- не хватило знаний- и времени и он конфликтовал с модулем таймер(он тоже использует millis и реализуется без задержек основного кода -задержки для модулей).
Задержки нужны разные для различных устройств.
Все довольно примитивно , но главное что работает и уже давно.
Наводки пока не пугают, апаратная реализация получилась вполне надежная их пока не регистрирую.
Так тогда может если значение которое выходит за пределы исключить из выполнения? При условии что оно всегда -1900?

В скетче ардуино

Код: Выделить всё

sensVal = constrain(sensVal, 10, 75);
// ограничиваем значения sensVal диапазоном от 10 до 75
 
Возможно будет работать :)

Или же в PHP

Код: Выделить всё

$temperatura = gg("Sensor_temp03.value");
$tempmin = 10;
$tempmax = 75;

if ($temperatura >= 10 && $temperatura < 75) ///если температура больше или равно 10 и меньше 75
callMethod("Relay01.turnOn");                          ///включаем реле
if ($temperatura > $tempmax)                           ///если температура больше 75
callMethod("Relay01.turnOff");                          ///выключаем реле
 
Наверняка будет работать :)
За это сообщение автора neromih поблагодарил:
banderos (Чт ноя 30, 2017 10:36 pm)
Рейтинг: 1.16%
Raspberry Pi2, Pi3, MegaD2561RTC + 14 in + 14R, WemosD1, Mega2560, Arduino nano v.3, Arduino Uno, ESP8266 12f.
Аватара пользователя
Vlado
Сообщения: 24
Зарегистрирован: Чт окт 19, 2017 2:24 pm
Благодарил (а): 3 раза
Поблагодарили: 0

Re: Простые устройства-функционал

Сообщение Vlado » Чт ноя 16, 2017 12:35 pm

Так тогда может если значение которое выходит за пределы исключить из выполнения? При условии что оно всегда -1900?

В скетче ардуино
Код:

sensVal = constrain(sensVal, 10, 75);
// ограничиваем значения sensVal диапазоном от 10 до 75



Возможно будет работать :)
попробую...спс идея хорошая..но что бы и уличные датчики работали нужно наверное либо интервал увеличить, либо отдельно модуль для тэна и для датчиков температур......Заметил если общую задержку на выполнение делать от минуты до 5 то вообще нет левых значений
на данный момент сделал на мд ограничения, норм работает.
жаль что в простых устройствах нельзя без заморочек указать условия, а через код только.
Устройства не шибко простые получаются.
Сегодня хотел условие засунуть в "действия" инвертора по быстрому

if (timeBetween('23:02', '06:58')) {
callMethod("Relay04.turnOn");
}
if (timeBetween('06:53', '22:55')) {
callMethod("Relay04.turnOff");
}
(там банально esp+реле+обвязка в корпус обогревателя засунул)
включение в ночное время только когда тариф дешевый..

В итоге тишина.Но прекрасно работает в сценарии и простых устройствах
Ответить