Arduino UNO R3 + MR3020 + Сервер MajorDoMo
Модератор: immortal
- savenko_egor
- Сообщения: 705
- Зарегистрирован: Вс авг 03, 2014 8:17 pm
- Откуда: Украина, Запорожье
- Благодарил (а): 108 раз
- Поблагодарили: 147 раз
- Контактная информация:
Arduino UNO R3 + MR3020 + Сервер MajorDoMo
Полопатив 2 дня форум, сайт и различные примеры, я понял что я олень. Хоть я и соображаю в IT и технике, это мне не как не помогло.
Пришел просить Вашей помощи и объяснений что да как.
Пожалуйста, расскажите, хотя бы для начала, как можно добавить кнопку в MajorDoMo, для того чтоб она подала 1 на какой нибудь digital пин Arduino(Без Ethernet Shield). Учитывая что Arduino подключена к USB роутера TP-Link TL-MR3020(OpenWRT).
Роутер, вроде как, настроен. То есть если я залью в Arduino скетч: http://smartliving.ru/Main/ArduinoCodeNoEthernet После этого на роутере в командной строке введу: cat /dev/ttyACM0 - то я вижу вывод команд.
Что я делаю не так? И как мне быть?
Спасибо!
Пришел просить Вашей помощи и объяснений что да как.
Пожалуйста, расскажите, хотя бы для начала, как можно добавить кнопку в MajorDoMo, для того чтоб она подала 1 на какой нибудь digital пин Arduino(Без Ethernet Shield). Учитывая что Arduino подключена к USB роутера TP-Link TL-MR3020(OpenWRT).
Роутер, вроде как, настроен. То есть если я залью в Arduino скетч: http://smartliving.ru/Main/ArduinoCodeNoEthernet После этого на роутере в командной строке введу: cat /dev/ttyACM0 - то я вижу вывод команд.
Что я делаю не так? И как мне быть?
Спасибо!
Последний раз редактировалось savenko_egor Чт май 26, 2016 2:22 am, всего редактировалось 1 раз.
-
- Сообщения: 117
- Зарегистрирован: Сб апр 26, 2014 5:06 pm
- Откуда: Новосибирск
- Благодарил (а): 21 раз
- Поблагодарили: 11 раз
Re: Arduino UNO R3 + MR3020 + Сервер MajorDoMo
Привет возможно сделать так считывание с андруно происходит при помоши монитора порта
Программа ArduinoGW программа есть в мажоре по умолчанию только надо запустить и указать порт и скорость . заливаешь скетч http://smartliving.ru/Main/ArduinoCodeNoEthernet
исходя из него вызов функции из мажора выглядит примерно так
sprintf(buf, "GET /objects/?object=remoteButton1&op=m&m=statusChanged&status=%i HTTP/1.0", 2);
sprintf(buf, "GET /objects/?object=remoteButton1&op=m&m=statusChanged&status=%i HTTP/1.0", 1);
запускаешь программу ArduinoGW
создаешь класс keySensors
свойсва
TimeOut - время с момента прошлого обновления, через которое датчик считается "неживым"
alive - статус того, что датчик работает нормально
statusText - текстовое отображение статуса
updatedTimestamp - время последнего обновления
status - положение датчика (включен/выключен)
Методы класса statusChanged с кодом
$this->setProperty('status',$params['status']);
$this->setProperty('updatedTimestamp',time());
$this->setProperty("alive",1);
$ot=$this->object_title;
$alive_timeout=(int)$this->getProperty("aliveTimeOut");
if (!$alive_timeout) {
$alive_timeout=12*60*60;
}
clearTimeOut($ot."_alive");
setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout
ну и соотвественно обьект который у нас прописан в скетче
remoteButton1
Программа ArduinoGW программа есть в мажоре по умолчанию только надо запустить и указать порт и скорость . заливаешь скетч http://smartliving.ru/Main/ArduinoCodeNoEthernet
исходя из него вызов функции из мажора выглядит примерно так
sprintf(buf, "GET /objects/?object=remoteButton1&op=m&m=statusChanged&status=%i HTTP/1.0", 2);
sprintf(buf, "GET /objects/?object=remoteButton1&op=m&m=statusChanged&status=%i HTTP/1.0", 1);
запускаешь программу ArduinoGW
создаешь класс keySensors
свойсва
TimeOut - время с момента прошлого обновления, через которое датчик считается "неживым"
alive - статус того, что датчик работает нормально
statusText - текстовое отображение статуса
updatedTimestamp - время последнего обновления
status - положение датчика (включен/выключен)
Методы класса statusChanged с кодом
$this->setProperty('status',$params['status']);
$this->setProperty('updatedTimestamp',time());
$this->setProperty("alive",1);
$ot=$this->object_title;
$alive_timeout=(int)$this->getProperty("aliveTimeOut");
if (!$alive_timeout) {
$alive_timeout=12*60*60;
}
clearTimeOut($ot."_alive");
setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout
ну и соотвественно обьект который у нас прописан в скетче
remoteButton1
- Ubuntu Server .Esp8266)
- savenko_egor
- Сообщения: 705
- Зарегистрирован: Вс авг 03, 2014 8:17 pm
- Откуда: Украина, Запорожье
- Благодарил (а): 108 раз
- Поблагодарили: 147 раз
- Контактная информация:
Re: Arduino UNO R3 + MR3020 + Сервер MajorDoMo
Прошу прощения, забыл уточнить что MajorDoMo установлена на Debian.sregeipt писал(а):Привет возможно сделать так считывание с андруно происходит при помоши монитора порта
Программа ArduinoGW программа есть в мажоре по умолчанию только надо запустить и указать порт и скорость . заливаешь скетч http://smartliving.ru/Main/ArduinoCodeNoEthernet
исходя из него вызов функции из мажора выглядит примерно так
sprintf(buf, "GET /objects/?object=remoteButton1&op=m&m=statusChanged&status=%i HTTP/1.0", 2);
sprintf(buf, "GET /objects/?object=remoteButton1&op=m&m=statusChanged&status=%i HTTP/1.0", 1);
запускаешь программу ArduinoGW
создаешь класс keySensors
свойсва
TimeOut - время с момента прошлого обновления, через которое датчик считается "неживым"
alive - статус того, что датчик работает нормально
statusText - текстовое отображение статуса
updatedTimestamp - время последнего обновления
status - положение датчика (включен/выключен)
Методы класса statusChanged с кодом
$this->setProperty('status',$params['status']);
$this->setProperty('updatedTimestamp',time());
$this->setProperty("alive",1);
$ot=$this->object_title;
$alive_timeout=(int)$this->getProperty("aliveTimeOut");
if (!$alive_timeout) {
$alive_timeout=12*60*60;
}
clearTimeOut($ot."_alive");
setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout
ну и соотвественно обьект который у нас прописан в скетче
remoteButton1
- sergejey
- Site Admin
- Сообщения: 4286
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 76 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Arduino UNO R3 + MR3020 + Сервер MajorDoMo
Если Arduino подключено к TPLink-у, то я бы изучил вот эту ветку: http://smartliving.ru/Main/LinuxMiniHub
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
- savenko_egor
- Сообщения: 705
- Зарегистрирован: Вс авг 03, 2014 8:17 pm
- Откуда: Украина, Запорожье
- Благодарил (а): 108 раз
- Поблагодарили: 147 раз
- Контактная информация:
Re: Arduino UNO R3 + MR3020 + Сервер MajorDoMo
Понял. Спасибо. Буду пробовать ещё раз, но внимательнее. Может где-то ошибки какие допустил.sergejey писал(а):Если Arduino подключено к TPLink-у, то я бы изучил вот эту ветку: http://smartliving.ru/Main/LinuxMiniHub
Кстати... Пользуясь случаем, очень бы хотел поблагодарить Вас за данную систему! И за поддержку. И за то что она не коммерческая. И за подробное описание всего что есть.
Да и вообще, просто спасибо Вам!

- savenko_egor
- Сообщения: 705
- Зарегистрирован: Вс авг 03, 2014 8:17 pm
- Откуда: Украина, Запорожье
- Благодарил (а): 108 раз
- Поблагодарили: 147 раз
- Контактная информация:
Re: Arduino UNO R3 + MR3020 + Сервер MajorDoMo
К Arduino сейчас подключен датчик DHT11 и залит скетч:
То есть если я все правильно понимаю, переменной h присваевается значение dht.readHumidity();
А переменной t значение dht.readTemperature();
При подключении Arduino к роутеру, видно что Arduino шлёт данные. По идее, мониторинг на роутере работает. Так же при выполнении, на роутере, команды: cat /dev/ttyACM0 вижу данные вида:
Пытаюсь получить значение переменной способом HTTP-API: http://адрес_устройства/cgi-bin/master?op=get&var=h
Но получаю чистую страницу.
Подскажите, пожалуйста, в чём моя ошибка?
Код: Выделить всё
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
#include "DHT.h"
#define DHTPIN 2 // what pin we're connected to
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin();
}
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
float t = dht.readTemperature();
// check if returns are valid, if they are NaN (not a number) then something went wrong!
if (isnan(t) || isnan(h)) {
Serial.println("Failed to read from DHT");
} else {
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
}
}
А переменной t значение dht.readTemperature();
При подключении Arduino к роутеру, видно что Arduino шлёт данные. По идее, мониторинг на роутере работает. Так же при выполнении, на роутере, команды: cat /dev/ttyACM0 вижу данные вида:
Подключил ClouSync и Connect.Humidity: 44.00 % Temperature: 32.00 *C
Пытаюсь получить значение переменной способом HTTP-API: http://адрес_устройства/cgi-bin/master?op=get&var=h
Но получаю чистую страницу.
Подскажите, пожалуйста, в чём моя ошибка?
- sergejey
- Site Admin
- Сообщения: 4286
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 76 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Arduino UNO R3 + MR3020 + Сервер MajorDoMo
Не совсем так. То, что присваивается внутри скетча Arduino там и остаётся. Для того, чтобы присвоить значение какой-то переменной на роутере, нужно написать правило, которое будет обрабатывать строку информации от Arduino, вычленять из этой строки полезную информацию и присваивать её какой-то переменной.warik писал(а):То есть если я все правильно понимаю, переменной h присваевается значение dht.readHumidity();
А переменной t значение dht.readTemperature();
При подключении Arduino к роутеру, видно что Arduino шлёт данные. По идее, мониторинг на роутере работает. Так же при выполнении, на роутере, команды: cat /dev/ttyACM0 вижу данные вида:Подключил ClouSync и Connect.Humidity: 44.00 % Temperature: 32.00 *C
Пытаюсь получить значение переменной способом HTTP-API: http://адрес_устройства/cgi-bin/master?op=get&var=h
Но получаю чистую страницу.
Подскажите, пожалуйста, в чём моя ошибка?
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
- savenko_egor
- Сообщения: 705
- Зарегистрирован: Вс авг 03, 2014 8:17 pm
- Откуда: Украина, Запорожье
- Благодарил (а): 108 раз
- Поблагодарили: 147 раз
- Контактная информация:
Re: Arduino UNO R3 + MR3020 + Сервер MajorDoMo
Если не трудно, можно ли увидеть пример банального правила которое бы вытаскивало данные из Arduino, например из моей строки:
А на основе примерчика, я бы уже смог самостоятельно его модифицировать под свои нужды.
Прошу прощения. Что-то много со мной проблем. Не знаю почему, но такое впервые, когда я читаю-читаю и ничего не могу сообразить.
UPD:
Все начало связываться в единую цепочку, и я начал понемногу разбираться. По странице: Контроллер беспроводных датчиков
Проблема была в том, что я путал Сценарии с Объектами и не мог понять откуда берутся переменные\параметры: did, dest, pid, c и d.
Теперь, в принципе, всё понятно.
То есть строка из правила:
То есть если мне необходимо забрать свои данные с Arduino, я могу воспользоватся этим же правилом и Вашим же Сценарием, просто переделав его немного под себя.
Ещё немного уточнений.
1. "Получена команда" - Команда получена из Arduino или же от нашего сервера? - Если я все правильно, по правилам, понял. Команда идёт от Arduino.
2. "Получена строка" - Строка от Arduino? Тогда разница между строкой и командой?
3. "Активное действие" - UPD: Если я все правильно понял, это просто действие которое можно вызвать при запросе на роутер. То есть так: http://адрес_устройства/cgi-bin/master?op=action&line=SomeAction
UPD: Я так понимаю, все эти вопросы глупы. Из-за того что это все используется для HTTP-API. То есть:
Только вот пара-тройка вопросов.
1. "SomeCommand" в HTTP запросе - это "Код команды" в правилах?
2. Я же могу вместо Сценария(?script), выбрать Объект(?object) которому будут присваиваться значения?
3. Можно описать "Совпадение по шаблону:" в правилах? Я так понимаю там синтаксис такой же как и у "Веб-переменные", верно?
Было бы очень удобно, если бы работа с Arduino(без Ethernet) была основана на модуле в самой MDM, как ModBus, 1-Wire и прочее. - Мечта для упрощения использования, конечным потребителем.
И под конец немного оффтопа.
ИМХО конечно, но всё же. Может не я один такой.
На форуме не хватает некоторых BBкодов. Например: [offtop] и [spoiler] - по ссылкам есть решения как можно добавить данные BBкоды в phpBB.
Под [spoiler] - можно было бы скрывать исходные коды(скетчи) или картинки, для того чтоб не занимали место. Ну и плюс у нас в Украине, к сожалению, всё ещё 2G и довольно таки дорого. Хотелось бы какого-то удобства при просмотре форума с мобильного устройства.
Ну а под [offtop] можно было бы ставить все то, что я написал выше.
Мол типа, совсем к теме не относится, но написать хочется 
Спасибо!
Честно... Я просто запутался уже в этом всём и не могу сложить все до кучи.Humidity: 44.00 % Temperature: 32.00 *C
А на основе примерчика, я бы уже смог самостоятельно его модифицировать под свои нужды.
Прошу прощения. Что-то много со мной проблем. Не знаю почему, но такое впервые, когда я читаю-читаю и ничего не могу сообразить.

UPD:
Все начало связываться в единую цепочку, и я начал понемногу разбираться. По странице: Контроллер беспроводных датчиков
Проблема была в том, что я путал Сценарии с Объектами и не мог понять откуда берутся переменные\параметры: did, dest, pid, c и d.
Теперь, в принципе, всё понятно.
То есть строка из правила:
Делает запрос на сервер, где у нас крутиться MDM, который в свою очередь отрабатывает Сценарий "easyRF" с параметрами которые и были посланы этой строкой.
То есть если мне необходимо забрать свои данные с Arduino, я могу воспользоватся этим же правилом и Вашим же Сценарием, просто переделав его немного под себя.
Ещё немного уточнений.
1. "Получена команда" - Команда получена из Arduino или же от нашего сервера? - Если я все правильно, по правилам, понял. Команда идёт от Arduino.
2. "Получена строка" - Строка от Arduino? Тогда разница между строкой и командой?
3. "Активное действие" - UPD: Если я все правильно понял, это просто действие которое можно вызвать при запросе на роутер. То есть так: http://адрес_устройства/cgi-bin/master?op=action&line=SomeAction
UPD: Я так понимаю, все эти вопросы глупы. Из-за того что это все используется для HTTP-API. То есть:
То есть тут идёт круговорот... MDM посылает запрос на роутер, роутер выполняет необходимую команду(согласно правил) и отправляет данные обратно, а MDM обрабатывает эти данные и выводит их куда необходимо."Получена команда" = http://адрес_устройства/cgi-bin/master?op=run&line=SomeCommand
"Получена строка" = http://адрес_устройства/cgi-bin/master?op=send&line=SomeData
"Активное действие" = http://адрес_устройства/cgi-bin/master?op=action&line=SomeAction
Только вот пара-тройка вопросов.
1. "SomeCommand" в HTTP запросе - это "Код команды" в правилах?
2. Я же могу вместо Сценария(?script), выбрать Объект(?object) которому будут присваиваться значения?
3. Можно описать "Совпадение по шаблону:" в правилах? Я так понимаю там синтаксис такой же как и у "Веб-переменные", верно?
Было бы очень удобно, если бы работа с Arduino(без Ethernet) была основана на модуле в самой MDM, как ModBus, 1-Wire и прочее. - Мечта для упрощения использования, конечным потребителем.

И под конец немного оффтопа.
ИМХО конечно, но всё же. Может не я один такой.
На форуме не хватает некоторых BBкодов. Например: [offtop] и [spoiler] - по ссылкам есть решения как можно добавить данные BBкоды в phpBB.
Под [spoiler] - можно было бы скрывать исходные коды(скетчи) или картинки, для того чтоб не занимали место. Ну и плюс у нас в Украине, к сожалению, всё ещё 2G и довольно таки дорого. Хотелось бы какого-то удобства при просмотре форума с мобильного устройства.
Ну а под [offtop] можно было бы ставить все то, что я написал выше.


Спасибо!
- sergejey
- Site Admin
- Сообщения: 4286
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 76 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Arduino UNO R3 + MR3020 + Сервер MajorDoMo
В целом, да. Только это не единственный вариант использования. Я имею в виду, что проект MDM и проект универсального узла автоматики на базе роутера это не часть одного и того же, а независимые проекты, которые, тем не менее, могут работать совместно. Узел автоматики может работать сам по себе и без MDM через систему правил, он автономен. Но связка с MDM даёт дополнительные преимущества.warik писал(а):То есть тут идёт круговорот... MDM посылает запрос на роутер, роутер выполняет необходимую команду(согласно правил) и отправляет данные обратно, а MDM обрабатывает эти данные и выводит их куда необходимо.
Это системное имя команды. Оно задётся при создании правила типа action и если не задано, то генерируется автоматически типа "actionNN".warik писал(а):Только вот пара-тройка вопросов.
1. "SomeCommand" в HTTP запросе - это "Код команды" в правилах?
Да. На этой странице описано несколько вариантов взаимодействия через HTTP-запросыwarik писал(а):2. Я же могу вместо Сценария(?script), выбрать Объект(?object) которому будут присваиваться значения?
Почти, но не совсем. И там и там используются "регулярные выражения", но в случае веб-переменных они обрабатываются языком PHP, а в случае узла автоматики -- интерпретатором Bash. Базовые вещи и там и там реализованы приблизительно одинаково, но есть нюансы.warik писал(а):3. Можно описать "Совпадение по шаблону:" в правилах? Я так понимаю там синтаксис такой же как и у "Веб-переменные", верно?
В принципе, такое возможно... но есть столько способов наладить связь между системой и Arduino, что задача сама собой становится не приоритетнойwarik писал(а): Было бы очень удобно, если бы работа с Arduino(без Ethernet) была основана на модуле в самой MDM, как ModBus, 1-Wire и прочее. - Мечта для упрощения использования, конечным потребителем.![]()
!

И под конец немного оффтопа.
ИМХО конечно, но всё же. Может не я один такой.
На форуме не хватает некоторых BBкодов. Например: [offtop] и [spoiler] - по ссылкам есть решения как можно добавить данные BBкоды в phpBB.
Под [spoiler] - можно было бы скрывать исходные коды(скетчи) или картинки, для того чтоб не занимали место. Ну и плюс у нас в Украине, к сожалению, всё ещё 2G и довольно таки дорого. Хотелось бы какого-то удобства при просмотре форума с мобильного устройства.
Ну а под [offtop] можно было бы ставить все то, что я написал выше.


Спасибо![/quote]
Спасибо за рекомендации, добавлю в копилку задач

- За это сообщение автора sergejey поблагодарили (всего 2):
- savenko_egor (Ср авг 13, 2014 10:34 am) • shemnik69 (Ср авг 13, 2014 10:38 am)
- Рейтинг: 2.33%
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
- savenko_egor
- Сообщения: 705
- Зарегистрирован: Вс авг 03, 2014 8:17 pm
- Откуда: Украина, Запорожье
- Благодарил (а): 108 раз
- Поблагодарили: 147 раз
- Контактная информация:
Re: Arduino UNO R3 + MR3020 + Сервер MajorDoMo
Я создаю правило "Получена строка". "Совпадение по шаблону" выставляю как: "Humidity:", то есть то, что у меня есть в строке.sergejey писал(а):Не совсем так. То, что присваивается внутри скетча Arduino там и остаётся. Для того, чтобы присвоить значение какой-то переменной на роутере, нужно написать правило, которое будет обрабатывать строку информации от Arduino, вычленять из этой строки полезную информацию и присваивать её какой-то переменной.
Пример строки:
Ставлю HTTP запрос на сервер MDM. Правило выполняется, запрос идёт.Humidity: 44.00 % Temperature: 32.00 *C
Не могу понять. Как я могу вычленить необходимые мне данные, то есть "44.00" и "32.00", и присвоить их переменным.
Подскажите, пожалуйста, как это сделать.
Спасибо!