запись полученых данных в sql

Всё, что не подходит под вышеперечисленные разделы

Модератор: immortal

swp
Сообщения: 6
Зарегистрирован: Чт апр 09, 2015 11:21 am
Благодарил (а): 2 раза
Поблагодарили: 0

запись полученых данных в sql

Сообщение swp » Чт апр 09, 2015 11:49 am

Добрый день помогите переделать php скрипт для получения данных с wifi датчиков по типу MajorDoMo
И такименется веб сервер по пути 127.0.0.1/objects/ иметься файлик index.php взят из системы по принятию показаний с narodmon с кодом

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

<?
define ("MYSQL_HOST"    ,'localhost');
define ("MYSQL_LOGIN"   ,'user');
define ("MYSQL_PASSWORD",'pass');
define ("MYSQL_DATABASE",'dubmon');
 
@mysql_connect(MYSQL_HOST, MYSQL_LOGIN, MYSQL_PASSWORD)
  or die("Connect SQL error!");
 
$db_name=@$_POST['id'];
 
$db_name=MYSQL_DATABASE;
 
@mysql_select_db($db_name) or die("Select DB error!");
 
foreach(array_keys($_POST) as $key) {
    if (strtoupper($key) != 'ID')
    {
        $sql="INSERT INTO `".$key."` ( `id` , `value` , `date` ) VALUES (NULL,'".$_POST[$key]."',NOW());";
        #echo $sql."<br>";
        if($result = mysql_query($sql)===false)
        {
$create_table = <<<LABEL
CREATE TABLE `$key` 
(`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,
`value` DOUBLE NOT NULL ,
`date` DATETIME NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE (
`id` 
)) ENGINE = MYISAM;
LABEL;
        if($result = mysql_query($create_table)===false) die("CREATE TABLE ERROR!");
        else mysql_query($sql);
        }
 
    }
}
 
?>
Помогите переделать код под систему MajorDoMo
Также иметься подсказка
СпойлерПоказать
При этом модуль передает данные на сервер на адрес /objects/ передавая параметры: idesp - id устройства,hostname- имя устройства, dhtt1 и dhth1 - данные с датчика DHT 1, dhtt2 и dhth2 - данные с датчика DHT 2, bmpt и bmpp -данные с датчика BMP, dswX - данные с датчиков ds18b20(X -номер датчика), light - данные с датчика BH1750. В системе необходимо создать сценарий с именем espdata, где уже обрабатываются перечисленные выше данные.
Зарание благодарен за помощь.
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: запись полученых данных в sql

Сообщение LutsenkoDenis » Чт апр 09, 2015 12:43 pm

Что это?

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

$db_name = @$_POST['id'];
$db_name = MYSQL_DATABASE;
Первая строчка в таком случае лишняя.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
swp
Сообщения: 6
Зарегистрирован: Чт апр 09, 2015 11:21 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: запись полученых данных в sql

Сообщение swp » Чт апр 09, 2015 1:30 pm

LutsenkoDenis писал(а):Что это?

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

$db_name = @$_POST['id'];
$db_name = MYSQL_DATABASE; 
Первая строчка в таком случае лишняя.
$db_name = @$_POST['id']; Отвечает за выбор таблици с id датчика
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: запись полученых данных в sql

Сообщение LutsenkoDenis » Чт апр 09, 2015 1:32 pm

ага, только следующая строчка ($db_name = MYSQL_DATABASE;) перезатирает данные полученные с id датчика на MYSQL_DATABASE!
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
swp
Сообщения: 6
Зарегистрирован: Чт апр 09, 2015 11:21 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: запись полученых данных в sql

Сообщение swp » Чт апр 09, 2015 1:55 pm

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

Re: запись полученых данных в sql

Сообщение Vovix » Чт апр 09, 2015 2:21 pm

swp писал(а):а ну хорошо я ее убрал но у меня проблема в том то что этот скрипт не записывает принятые показания в базу насколько я понял это из за имен переменых
дак у Вас же, на сколько я понял, это - http://smartliving.ru/forum/viewtopic.php?f=8&t=1937 ?
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: запись полученых данных в sql

Сообщение LutsenkoDenis » Чт апр 09, 2015 3:23 pm

немного переделал код
СпойлерПоказать

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

define("MYSQL_HOST", 'localhost');
define("MYSQL_LOGIN",    'user'); 
define("MYSQL_PASSWORD", 'pass'); 
define("MYSQL_DATABASE", 'dubmon'); 

@mysql_connect(MYSQL_HOST, MYSQL_LOGIN, MYSQL_PASSWORD)
  or die("Connect SQL error!");

$db_name = MYSQL_DATABASE;

@mysql_select_db($db_name) or die("Select DB error!");


/**
 * Create Table Query by tableName
 * @param string $tableName Table name 
 * @return string
 */
function GetCreateTableQuery($tableName)
{
   $create_table = <<<LABEL
CREATE TABLE `$tableName` 
(`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,
`value` DOUBLE NOT NULL ,
`date` DATETIME NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE (
`id` 
)) ENGINE = MYISAM;
LABEL;

   return $create_table;
}

/**
 * Simple validation
 * @param mixed $paramValue input parameter
 * @return bool
 */
function IsValidValue($paramValue)
{
   if (empty($paramValue))
      return false;
   
   return true;
}

foreach(array_keys($_POST) as $key)
{
   if (strtoupper($key) != 'ID')
   {
      $value = $_POST[$key];
      if (!IsValidValue($value))
      {
         // Пустое значение. При вставке в таблицу произойдет ошибка т.к. поле в таблице NOT NULL
         // переходим к следующему сенсору
         continue;
      }
      
      $sql="INSERT INTO `". $key . "` (`id`, `value`,`date`) VALUES (NULL,'" . $value . "', NOW());";
      echo $sql . "<br />";
      
      if($result = mysql_query($sql) === false)
      {
         $create_table = GetCreateTableQuery($key);
         if($result = mysql_query($create_table) === false)
         {
            die("CREATE TABLE ERROR! - " . $key);
         }
         else mysql_query($sql);
      }
   }
}
У меня он работает и данные заносятся в базу.
Единственное, что я бы еще сделал, это дал бы при создании таблиц этим самым таблицам префикс типа "sensor_dhtt1" и т.д. А то потом вспоминай как таблицы назывались.

Или можно вообще сделать две таблицы. Одна содержит виды датчиков
1- dhtt1
2 - bmpt и тд.
В во вторую записывать показания этих самых датчиков и тип.

Из плюсов:
1. Не нужно на каждый датчик отдельная таблица.
2. Дополнительная проверка - данные с "левых" датчиков, тип который явно не указан в таблице с типами датчиков, не попадут в таблицу.
За это сообщение автора LutsenkoDenis поблагодарил:
swp (Чт апр 09, 2015 6:45 pm)
Рейтинг: 1.16%
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
swp
Сообщения: 6
Зарегистрирован: Чт апр 09, 2015 11:21 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: запись полученых данных в sql

Сообщение swp » Чт апр 09, 2015 9:44 pm

LutsenkoDenis писал(а):немного переделал код
Спасибо за помощь но у меня все равно не записывает информацию в sql
если что использую данную прошивкуhttp://homes-smart.ru/index.php/oborudo ... arodmon-ru с устройством esp8266 (esp-12)
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: запись полученых данных в sql

Сообщение LutsenkoDenis » Пт апр 10, 2015 10:14 am

можешь написать строку с полученными показаниями?
т.е. строку запроса и какие значения параметров приходят
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
swp
Сообщения: 6
Зарегистрирован: Чт апр 09, 2015 11:21 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: запись полученых данных в sql

Сообщение swp » Пт апр 10, 2015 3:45 pm

а как ее сохранить что бы потом посмотреть $_GET запрос?
еще имею это описание
СпойлерПоказать
В настройках датчиков указывается IP адрес сервера MajorDoMo или другого сервиса. При этом модуль передает данные на сервер на адрес /objects/ передавая параметры: idesp - id устройства,hostname- имя устройства, dhtt1 и dhth1 - данные с датчика DHT 1, dhtt2 и dhth2 - данные с датчика DHT 2, bmpt и bmpp -данные с датчика BMP, dswX - данные с датчиков ds18b20(X -номер датчика), light - данные с датчика BH1750. В системе необходимо создать сценарий с именем espdata, где уже обрабатываются перечисленные выше данные.
Ответить