Вопрос новичка по чтению сенсоров
Модератор: immortal
Вопрос новичка по чтению сенсоров
Добрый день!
Вот, обнаружил этот интересный проект, но не очень понимаю как мне проинтегрировать мою существующую систему.
Конкретно есть ардуино контроллер к которому подключенны датчики температуры, давления, влажности. Плюс он управляет электрооборудованием аквариума. Может репортить текущее состояние по простым командам в ком порт. Но, пробросить ком порт в сокет не проблема через tinkerproxy, объекты как описанно в http://smartliving.ru/Main/ScMonitorHeating я создал, а как собственно сделать регулярный опрос датчиков?
Прошу прощения если вопрос глупый, мне бы пример...
Вот, обнаружил этот интересный проект, но не очень понимаю как мне проинтегрировать мою существующую систему.
Конкретно есть ардуино контроллер к которому подключенны датчики температуры, давления, влажности. Плюс он управляет электрооборудованием аквариума. Может репортить текущее состояние по простым командам в ком порт. Но, пробросить ком порт в сокет не проблема через tinkerproxy, объекты как описанно в http://smartliving.ru/Main/ScMonitorHeating я создал, а как собственно сделать регулярный опрос датчиков?
Прошу прощения если вопрос глупый, мне бы пример...
Re: Вопрос новичка по чтению сенсоров
На примере этого сценария можно сделать опрос всех Ваших датчиков. http://smartliving.ru/Main/ScMonitorHeating
Также будет полезным раздел сценариев на сайте проэкта.
Также будет полезным раздел сценариев на сайте проэкта.
Re: Вопрос новичка по чтению сенсоров
Я эту страницу уже со всех сторон пересмотрел, но так и не понял, где, собственно, происходит опрос датчиков.
Потому и спрашиваю.
Потому и спрашиваю.
Re: Вопрос новичка по чтению сенсоров
Варианта 2:
1) ардуино сам говорит системе состояние датчиков после опроса путем отправки запроса на веб сервер Майордомо:
GET /objects/?object=sensorZal&op=m&m=tempChanged&t=%0d.%d;
2) если используется ардуино в роли сервера - тогда можно через веб-переменные считывать состояние.
По первому варианту код можно посмотреть здесь: https://github.com/sochkasov/majordomo- ... roller.ino
По второму: https://github.com/sochkasov/majordomo- ... Server.ino
но я еще не понял как с помощью веб переменных витягивать нужную мне информацию по датчикам, сам спрашиваю у знатоков: http://smartliving.ru/forum/viewtopic.php?f=4&t=78
Ястно только одно, что в коде нужно добавить две строки
1) ардуино сам говорит системе состояние датчиков после опроса путем отправки запроса на веб сервер Майордомо:
GET /objects/?object=sensorZal&op=m&m=tempChanged&t=%0d.%d;
2) если используется ардуино в роли сервера - тогда можно через веб-переменные считывать состояние.
По первому варианту код можно посмотреть здесь: https://github.com/sochkasov/majordomo- ... roller.ino
По второму: https://github.com/sochkasov/majordomo- ... Server.ino
но я еще не понял как с помощью веб переменных витягивать нужную мне информацию по датчикам, сам спрашиваю у знатоков: http://smartliving.ru/forum/viewtopic.php?f=4&t=78
Ястно только одно, что в коде нужно добавить две строки
Код: Выделить всё
void loop() {
char buff[64];
int len = 64;
webserver.processConnection(buff, &len); // process incoming connections one at a time forever
sensors.requestTemperatures();
delay(1000);
}
Re: Вопрос новичка по чтению сенсоров
К сожалению, оба метода мне не подходят - у моего ардуино нет веб-интерфейса и уже практически нет места во флеше чтобы его добавить. только простые команды по serial/socket
- sergejey
- Site Admin
- Сообщения: 4286
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 76 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Вопрос новичка по чтению сенсоров
Если arduino подключен напрямую к компьютеру, то можно без веб-интерфейса и ethernet-шилда передавать данные в систему напрямую с помощью программы ArduinoGW: http://smartliving.ru/Main/ArduinoDirect
Просто Arduino должна сообщать о том, что изменилась температура строчкой такого плана:
GET /objects/?object=sensorZal&op=m&m=tempChanged&t=25.2
Программа ArduinoGW считает эту строчку и перешлёт запрос на MajorDoMo
Просто Arduino должна сообщать о том, что изменилась температура строчкой такого плана:
GET /objects/?object=sensorZal&op=m&m=tempChanged&t=25.2
Программа ArduinoGW считает эту строчку и перешлёт запрос на MajorDoMo
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Re: Вопрос новичка по чтению сенсоров
Спасибо, но не подходит, я уже думал об этом.
Во первых, формат обмена с ардуино уже существует, используется в моих существующих программах и переделывать его некуда - там байт 40 свободных осталось во внутреннем флеше.
Во вторых - мне нужен поллинг, а не event-driving - собственно управлением исполнительными устройствами занимается ардуино, а не центральный сервер - так, с моей точки зрения, надежнее в плане отказов. Отказ управления нагревателем в аквариуме будет иметь весьма печальные последствия.
А можно как-то по таймеру периодически вызывать код? Мне, собственно, нужно запихнуть несколько простых команд в ком порт или tcp socket, прочитать ответ и распарсить, и обновить переменные в объектах.
Во первых, формат обмена с ардуино уже существует, используется в моих существующих программах и переделывать его некуда - там байт 40 свободных осталось во внутреннем флеше.
Во вторых - мне нужен поллинг, а не event-driving - собственно управлением исполнительными устройствами занимается ардуино, а не центральный сервер - так, с моей точки зрения, надежнее в плане отказов. Отказ управления нагревателем в аквариуме будет иметь весьма печальные последствия.
А можно как-то по таймеру периодически вызывать код? Мне, собственно, нужно запихнуть несколько простых команд в ком порт или tcp socket, прочитать ответ и распарсить, и обновить переменные в объектах.
- sergejey
- Site Admin
- Сообщения: 4286
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 76 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Вопрос новичка по чтению сенсоров
По таймеру можно вызывать код через правку метода таймера onNewMinute, там можно добавить свой runScript, а в сам скрипт уже встроить чтение сокета и сохранение данных. Как-то так 

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
- sergejey
- Site Admin
- Сообщения: 4286
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 76 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Вопрос новичка по чтению сенсоров
Попробуем )
Пример чтения данных из tcp сокета (взято из работы с одним из устройств, которое только tcp-сокеты и понимает):
Пример чтения данных из tcp сокета (взято из работы с одним из устройств, которое только tcp-сокеты и понимает):
Код: Выделить всё
$host='192.168.0.1'; //хост
$port='2323'; // порт
$ar='';
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
return 0;
}
$result = socket_connect($socket, $host, $port);
if ($result === false) {
echo "socket_connect( $socket , $host , $port) failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
return 0;
}
$in=$command;
socket_write($socket, $in, strlen($in));
$res='';
$res=socket_read($socket, 2048, PHP_BINARY_READ);
if ($res) {
$total=strlen($res);
for($i=0;$i<$total;$i++) {
$ar[]=ord($res[$i]);
}
} else {
$ar=0;
}
socket_close($socket);
if ($ar) {
//если что-то прочитали, то записываем это что-то в переменную
setGlobal('MyObject.MyProperty',$ar);
}
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги