Простые устройства-функционал
Модератор: immortal
- Vlado
- Сообщения: 24
- Зарегистрирован: Чт окт 19, 2017 2:24 pm
- Благодарил (а): 3 раза
- Поблагодарили: 0
Простые устройства-функционал
подскажите пожалуйста
Разбираюсь с простыми устройствами-очень интересный модуль.
Проблема в чем- есть тэн водонагревателя и датчик ds18b20
датчик бывает выдает неверные значения раз-два в час что то типа -1900
Естественно тен включается -так как по логике запуск при 50 градусов и выключение при 75
Пороги в простых устройствах прописаны
Нижний порог 5
Верхний порог 100
но в связанных устройствах все равно тэн при левых значениях срабатывает.
Как сделать что бы при значении выходящем за порог связанные устройства не включались????
Разбираюсь с простыми устройствами-очень интересный модуль.
Проблема в чем- есть тэн водонагревателя и датчик ds18b20
датчик бывает выдает неверные значения раз-два в час что то типа -1900
Естественно тен включается -так как по логике запуск при 50 градусов и выключение при 75
Пороги в простых устройствах прописаны
Нижний порог 5
Верхний порог 100
но в связанных устройствах все равно тэн при левых значениях срабатывает.
Как сделать что бы при значении выходящем за порог связанные устройства не включались????
-
- Сообщения: 154
- Зарегистрирован: Чт апр 20, 2017 5:32 am
- Откуда: Томск
- Благодарил (а): 55 раз
- Поблагодарили: 22 раза
Re: Простые устройства-функционал
Как вариант в php условия прописатьVlado писал(а):подскажите пожалуйста
Разбираюсь с простыми устройствами-очень интересный модуль.
Проблема в чем- есть тэн водонагревателя и датчик ds18b20
датчик бывает выдает неверные значения раз-два в час что то типа -1900
Естественно тен включается -так как по логике запуск при 50 градусов и выключение при 75
Пороги в простых устройствах прописаны
Нижний порог 5
Верхний порог 100
но в связанных устройствах все равно тэн при левых значениях срабатывает.
Как сделать что бы при значении выходящем за порог связанные устройства не включались????
что то типо:
если значение меньше 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: Простые устройства-функционал
Так и сделал, причем даже использовать значенияКак вариант в 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");
}
}
}
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");
}
}
}
Но эт как бы через костыль, хотелось использовать простые настройки которые есть в системе,
жаль что простые устройства так и недопилили до конца.
Условия Нижний порог Верхний порог срабатывают только на оповещения, использовать данные для проекта не получилось
-
- Сообщения: 154
- Зарегистрирован: Чт апр 20, 2017 5:32 am
- Откуда: Томск
- Благодарил (а): 55 раз
- Поблагодарили: 22 раза
Re: Простые устройства-функционал
А как у вас подключен датчик? ардуино? каким кабелем? Скрутки или винтовые соединения?Vlado писал(а):Так и сделал, причем даже использовать значенияКак вариант в php условия прописать
что то типо:
если значение меньше 0 не включаем тен
и тд.
Нижний порог 5
Верхний порог 100
не получилось , система все равно реагирует на ошибочные значения
В итоге решил вопрос вот таким условием3 тэна и датчик ds18b20 ну и то же условие для второго датчика температуры -если один из них выйдет из строя или начнет показывать чушь то второй подхватит управление...СпойлерПоказать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");
}
}
}
Но эт как бы через костыль, хотелось использовать простые настройки которые есть в системе,
жаль что простые устройства так и недопилили до конца.
Условия Нижний порог Верхний порог срабатывают только на оповещения, использовать данные для проекта не получилось
Просто у меня при больших расстояниях ds18b20 на megad2561 показывал что типа -168. Как вариант плохое соединение, либо кабель.
Но соглашусь костыль
Raspberry Pi2, Pi3, MegaD2561RTC + 14 in + 14R, WemosD1, Mega2560, Arduino nano v.3, Arduino Uno, ESP8266 12f.
-
- Сообщения: 154
- Зарегистрирован: Чт апр 20, 2017 5:32 am
- Откуда: Томск
- Благодарил (а): 55 раз
- Поблагодарили: 22 раза
Re: Простые устройства-функционал
Как вариант кода:
Код: Выделить всё
$temperatura = gg("Sensor_temp03.value");
$tempmin = 10;
$tempmax = 75;
if ($temperatura < $tempmin)
callMethod("Relay01.turnOn");
if ($temperatura > $tempmax)
callMethod("Relay01.turnOff");
- Рейтинг: 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: Простые устройства-функционал
обычная витая пара, по дому пустил от меги метра 4-5 в данном случае, в принципе уже какое то время использую в доме мега+витая пара до 10-15 м дальше не пробовал, главное стабильное питание.А как у вас подключен датчик? ардуино? каким кабелем? Скрутки или винтовые соединения?
Просто у меня при больших расстояниях ds18b20 на megad2561 показывал что типа -168. Как вариант плохое соединение, либо кабель.
Но соглашусь костыль
Проблем нет, кое где в одном кабель канале с 220в - тоже норм, хотя читал страшилки про наводки и т.д
полет года 2 как нормальный.
Соединения со старых разьемов с ес1840 остались там штырьки очень туго входят - контакт хороший...ну или паяю, кое где где неуверен ставлю резьбовые разьемы под болты.
По ds18b20 у меня на ардуине не реализованы задержки в коде а датчиков около 6 уже, ну и на бойлере опрос быстрый раз в 4 секунды, вот и вылетает в час пару глюков.
Это в принципе не критично
По коду вариант интересный изучу спс.
-
- Сообщения: 154
- Зарегистрирован: Чт апр 20, 2017 5:32 am
- Откуда: Томск
- Благодарил (а): 55 раз
- Поблагодарили: 22 раза
Re: Простые устройства-функционал
Может в скетче меги использовать sleep? а лучше mills?Vlado писал(а):обычная витая пара, по дому пустил от меги метра 4-5 в данном случае, в принципе уже какое то время использую в доме мега+витая пара до 10-15 м дальше не пробовал, главное стабильное питание.А как у вас подключен датчик? ардуино? каким кабелем? Скрутки или винтовые соединения?
Просто у меня при больших расстояниях ds18b20 на megad2561 показывал что типа -168. Как вариант плохое соединение, либо кабель.
Но соглашусь костыль
Проблем нет, кое где в одном кабель канале с 220в - тоже норм, хотя читал страшилки про наводки и т.д
полет года 2 как нормальный.
Соединения со старых разьемов с ес1840 остались там штырьки очень туго входят - контакт хороший...ну или паяю, кое где где неуверен ставлю резьбовые разьемы под болты.
По ds18b20 у меня на ардуине не реализованы задержки в коде а датчиков около 6 уже, ну и на бойлере опрос быстрый раз в 4 секунды, вот и вылетает в час пару глюков.
Это в принципе не критично
По коду вариант интересный изучу спс.
Быть может шина в процессе опроса занята и выдает абракадабру?
У себя сделал период опроса 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: Простые устройства-функционал
задержки в скетче ставить нельзя, в системе есть датчики движения и давления воды, да и бойлер если перегреется то отрубится по перегреву на минуту полностью по питанию, по расчетам даже 10 секунд много, бойлер проточный (водонагреватель) нагревается быстро.Может в скетче меги использовать sleep? а лучше mills?
Когда разбирался с железом сделал скетч по подобию AMS с поддержкой mqtt для различных ардуин (mega,esp,stm32) то что использую в проекте.
Помню пробовал сделать модуль с millis что бы реализовать задержки каким либо способом внутри конкретного модуля, но не получилось- не хватило знаний- и времени и он конфликтовал с модулем таймер(он тоже использует millis и реализуется без задержек основного кода -задержки для модулей).
Задержки нужны разные для различных устройств.
Все довольно примитивно , но главное что работает и уже давно.
Наводки пока не пугают, апаратная реализация получилась вполне надежная их пока не регистрирую.
- Вложения
-
- amqtt_v1.0_mega_4_reliz3.rar
- пример кода на мегу
- (6.78 КБ) 120 скачиваний
-
- Сообщения: 154
- Зарегистрирован: Чт апр 20, 2017 5:32 am
- Откуда: Томск
- Благодарил (а): 55 раз
- Поблагодарили: 22 раза
Re: Простые устройства-функционал
Так тогда может если значение которое выходит за пределы исключить из выполнения? При условии что оно всегда -1900?Vlado писал(а):задержки в скетче ставить нельзя, в системе есть датчики движения и давления воды, да и бойлер если перегреется то отрубится по перегреву на минуту полностью по питанию, по расчетам даже 10 секунд много, бойлер проточный (водонагреватель) нагревается быстро.Может в скетче меги использовать sleep? а лучше mills?
Когда разбирался с железом сделал скетч по подобию AMS с поддержкой mqtt для различных ардуин (mega,esp,stm32) то что использую в проекте.
Помню пробовал сделать модуль с millis что бы реализовать задержки каким либо способом внутри конкретного модуля, но не получилось- не хватило знаний- и времени и он конфликтовал с модулем таймер(он тоже использует millis и реализуется без задержек основного кода -задержки для модулей).
Задержки нужны разные для различных устройств.
Все довольно примитивно , но главное что работает и уже давно.
Наводки пока не пугают, апаратная реализация получилась вполне надежная их пока не регистрирую.
В скетче ардуино
Код: Выделить всё
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"); ///выключаем реле
- Рейтинг: 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: Простые устройства-функционал
попробую...спс идея хорошая..но что бы и уличные датчики работали нужно наверное либо интервал увеличить, либо отдельно модуль для тэна и для датчиков температур......Заметил если общую задержку на выполнение делать от минуты до 5 то вообще нет левых значенийТак тогда может если значение которое выходит за пределы исключить из выполнения? При условии что оно всегда -1900?
В скетче ардуино
Код:
sensVal = constrain(sensVal, 10, 75);
// ограничиваем значения sensVal диапазоном от 10 до 75
Возможно будет работать
на данный момент сделал на мд ограничения, норм работает.
жаль что в простых устройствах нельзя без заморочек указать условия, а через код только.
Устройства не шибко простые получаются.
Сегодня хотел условие засунуть в "действия" инвертора по быстрому
if (timeBetween('23:02', '06:58')) {
callMethod("Relay04.turnOn");
}
if (timeBetween('06:53', '22:55')) {
callMethod("Relay04.turnOff");
}
(там банально esp+реле+обвязка в корпус обогревателя засунул)
включение в ночное время только когда тариф дешевый..
В итоге тишина.Но прекрасно работает в сценарии и простых устройствах