Обратил внимание что при большом количестве нод/сенсоров объем данных идущих на MJD не разумно большой
(Если использовать стандартные примеры с mySensors.org)
По моему IMHO в редком случае нам столь уж важно знать поменялась ли температура на 0.1 градуса или влажность на 0,1%
в результате предлагаю ввести в скетчи нод расчет разницы в значениях предыдущий/полученный
выглядит это так
вводим новую переменную в начале скетча
float diff = 0;
и при каждом измерении производим расчет разницы
diff = abs ( предыдущий_замер - полученный_замер);
а далее в условии решающем отсылать ли данные на gateway
пишем
if (diff > 0.1){
gw.send( .........
}
например в данном случае будут отправляться обновления лишь если разница более 0,1
У себя я использую для комнатных датчиков температуры/влажности порог в 0,2
мне вообщем то не важно что в комнате выросла температура на 0.2 градуса
а вот на 0,3 ....... ))))) (шутка)
далее выложу пару своих скетчей
Оптимизация объема данных от датчиков
- Sandr
- Сообщения: 126
- Зарегистрирован: Пн ноя 16, 2015 5:10 pm
- Благодарил (а): 19 раз
- Поблагодарили: 29 раз
Оптимизация объема данных от датчиков
Последний раз редактировалось Sandr Чт апр 21, 2016 12:42 pm, всего редактировалось 1 раз.
Win Home Serv 2011 / Intel Core i3 / 32 GB ram /
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
- Sandr
- Сообщения: 126
- Зарегистрирован: Пн ноя 16, 2015 5:10 pm
- Благодарил (а): 19 раз
- Поблагодарили: 29 раз
датчик Движения + температуры/влажности (PIR + DHT)
Мой любимый датчик Температура/Влажность + Движения (собран из примеров на mysensors.org)
Простой и надежный вариант -вешается подальше от обогревающих элементов (батарея/телевизор и т.п) По Российским нормам "На уровне 1.5м от пола, не на стене разделяющей с улицей"
Ну и в месте дающем хороший обзор датчику движения
Данные о температуре/влажности отправляются:
1) если обнаружено движение и разница в значениях (было/стало) более 0.2
2) если с предыдущей отправки прошло две минуты (а движения нет) и разница в значениях (было/стало) более 0.2
PS: немного подправил исходники - все serial.print завел в #ifdef DEBUG
Простой и надежный вариант -вешается подальше от обогревающих элементов (батарея/телевизор и т.п) По Российским нормам "На уровне 1.5м от пола, не на стене разделяющей с улицей"
Ну и в месте дающем хороший обзор датчику движения
СпойлерПоказать
Код: Выделить всё
/**
The MySensors Arduino library handles the wireless radio link and protocol
between your home built sensors/actuators and HA controller of choice.
The sensors forms a self healing radio network with optional repeaters. Each
repeater and gateway builds a routing tables in EEPROM which keeps track of the
network topology allowing messages to be routed to nodes.
Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
Copyright (C) 2013-2015 Sensnology AB
Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
Documentation: http://www.mysensors.org
Support Forum: http://forum.mysensors.org
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
version 2 as published by the Free Software Foundation.
*******************************
REVISION HISTORY
Version 1.0 - Henrik Ekblad
DESCRIPTION
Motion Sensor example using HC-SR501
http://www.mysensors.org/build/motion
*/
#include <MySensor.h>
#include <SPI.h>
#include <DHT.h>
unsigned long SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds)
#define DIGITAL_INPUT_SENSOR 3 // The digital input you attached your motion sensor. (Only 2 and 3 generates interrupt!)
#define HUMIDITY_SENSOR_DIGITAL_PIN 5
#define INTERRUPT DIGITAL_INPUT_SENSOR-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
#define CHILD_ID_HUM 0
#define CHILD_ID_TEMP 1
#define CHILD_ID_MOTION 2 // Id of the sensor child
MySensor gw;
DHT dht;
float lastTemp;
float lastHum;
boolean lastTripped;
float diff = 0;
boolean metric = true;
// Initialize motion message
MyMessage msgHum(CHILD_ID_HUM, V_HUM);
MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
MyMessage msgMotion(CHILD_ID_MOTION, V_TRIPPED);
void setup()
{
gw.begin();
dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN);
// Send the sketch version information to the gateway and Controller
gw.sendSketchInfo("Motion Sensor & DHT22", "1.2");
pinMode(DIGITAL_INPUT_SENSOR, INPUT); // sets the motion sensor digital pin as input
// Register all sensors to gw (they will be created as child devices)
gw.present(CHILD_ID_HUM, S_HUM);
gw.present(CHILD_ID_TEMP, S_TEMP);
gw.present(CHILD_ID_MOTION, S_MOTION);
metric = gw.getConfig().isMetric;
}
void loop()
{
// Read digital motion value
boolean tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH;
#ifdef DEBUG
Serial.print("PIR: ");
Serial.println(tripped);
#endif
if ( lastTripped != tripped ){
lastTripped = tripped;
gw.send(msgMotion.set(tripped ? "1" : "0")); // Send tripped value to gw
}
delay(dht.getMinimumSamplingPeriod());
float temperature = dht.getTemperature();
diff = abs(temperature - lastTemp);
if (isnan(temperature)) {
Serial.println("Failed reading temperature from DHT");
} else if ( diff > 0.2 ) {
lastTemp = temperature;
if (!metric) {
temperature = dht.toFahrenheit(temperature);
}
gw.send(msgTemp.set(temperature, 1));
#ifdef DEBUG
Serial.print("T: ");
Serial.println(temperature);
#endif
}
float humidity = dht.getHumidity();
diff = abs(humidity - lastHum);
if (isnan(humidity)) {
#ifdef DEBUG
Serial.println("Failed reading humidity from DHT");
#endif
} else if (diff > 0.2) {
lastHum = humidity;
gw.send(msgHum.set(humidity, 1));
#ifdef DEBUG
Serial.print("H: ");
Serial.println(humidity);
#endif
}
// Sleep until interrupt comes in on motion sensor. Send update every two minute.
gw.sleep(INTERRUPT, CHANGE, SLEEP_TIME);
}
1) если обнаружено движение и разница в значениях (было/стало) более 0.2
2) если с предыдущей отправки прошло две минуты (а движения нет) и разница в значениях (было/стало) более 0.2
PS: немного подправил исходники - все serial.print завел в #ifdef DEBUG
- Вложения
-
- ms_Motion_DHT22_Sensor.rar
- Готовый скетч
- (1.69 КБ) 296 скачиваний
- Рейтинг: 2.33%
Win Home Serv 2011 / Intel Core i3 / 32 GB ram /
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
-
- Сообщения: 1473
- Зарегистрирован: Сб окт 12, 2013 11:03 pm
- Благодарил (а): 49 раз
- Поблагодарили: 327 раз
Re: Оптимизация объема данных от датчиков
Не понятно причем тут модуль. Оптимизируйте передачу на стороне датчика. Заодно сэкономите батарейку.
Небольшое замечание насчёт стены на улицу и температурного датчика. Всё правильно, но вот если он у вас совмещён с датчиком движения, то его лучше какраз крепить на стену возле окна. Потому как если на противоположную он будет слепится солнцем, а ещё будет ловить движение шторы при открытом окне (Хоть штора не излучает тепло но вот когда на неё падает солнце, 100% срабатывание). Получается вы либо получаете температуру с погрешностью (холод от внешней стены), либо проблему с датчиком движения.
Я вот всё хотел сделать мульти устройство: датчик температуры + влажности + движения + дыма + инфракрасный передатчик + 2 релюшки для люстры. Всё это запихнуть в коробку от датчика дыма и повесить возле люстры (то есть по середине комнаты) заодно питаться от сети люстры и управлять ею
Небольшое замечание насчёт стены на улицу и температурного датчика. Всё правильно, но вот если он у вас совмещён с датчиком движения, то его лучше какраз крепить на стену возле окна. Потому как если на противоположную он будет слепится солнцем, а ещё будет ловить движение шторы при открытом окне (Хоть штора не излучает тепло но вот когда на неё падает солнце, 100% срабатывание). Получается вы либо получаете температуру с погрешностью (холод от внешней стены), либо проблему с датчиком движения.
Я вот всё хотел сделать мульти устройство: датчик температуры + влажности + движения + дыма + инфракрасный передатчик + 2 релюшки для люстры. Всё это запихнуть в коробку от датчика дыма и повесить возле люстры (то есть по середине комнаты) заодно питаться от сети люстры и управлять ею
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
- Sandr
- Сообщения: 126
- Зарегистрирован: Пн ноя 16, 2015 5:10 pm
- Благодарил (а): 19 раз
- Поблагодарили: 29 раз
Re: Оптимизация объема данных от датчиков
А кто сказал "Модуль" ?Ivan писал(а):Не понятно причем тут модуль. Оптимизируйте передачу на стороне датчика. Заодно сэкономите батарейку.
Я как раз и привожу пример с оптимизацией на датчике.
С доводами согласен - но все зависит от расположения помещения относительно сторон светаIvan писал(а):Небольшое замечание насчёт стены на улицу и температурного датчика. Всё правильно, но вот если он у вас совмещён с датчиком движения, то его лучше какраз крепить на стену возле окна. Потому как если на противоположную он будет слепится солнцем, а ещё будет ловить движение шторы при открытом окне (Хоть штора не излучает тепло но вот когда на неё падает солнце, 100% срабатывание). Получается вы либо получаете температуру с погрешностью (холод от внешней стены), либо проблему с датчиком движения.
У меня например в каждом из помещений есть не наружная стена, не освещаемая солнцем
Лишь температуру/влажность надо исключить - под потолком другой климат чем на полуIvan писал(а): Я вот всё хотел сделать мульти устройство: датчик температуры + влажности + движения + дыма + инфракрасный передатчик + 2 релюшки для люстры. Всё это запихнуть в коробку от датчика дыма и повесить возле люстры (то есть по середине комнаты) заодно питаться от сети люстры и управлять ею
Win Home Serv 2011 / Intel Core i3 / 32 GB ram /
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
-
- Сообщения: 1473
- Зарегистрирован: Сб окт 12, 2013 11:03 pm
- Благодарил (а): 49 раз
- Поблагодарили: 327 раз
Re: Оптимизация объема данных от датчиков
Лучше в объектах сделать метод поправок данных. Например опустить температуру на 0.5 (лишьбы не зависило от прямого нагрева солнца)Sandr писал(а):Лишь температуру/влажность надо исключить - под потолком другой климат чем на полу
Вообще я думаю +-1 градус погрешность это не страшно.
Если просто мониторить вообще не страшно.
А если опираться на эти данные для управления (у меня отопление). То у меня и без поправок нормально (усреднение на дом). Хотя зимой при сильном ветре видна разница на 2 градуса в зависимости от расположения комнат к направлению ветра
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
- Sandr
- Сообщения: 126
- Зарегистрирован: Пн ноя 16, 2015 5:10 pm
- Благодарил (а): 19 раз
- Поблагодарили: 29 раз
Re: Оптимизация объема данных от датчиков
Еще один доработанный скетч от mySensors
на этот раз ШИМ димер
В оригинальном, одноканальном, скетче написано "This sketch is extensible to support more than one MOSFET/PWM dimmer per circuit."
На мой взгляд скалирование (увеличение каналов) в нем производится не очень удобно
Вот и дописал его дополнив структурой каналов
Теперь достаточно добавить в массив структуры необходимое количество PWM (ШИМ) портов
Единственное ограничение - эти самые ШИМ порты
у ATMEGA 328 их всего 6 (3, 5, 6, 9, 10, 11) причем 9-11 заняты радиомодулем
ну да иладно - не все порты нам нужны с димерами
в конце концом можно выставить 3 димируемых вывода и 4 просто включение выключение
например так
PS% Зато в MEGA портов ШИМ целых 15 шт
Пробуем и комментируем PSS: И еще в дополнение, по работе я часто сталкиваюсь с PWM димированием. И мы часто используем PWM усилители производства SunRich
в частности 4х канальные на 5 Ампер и на 8 Ампер, Усилители поддерживают работу с диодами на 12/24/36 вольт, что очень удобно при выборе ленты
В результате я ставлю на каждый управляющий вывод ардуины по оптопаре PC817 (по 2 руб аз шт) и управляю таким 4х канальным усилителем
Например 8 ампер на 24в это 192 вата на канал - аж 30 метров ленты 4.8 вата на канал (или 120 метров одноцветной на 4х канала) при учете 25% запаса прочности
на этот раз ШИМ димер
В оригинальном, одноканальном, скетче написано "This sketch is extensible to support more than one MOSFET/PWM dimmer per circuit."
На мой взгляд скалирование (увеличение каналов) в нем производится не очень удобно
Вот и дописал его дополнив структурой каналов
Код: Выделить всё
// Структура сенсоров
typedef struct {
int ledPin; // PWM Порт
int currLvl; // текущий уровень
MyMessage dimmerMsg;
MyMessage lightMsg;
} dSensor;
dSensor registers[3] = {
{3, 0, {0, V_DIMMER}, {0, V_LIGHT}},
{5, 0, {1, V_DIMMER}, {1, V_LIGHT}},
{6, 0, {2, V_DIMMER}, {2, V_LIGHT}},
};
Единственное ограничение - эти самые ШИМ порты
у ATMEGA 328 их всего 6 (3, 5, 6, 9, 10, 11) причем 9-11 заняты радиомодулем
ну да иладно - не все порты нам нужны с димерами
в конце концом можно выставить 3 димируемых вывода и 4 просто включение выключение
например так
Код: Выделить всё
dSensor registers[7] = {
{3, 0, {0, V_DIMMER}, {0, V_LIGHT}}, // PWM
{5, 0, {1, V_DIMMER}, {1, V_LIGHT}}, // PWM
{6, 0, {2, V_DIMMER}, {2, V_LIGHT}}, // PWM
{2, 0, {3, V_DIMMER}, {3, V_LIGHT}}, // on/off
{4, 0, {4, V_DIMMER}, {4, V_LIGHT}}, // on/off
{7, 0, {5, V_DIMMER}, {5, V_LIGHT}}, // on/off
{8, 0, {6, V_DIMMER}, {6, V_LIGHT}}, // on/off
};
Пробуем и комментируем PSS: И еще в дополнение, по работе я часто сталкиваюсь с PWM димированием. И мы часто используем PWM усилители производства SunRich
в частности 4х канальные на 5 Ампер и на 8 Ампер, Усилители поддерживают работу с диодами на 12/24/36 вольт, что очень удобно при выборе ленты
В результате я ставлю на каждый управляющий вывод ардуины по оптопаре PC817 (по 2 руб аз шт) и управляю таким 4х канальным усилителем
Например 8 ампер на 24в это 192 вата на канал - аж 30 метров ленты 4.8 вата на канал (или 120 метров одноцветной на 4х канала) при учете 25% запаса прочности
- За это сообщение автора Sandr поблагодарил:
- NightRider (Ср май 04, 2016 12:02 am)
- Рейтинг: 1.16%
Win Home Serv 2011 / Intel Core i3 / 32 GB ram /
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
- Sandr
- Сообщения: 126
- Зарегистрирован: Пн ноя 16, 2015 5:10 pm
- Благодарил (а): 19 раз
- Поблагодарили: 29 раз
Re: Оптимизация объема данных от датчиков
Небольшое дополнение к ШИМ димеру
Для тех кому нужны еще пара димируемых ШИМ каналов на одной atmega328
в файле /libraries/MySensors/MyConfig.h
меняем порты CSN/CE с 9/10 на 7/8
и переключаем NRF на эти два пина
тем самым освобождая 9 и 10 PWM пины ,)
В результате у нас 5 димируемых каналов на одной AtMega328
*** Сообщение запрещено. Сообщение похоже на спам. ***
Для тех кому нужны еще пара димируемых ШИМ каналов на одной atmega328
в файле /libraries/MySensors/MyConfig.h
меняем порты CSN/CE с 9/10 на 7/8
Код: Выделить всё
/**********************************
* NRF24L01 Driver Defaults
***********************************/
#define RF24_CE_PIN 7
#define RF24_CS_PIN 8
тем самым освобождая 9 и 10 PWM пины ,)
В результате у нас 5 димируемых каналов на одной AtMega328
*** Сообщение запрещено. Сообщение похоже на спам. ***
- Рейтинг: 1.16%
Win Home Serv 2011 / Intel Core i3 / 32 GB ram /
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
-
- Сообщения: 1473
- Зарегистрирован: Сб окт 12, 2013 11:03 pm
- Благодарил (а): 49 раз
- Поблагодарили: 327 раз
Re: Оптимизация объема данных от датчиков
Учтите что скетчи на MySensors демонстрационные, а не законченные
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4