Вывод показаний с метеостанции на свой сайт

У меня было уже несколько статей про метеостанцию. Везде данные отправлялись на «Народный мониторинг». Но что делать, если хочется вести ещё одновременно и свою статистику и отображать данные на своём сайте?

На самом деле решение довольно простое: можно отправлять данные на свой сервер, а он уже будет автоматически отсылать на Народмон. Если вы пользуетесь моей прошивкой для метеостанции, то в ней необходимо будет поменять IP-адрес сервера в начале. Указать необходимо теперь адрес своего сервера:

IPAddress server(***,***,***,***); // IP сервера

и домен (вместо example.com в 8 строке этого примера):

void httpRequest() {
  if (client.connect(server, 80)) {
    if (Debug)
    {
      Serial.println("connecting...");
    }
    // send the HTTP POST request:
    client.println("POST http://example.com/update12345.php HTTP/1.0");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.print("Content-Length: ");
    client.println(len(replyBuffer));
    client.println();
    client.println(replyBuffer);
    client.println();

    lastConnectionTime = millis();
  } 
  else 
  {
    if (Debug)
    {
      Serial.println("connection failed");
      Serial.println("disconnecting.");
    }
    client.stop();
  }
}

Теперь данные с метеостанции будут прямиком отправляться к нам. Нужно их ловить 🙂

Для этого напишем вот такой скриптик на PHP:

<?php
  $dbhost = '127.0.0.1';
  $dbname = '*****';
  $dbuser = '*****';
  $dbpass = '*****';
 
  if (!mysql_connect($dbhost, $dbuser, $dbpass))
  {
    die("Error connection to MySQL");
  }
  mysql_select_db($dbname);
 
  $temp1 = trim(mysql_real_escape_string($_POST['****************']));
  $temp2 = trim(mysql_real_escape_string($_POST['****************']));
  $pressure = trim(mysql_real_escape_string($_POST['****************01']));
  $humidity = trim(mysql_real_escape_string($_POST['****************02']));
  $dhtt = trim(mysql_real_escape_string($_POST['dhtt']));
  $dpst = trim(mysql_real_escape_string($_POST['bmpt']));
 
  $mac = $_POST['ID'];
  $curtime = time();
 
  //сохраняем в БД
  $q = mysql_query("UPDATE `weather` SET `Time`=$curtime, `Temp`=$temp1, `P`=$pressure, `H`=$humidity WHERE `ID`=\"0\"");
 
  //посылаем на народный мониторинг
  $data = '#00-00-00-00-00-00\n#T1#' . $temp1 . '\n#T2' . $temp2 . '\n#H1' . $humidity . '\n#P1#' . $pressure . '\n##';
 
  $fp = @fsockopen("tcp://narodmon.ru", 8283, $errno, $errstr);
  if(!$fp) exit("ERROR(".$errno."): ".$errstr);
  fwrite($fp, $data);
  fclose($fp);
?>

В строках 3-5 указываем параметры для доступа к базе данных MySQL: имя базы, имя пользователя, пароль.

В строках 13-18 необходимо указать имена параметров, которые отправляются к нам с метеостанции (обычно это один или несколько серийных номеров датчиков и т.д.). В примере здесь они обозначены звёздочками, а также «dhtt» и «bmpt». Посмотреть, что же именно у вас отправляется с метеостанции, можно включив отладку в коде и открыв монитор порта.

Таких строчек можно добавить по-аналогии ещё несколько или удалить.

В 24 строке записываем данные в базу данных. Естественно, её нужно предварительно создать (например, через phpMyAdmin).

В 27 строке формируем строку для отправки на Народный мониторинг. Её строим по аналогии. Вписываем вместо 00-00-00-00-00-00 свой MAC, который используется на Народмоне. И добавляем данные, которые необходимо отправлять. ID датчиков можно посмотреть в разделе ДатчикиНастройка датчиков на сайте.

Скрипт сохраним под именем update12345.php в корне нашего сайта.

Примечание по безопасности

Для того чтобы никто другой не мог отправить какие-либо данные вместо вашей метеостанции, необходимо придумать уникальное имя для этого файла. «update12345» дано только в качестве примера. Можно использовать произвольный набор английских букв и цифр. Не забудьте такое же имя указать в коде скетча в строке отправки данных.
Второй способ — ввести проверку какого-либо ключевого параметра (пароль), который будет отправляться с метеостанции. Если вы знаете PHP, думаю без проблем справитесь.

Создание БД: Необходимо создать таблицу со столбцами ID, Time и столбец под каждый датчик:

Добавляем строку в таблицу. Эту строку затем будет обновлять написанный ранее скрипт.

Или можно это сделать SQL-запросом:

INSERT INTO `weather` (`ID`, `Time`, `Temp`, `P`, `H`) VALUES ('0', '0', '0', '0', '0');

Можно запускать метеостанцию и проверять. Данные в строке таблицы должны меняться.

Ну и наконец, PHP-код для сайта. Приведу самый простой пример.

<?php
  $dbhost = '127.0.0.1';
  $dbname = '*****';
  $dbuser = '*****';
  $dbpass = '*****';
 
  if (!mysql_connect($dbhost, $dbuser, $dbpass))
  {
    die("Error connection to MySQL");
  }
  mysql_select_db($dbname);
 
  $q = mysql_query("SELECT * FROM `weather` WHERE `ID`=0");
  if (mysql_num_rows($q) != 0)
  {
    $f = mysql_fetch_array($q);
    $Temp = $f['Temp'];
    $Pressure = $f['P'];
    $Humidity = $f['H'];
  }
?>
 
<html>
<head>
  <meta charset="UTF-8">
  <title>Погода в .....</title>
</head>
<body>
  Температура: <?php echo $Temp; ?>°C
  <br>Давление: <?php echo $Pressure; ?> мм Рт.ст.
  <br>Влажность: <?php echo $Humidity; ?>%
</body>
</html>

Не забываем в нём прописать данные для доступа к БД.
В результате получаем вот такую страничку:

Естественно вы можете вставить подобный код в свою CMS, либо сделать отдельный сайт для погоды, добавить оформление, сделать историю показаний и т.д. Всё ограничивается лишь вашей фантазией.