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

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ferit
Сообщения: 10
Зарегистрирован: Пн дек 07, 2015 10:29 pm
Благодарил (а): 0
Поблагодарили: 2 раза

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

Сообщение Ferit » Пн дек 14, 2015 10:28 pm

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);

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

В чем может быть проблема?
zelevova
Сообщения: 291
Зарегистрирован: Вт ноя 18, 2014 11:43 pm
Откуда: Краснодарский край
Благодарил (а): 32 раза
Поблагодарили: 68 раз

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

Сообщение zelevova » Пн дек 14, 2015 10:51 pm

avgaz писал(а): И в таймер уже пишу callMethod("TempKotel.readFromDevice");
Вроде работает так, хоть сути и разницы со сценарием не уловил.
И сценарий теперь в принципе уже не нужен?
Вот уже совсем хорошо. Я бы еще ip котла занес в свойство и в методе от туда считывал. А сам метод повешал на весь класс, а не персонально на этот объект. Хотя в данном конкретном случае не принципиально. Вот если котлов штук 5 хотябы...
Сценарий уже не нужен.
Метод это типа сценарий привязанный к объекту. Можно все написать на сценариях. Но не удобно это.
Вот представь у тебя 10 лампочек, 11 выключателей, теплые полы, датчики движения, ворота гаража и т.д. И если для каждого объекта писать сценарий, а не метод то очень скоро запутаешься что к чему относиться и как в этом разобраться.
А вот если у класса лам прописанны методы "вкл", "выкл" и т.д. То тебе уже не важно как конкретная лампа подключена, ты просто говоришь в системе: лампа включись.
Сценарии же нужны когда нет привязки к конкретному объекту.
Majordomo (GitHub) на cubietruck + MegaD + 1-wire
CONNECT: http://connect.smartliving.ru/profile/311
Аватара пользователя
savenko_egor
Сообщения: 705
Зарегистрирован: Вс авг 03, 2014 8:17 pm
Откуда: Украина, Запорожье
Благодарил (а): 108 раз
Поблагодарили: 147 раз
Контактная информация:

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

Сообщение savenko_egor » Пн дек 14, 2015 11:08 pm

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

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

echo 'Temp: '.$temp;
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

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

Сообщение Vovix » Вт дек 15, 2015 12:15 am

warik писал(а):....В php, насколько я помню, текст соединяется так:

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

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

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

say ('темп'.$data0, 0); 
;) и он всё поймет!
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Ferit
Сообщения: 10
Зарегистрирован: Пн дек 07, 2015 10:29 pm
Благодарил (а): 0
Поблагодарили: 2 раза

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

Сообщение Ferit » Вт дек 15, 2015 9:37 am

Vovix спасибо что вы понимаете мой уровень и как надо писать чтобы я понял. Первые результаты уже есть, появилась влажность. Пока нет температуры и чисел после точки (десятых).
Буду и дальше работать над этим, но и не откажусь от помощи!
Ferit
Сообщения: 10
Зарегистрирован: Пн дек 07, 2015 10:29 pm
Благодарил (а): 0
Поблагодарили: 2 раза

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

Сообщение Ferit » Вт дек 15, 2015 11:04 am

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

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

Как быть с температурой?
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1754 раза
Контактная информация:

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

Сообщение skysilver » Вт дек 15, 2015 11:30 am

Попробуйте после значения температуры добавить описание измеряемой величины - градусов цельсия, "°C".
Чтобы в итоге так получилось: 10:58 Алиса: температура -1.50°C
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Ferit
Сообщения: 10
Зарегистрирован: Пн дек 07, 2015 10:29 pm
Благодарил (а): 0
Поблагодарили: 2 раза

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

Сообщение Ferit » Вт дек 15, 2015 11:56 am

Добавил °C, и теперь говорит "Температура дефис один точка пятьдесят градусов си"
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1754 раза
Контактная информация:

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

Сообщение skysilver » Вт дек 15, 2015 12:15 pm

Ну значит по простому не получится. :) Придется перед тем, как давать команду say, сначала формировать строку фразы и обрабатывать положительные, отрицательные температуры, склонение числительных и подставлять единицу измерения. У меня голосовой синтез Яндекса и он нормально реагирует на знак "минус" у чисел.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Ответить