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

На самом деле решение довольно простое: можно отправлять данные на свой сервер, а он уже будет автоматически отсылать на Народмон. Если вы пользуетесь моей прошивкой для метеостанции, то в ней необходимо будет поменять 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, либо сделать отдельный сайт для погоды, добавить оформление, сделать историю показаний и т.д. Всё ограничивается лишь вашей фантазией.