Arduino UNO R3 + MR3020 + Сервер MajorDoMo

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Аватара пользователя
savenko_egor
Сообщения: 705
Зарегистрирован: Вс авг 03, 2014 8:17 pm
Откуда: Украина, Запорожье
Благодарил (а): 108 раз
Поблагодарили: 147 раз
Контактная информация:

Arduino UNO R3 + MR3020 + Сервер MajorDoMo

Сообщение savenko_egor » Вс авг 10, 2014 11:38 pm

Полопатив 2 дня форум, сайт и различные примеры, я понял что я олень. Хоть я и соображаю в IT и технике, это мне не как не помогло.

Пришел просить Вашей помощи и объяснений что да как.
Пожалуйста, расскажите, хотя бы для начала, как можно добавить кнопку в 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 раз.
sregeipt
Сообщения: 117
Зарегистрирован: Сб апр 26, 2014 5:06 pm
Откуда: Новосибирск
Благодарил (а): 21 раз
Поблагодарили: 11 раз

Re: Arduino UNO R3 + MR3020 + Сервер MajorDoMo

Сообщение sregeipt » Пн авг 11, 2014 5:08 am

Привет возможно сделать так считывание с андруно происходит при помоши монитора порта
Программа 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

Сообщение savenko_egor » Пн авг 11, 2014 9:44 am

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
Прошу прощения, забыл уточнить что MajorDoMo установлена на Debian.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Arduino UNO R3 + MR3020 + Сервер MajorDoMo

Сообщение sergejey » Пн авг 11, 2014 10:20 am

Если 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

Сообщение savenko_egor » Пн авг 11, 2014 10:41 am

sergejey писал(а):Если Arduino подключено к TPLink-у, то я бы изучил вот эту ветку: http://smartliving.ru/Main/LinuxMiniHub
Понял. Спасибо. Буду пробовать ещё раз, но внимательнее. Может где-то ошибки какие допустил.

Кстати... Пользуясь случаем, очень бы хотел поблагодарить Вас за данную систему! И за поддержку. И за то что она не коммерческая. И за подробное описание всего что есть.
Да и вообще, просто спасибо Вам! ;)
Аватара пользователя
savenko_egor
Сообщения: 705
Зарегистрирован: Вс авг 03, 2014 8:17 pm
Откуда: Украина, Запорожье
Благодарил (а): 108 раз
Поблагодарили: 147 раз
Контактная информация:

Re: Arduino UNO R3 + MR3020 + Сервер MajorDoMo

Сообщение savenko_egor » Вт авг 12, 2014 12:40 am

К Arduino сейчас подключен датчик DHT11 и залит скетч:

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

// 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");
  }
}
То есть если я все правильно понимаю, переменной h присваевается значение dht.readHumidity();
А переменной t значение dht.readTemperature();
При подключении Arduino к роутеру, видно что Arduino шлёт данные. По идее, мониторинг на роутере работает. Так же при выполнении, на роутере, команды: cat /dev/ttyACM0 вижу данные вида:
Humidity: 44.00 % Temperature: 32.00 *C
Подключил ClouSync и Connect.
Пытаюсь получить значение переменной способом 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

Сообщение sergejey » Вт авг 12, 2014 12:02 pm

warik писал(а):То есть если я все правильно понимаю, переменной h присваевается значение dht.readHumidity();
А переменной t значение dht.readTemperature();
При подключении Arduino к роутеру, видно что Arduino шлёт данные. По идее, мониторинг на роутере работает. Так же при выполнении, на роутере, команды: cat /dev/ttyACM0 вижу данные вида:
Humidity: 44.00 % Temperature: 32.00 *C
Подключил ClouSync и Connect.
Пытаюсь получить значение переменной способом HTTP-API: http://адрес_устройства/cgi-bin/master?op=get&var=h
Но получаю чистую страницу.
Подскажите, пожалуйста, в чём моя ошибка?
Не совсем так. То, что присваивается внутри скетча Arduino там и остаётся. Для того, чтобы присвоить значение какой-то переменной на роутере, нужно написать правило, которое будет обрабатывать строку информации от Arduino, вычленять из этой строки полезную информацию и присваивать её какой-то переменной.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
savenko_egor
Сообщения: 705
Зарегистрирован: Вс авг 03, 2014 8:17 pm
Откуда: Украина, Запорожье
Благодарил (а): 108 раз
Поблагодарили: 147 раз
Контактная информация:

Re: Arduino UNO R3 + MR3020 + Сервер MajorDoMo

Сообщение savenko_egor » Ср авг 13, 2014 12:03 am

Если не трудно, можно ли увидеть пример банального правила которое бы вытаскивало данные из Arduino, например из моей строки:
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. То есть:
"Получена команда" = http://адрес_устройства/cgi-bin/master?op=run&line=SomeCommand
"Получена строка" = http://адрес_устройства/cgi-bin/master?op=send&line=SomeData
"Активное действие" = http://адрес_устройства/cgi-bin/master?op=action&line=SomeAction
То есть тут идёт круговорот... MDM посылает запрос на роутер, роутер выполняет необходимую команду(согласно правил) и отправляет данные обратно, а MDM обрабатывает эти данные и выводит их куда необходимо.

Только вот пара-тройка вопросов.
1. "SomeCommand" в HTTP запросе - это "Код команды" в правилах?
2. Я же могу вместо Сценария(?script), выбрать Объект(?object) которому будут присваиваться значения?
3. Можно описать "Совпадение по шаблону:" в правилах? Я так понимаю там синтаксис такой же как и у "Веб-переменные", верно?

Было бы очень удобно, если бы работа с Arduino(без Ethernet) была основана на модуле в самой MDM, как ModBus, 1-Wire и прочее. - Мечта для упрощения использования, конечным потребителем. :)

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

Спасибо!
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Arduino UNO R3 + MR3020 + Сервер MajorDoMo

Сообщение sergejey » Ср авг 13, 2014 10:26 am

warik писал(а):То есть тут идёт круговорот... MDM посылает запрос на роутер, роутер выполняет необходимую команду(согласно правил) и отправляет данные обратно, а MDM обрабатывает эти данные и выводит их куда необходимо.
В целом, да. Только это не единственный вариант использования. Я имею в виду, что проект MDM и проект универсального узла автоматики на базе роутера это не часть одного и того же, а независимые проекты, которые, тем не менее, могут работать совместно. Узел автоматики может работать сам по себе и без MDM через систему правил, он автономен. Но связка с MDM даёт дополнительные преимущества.
warik писал(а):Только вот пара-тройка вопросов.
1. "SomeCommand" в HTTP запросе - это "Код команды" в правилах?
Это системное имя команды. Оно задётся при создании правила типа action и если не задано, то генерируется автоматически типа "actionNN".
warik писал(а):2. Я же могу вместо Сценария(?script), выбрать Объект(?object) которому будут присваиваться значения?
Да. На этой странице описано несколько вариантов взаимодействия через HTTP-запросы
warik писал(а):3. Можно описать "Совпадение по шаблону:" в правилах? Я так понимаю там синтаксис такой же как и у "Веб-переменные", верно?
Почти, но не совсем. И там и там используются "регулярные выражения", но в случае веб-переменных они обрабатываются языком PHP, а в случае узла автоматики -- интерпретатором Bash. Базовые вещи и там и там реализованы приблизительно одинаково, но есть нюансы.
warik писал(а): Было бы очень удобно, если бы работа с Arduino(без Ethernet) была основана на модуле в самой MDM, как ModBus, 1-Wire и прочее. - Мечта для упрощения использования, конечным потребителем. :)
!
В принципе, такое возможно... но есть столько способов наладить связь между системой и Arduino, что задача сама собой становится не приоритетной :) Есть и ArduinoGW (для Windows), и bash-скрипт для линукс, и работа через ethernet-shield, и работа через роутер на openwrt...

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

Сообщение savenko_egor » Чт авг 14, 2014 6:10 pm

sergejey писал(а):Не совсем так. То, что присваивается внутри скетча Arduino там и остаётся. Для того, чтобы присвоить значение какой-то переменной на роутере, нужно написать правило, которое будет обрабатывать строку информации от Arduino, вычленять из этой строки полезную информацию и присваивать её какой-то переменной.
Я создаю правило "Получена строка". "Совпадение по шаблону" выставляю как: "Humidity:", то есть то, что у меня есть в строке.
Пример строки:
Humidity: 44.00 % Temperature: 32.00 *C
Ставлю HTTP запрос на сервер MDM. Правило выполняется, запрос идёт.
Не могу понять. Как я могу вычленить необходимые мне данные, то есть "44.00" и "32.00", и присвоить их переменным.
Подскажите, пожалуйста, как это сделать.

Спасибо!
Ответить