Страница 1 из 3

Помогите разобраться с привязкой МЖД к Ардуино

Добавлено: Вс мар 30, 2014 2:56 am
alexpzas
Всем привет. Помогите пожалуйста разобраться, рылся на форуме и на сайте, но толком не понял, разжуйте если можно. Общим есть Дуина мега , управляет освещением в квартире по датчикам движения , освещения и пр. Недавно подкинул на неё датчик температуры DHT11 , значение температуры записываю в переменную t. Теперь хочу эту температуру выводить где-то в МЖД (потом былобы неплохо с МЖД вкл/выкл свет, но для начала хотябы разобраться с принцыпом). В скетче формирую след запрос

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

sprintf(buf, "GET /objects/?object=sensorTemp&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (float)t);
и отправляю его процедурой

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

void sendHTTPRequest() 
{
  Serial.println(buf);
  if (client.connect(server,80)) {
   Serial.println("OK");
   client.println(buf);
   client.println("Host: 192.168.0.25");
   client.println();   
   delay(2000);
   client.stop();
  } else {
   Serial.println("FAILED");     
  }
 }
Надеюсь тут всё верно (если нет , то подправьте пож).
Теперь вот вопрос, помогите пошагово, что нужно делать в МЖД.

Re: Помогите разобраться с привязкой МЖД к Ардуино

Добавлено: Пн мар 31, 2014 9:00 am
PAV
Создать объект sensorTemp. Ему, согласно скетча, будет присвоено значение t.
Также создать метод tempChanged и прописать там, что будет, когда к нему обращаются.
Только я бы float не передавал, лучше сделать так:

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

int temp5 = (current_temp5 - (int)current_temp5) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=sensorTemp5&op=m&m=tempChanged&t=%0d.%d", (int)current_temp5, abs(temp5));
sendHTTPRequest();
 

Re: Помогите разобраться с привязкой МЖД к Ардуино

Добавлено: Пн мар 31, 2014 9:04 am
alexpzas
я так понимаю temp5 это и есть моя t ? А подскажите пож , что означает в запросе t=%0d.%d" ?

Re: Помогите разобраться с привязкой МЖД к Ардуино

Добавлено: Вт апр 01, 2014 1:43 pm
PAV
Вот честно, я этим способом (t=%0d.%d) пользуюсь во всех кодах, но как он работает понятия не имел ;)))
Благодаря вашему вопросу разобрался ;)
http://php.net/manual/en/function.sprintf.php
или на русском
http://www.php.su/sprintf

Re: Помогите разобраться с привязкой МЖД к Ардуино

Добавлено: Вт апр 01, 2014 11:27 pm
alexpzas
Спасибо за ссылку, полезно было тоже разобраться ))
Теперь хочу описать, что я делал пошагово в МЖД но результата не получил ((( Направьте пож. где ошибся.
Создал объект sensorTemp
1.jpg
1.jpg (32.79 КБ) 10178 просмотров
Добавил к этому объекту метод tempChanged в котором просто произносится фраза (для теста).
2.jpg
2.jpg (38.91 КБ) 10178 просмотров
Теперь в сцену добавляем элемент температура, с состоянием темп в котором вызывается метод sensorTemp.tempChanged
3.jpg
3.jpg (63.34 КБ) 10178 просмотров
(картинку лампочки просто для примера подключил,хоть и не в тему).
По идее, теперь когда открываем сцену то должна произноситься фраза -Температура в детской,цель конечно отображение температуры, но пока пускай так хоть. Но ничего не происходит. Что я не так делаю, если можно конкретно ткнуть пальцем.

Re: Помогите разобраться с привязкой МЖД к Ардуино

Добавлено: Ср апр 02, 2014 10:36 am
PAV
Вы бы начинали от легкого к сложному ;) Сначала нужно изучить структуру.
Ну первое - объект sensor.Temp лучше убрать под класс - Сделать класс например sensorTemp, а под ним уже sensorTemp1 2 и т.д.
Далее Объекту нужно присвоить свойства, например - temp, changed, alive, и методы tempchaged
В итоге вам нужны свойство sensorTemp.temp и метод sensorTemp.tempchanged
Покопайтесь в Connect, посмотрите, как у других сделано.
Когда с ардуины приходит команда, свойству sensorTemp.temp присваивается значение t и выполняется метод sensorTemp.tempchanged.

В сценах так легко не получится, там нужно выбрать скорее всего Тип - HTML и сверстать страничку с температурой, используя значение sensorTemp.temp

Так как вы сделали, у вас просто показывается лампочка и при нажатии на нее выполняется метод tempChanged. Точнее вы и тут неправильно указали - в первой строчке написать sensorTemp, во второй через точку tempChanged

Re: Помогите разобраться с привязкой МЖД к Ардуино

Добавлено: Пн апр 07, 2014 10:24 pm
alexpzas
И так, немного продвинулся но , опять загвоздка. Значится создал класс sensorTemp , в нём свойства direction Направление изменения,
temp Температура в детской ,updated ,updatedTime. Метод tempchanged в нём код

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

$old_temp=$this->getProperty('temp');
$t=round($params['t']*2)/2;
$this->setProperty('temp',$t);
if ($t>$old_temp) {
 $d=1;
} elseif ($t<$old_temp) {
 $d=-1;
} else {
 $d=0;
}
$this->setProperty('direction',$d);
$this->setProperty("updated",time());
$this->setProperty("updatedTime",date("H:i",time())); 
А также объект SensorTemp1 - Датчик температуры в детской , который унаследует свойства и метод класса.
Вот вид странички свойства для объекта SensorTemp1
qqq.jpg
qqq.jpg (29.81 КБ) 9937 просмотров
В меню управления , создал новый пункт меню и в заголовке прописал
%SensorTemp1.temp% C (%SensorTemp1.updatedTime%)
Тобиш должно показывать температуру и с какого времени было последнее обновление.
С ардуины как уже говорилось посылается следующий запрос
sprintf(buf, "GET /objects/?object=SensorTemp1&op=m&m=tempchanged&t=%0d.%d HTTP/1.0", (float)t);
Но вот в меню где должна выводиться температура, её так и нет, разве только что выводится время SensorTemp1.updatedTime.
Что опять не так?

Re: Помогите разобраться с привязкой МЖД к Ардуино

Добавлено: Пн апр 07, 2014 10:26 pm
electric
А что лог апача говорит?

Re: Помогите разобраться с привязкой МЖД к Ардуино

Добавлено: Пн апр 07, 2014 10:33 pm
alexpzas
Если я Вас правильно понял это -
22.jpg
22.jpg (137.65 КБ) 9931 просмотр
33.jpg
33.jpg (87.27 КБ) 9931 просмотр
?

Re: Помогите разобраться с привязкой МЖД к Ардуино

Добавлено: Вт апр 08, 2014 12:39 am
alexpzas
вот , что показывает монитор порта

OK
GET /objects/?object=SensorTemp1&op=m&m=tempchanged&t=24.0 HTTP/1.0
GET /objects/?object=SensorTemp1&op=m&m=tempchanged&t=24.0 HTTP/1.0
OK
GET /objects/?object=SensorTemp1&op=m&m=tempchanged&t=24.0 HTTP/1.0
GET /objects/?object=SensorTemp1&op=m&m=tempchanged&t=24.0 HTTP/1.0
OK

Тобиш температура считывается и передается, но я что-то делаю не так в МДМ