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

Re: разложить веб переменую

Добавлено: Пн дек 14, 2015 10:28 pm
Ferit
SOS.
Второй вечер никак не могу заставить работать. Почему-то не приходят данные.

Есть вот такой скетч на Arduino

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

#include <SPI.h>
#include <Ethernet.h>
#include "DHT.h"   // подключаем библиотеку
#define DHTPIN 2     // вывод, к которому подключается датчик
DHT dht(DHTPIN, DHT22); // определяем тип датчика: 22 или 11
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Мак адрес
byte ip[] = { 192, 168, 0, 2 }; // IP адрес (В броузере вводим 192.168.0.2)
EthernetServer server(80);

void setup()
{  
  Serial.begin(9600);
  dht.begin(); 
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{

 float h = dht.readHumidity();
  float t = dht.readTemperature(); 
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }   
  EthernetClient client = server.available();
  if (client)
  {
    // Проверяем подключен ли клиент к серверу
    while (client.connected())
    {
      // Проверяем идет ли запрос к серверу
      int dataCount = client.available();
      if (dataCount > 0)
      {
      
      client.println("HTTP/1.1 200 OK");
      client.println("Content-Type: text/html");
      client.println();
      client.println("<html>");
      client.println("<head>"); 
      client.println("</head>");
      client.println("<body>");
   client.println("<p>");
      client.print(t);
   client.print(',');
      client.print(h);       
      client.println("</p>");
      client.println("</body>");
      client.println("</html>");
      client.stop(); 
      delay (3000);
    }}}}
  
 
По адресу http://192.168.0.2/ вижу данные температуры и влажности в одну строчку- 2.60,82.20

В скрипт пишу код

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

$bufft = file_get_contents('http://192.168.0.2/');
$exp = explode(",", $bufft);
$data0 = substr($exp[0], 0, 5);
$data1 = substr($exp[1], 0, 5);

say ('темп', $data0);
say ('влаж', $data1);

 
Получаю результат без данных
Изображение

В чем может быть проблема?

Re: разложить веб переменую

Добавлено: Пн дек 14, 2015 10:51 pm
zelevova
avgaz писал(а): И в таймер уже пишу callMethod("TempKotel.readFromDevice");
Вроде работает так, хоть сути и разницы со сценарием не уловил.
И сценарий теперь в принципе уже не нужен?
Вот уже совсем хорошо. Я бы еще ip котла занес в свойство и в методе от туда считывал. А сам метод повешал на весь класс, а не персонально на этот объект. Хотя в данном конкретном случае не принципиально. Вот если котлов штук 5 хотябы...
Сценарий уже не нужен.
Метод это типа сценарий привязанный к объекту. Можно все написать на сценариях. Но не удобно это.
Вот представь у тебя 10 лампочек, 11 выключателей, теплые полы, датчики движения, ворота гаража и т.д. И если для каждого объекта писать сценарий, а не метод то очень скоро запутаешься что к чему относиться и как в этом разобраться.
А вот если у класса лам прописанны методы "вкл", "выкл" и т.д. То тебе уже не важно как конкретная лампа подключена, ты просто говоришь в системе: лампа включись.
Сценарии же нужны когда нет привязки к конкретному объекту.

Re: разложить веб переменую

Добавлено: Пн дек 14, 2015 11:08 pm
savenko_egor
Ferit писал(а):В чем может быть проблема?
Проблема в запятой которую Вы указываете. В функции say не должно быть ",". Потому-что после запятой там указывается уровень важности фразы.
say($ph,$level) -- говорит фразу (использует глобальные переменные $voicemode [именно говорить] и $commandLine [преобразует ответ в echo utf2win(), иначе просто echo]). $level указывает уровень важности фразы (в зависимости от текущих настроек минимального уровня произношения, фраза может быть либо озвучена голосом либо просто записана в историю сообщений).
Инфа от сель.
В php, насколько я помню, текст соединяется так:

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

echo 'Temp: '.$temp;

Re: разложить веб переменую

Добавлено: Вт дек 15, 2015 12:15 am
Vovix
warik писал(а):....В php, насколько я помню, текст соединяется так:

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

echo 'Temp: '.$temp;
:D я думаю, для Ferit надо написать так:

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

say ('темп'.$data0, 0); 
;) и он всё поймет!

Re: разложить веб переменую

Добавлено: Вт дек 15, 2015 9:37 am
Ferit
Vovix спасибо что вы понимаете мой уровень и как надо писать чтобы я понял. Первые результаты уже есть, появилась влажность. Пока нет температуры и чисел после точки (десятых).
Буду и дальше работать над этим, но и не откажусь от помощи!

Re: разложить веб переменую

Добавлено: Вт дек 15, 2015 11:04 am
Ferit
Вроде добился вывода показателей температуры и влажности, но появилась интересная ситуация. Предположим данные такие
10:58 Алиса: влажность 92.20%
10:58 Алиса: температура -1.50

И голосом она говорит " Температура дефис один точка пятьдесят"
А с влажностью все нормально, говорит "Влажность девяносто две целых две десятых процента"

Как быть с температурой?

Re: разложить веб переменую

Добавлено: Вт дек 15, 2015 11:30 am
skysilver
Попробуйте после значения температуры добавить описание измеряемой величины - градусов цельсия, "°C".
Чтобы в итоге так получилось: 10:58 Алиса: температура -1.50°C

Re: разложить веб переменую

Добавлено: Вт дек 15, 2015 11:56 am
Ferit
Добавил °C, и теперь говорит "Температура дефис один точка пятьдесят градусов си"

Re: разложить веб переменую

Добавлено: Вт дек 15, 2015 12:15 pm
skysilver
Ну значит по простому не получится. :) Придется перед тем, как давать команду say, сначала формировать строку фразы и обрабатывать положительные, отрицательные температуры, склонение числительных и подставлять единицу измерения. У меня голосовой синтез Яндекса и он нормально реагирует на знак "минус" у чисел.