dat1=[ 2 , 1 , 8 , 4 , 3 , 5 , 3 , -1 , -3 , -2 , 1 , 4 , -2 , 1 ];
# Server. Master. # Получаем данные по I2C, преобразуем, расчитываем значения, записываем в файл. filename = '/var/www/html/meteost.ru/public_html/js/znach.js' # Путь к создаваемому файлу znach.js filename1 = '/var/www/html/meteost.ru/public_html/Temper_1.txt' # Путь к создаваемому файлу Temper_1.txt filename2 = '/var/www/html/meteost.ru/public_html/Data.txt' # Путь к создаваемому файлу Data.txt filename3 = '/var/www/html/meteost.ru/public_html/Pres.txt' # Путь к создаваемому файлу Temper_2.txt filename4 = '/var/www/html/meteost.ru/public_html/Veter_cr.txt' # Путь к создаваемому файлу Temper_2.txt filename5 = '/var/www/html/meteost.ru/public_html/Veter_max.txt' # Путь к создаваемому файлу Temper_2.txt vrem = 0 while True: from smbus import SMBus # Импортируем модуль SMBus для работы с I2C. bus = SMBus(1) # Для raspberry pi4 значение SMBus должно быть 1. from time import * # Импортируем модуль таймера. from datetime import * # Импортируем модуль системного времени i = 1 Skorost_1,Skorost_m = 0,0 while i < 50 : # Цикл для расчёта среднего и максимального значения скорости ветра. # Запрашиваем блок из устройства 8 в колличестве 14 значений данных. # Полученные данные сохраняем в переменные data(1-13). data1,data2,data2_1,data3,data4,data5,data6,data7,data8,data9,data10,data11,data12,data13 = bus.read_i2c_block_data(0x8, 0x0C, 14) # В переменных храняться данные из полуслова, в 2 переменных одно слово. # Поэтому значение 1 переменной (11111111) смещаем # на 8 бит влево (1111111100000000) и добавляем знакение 2 переменной # с помощью логического ИЛИ (1111111111111111). Temperature = data1 << 8 Temperature = Temperature | data2 znak = data2_1 Pozicion = data3 << 8 Pozicion = Pozicion | data4 Skorost = data5 << 8 Skorost = Skorost | data6 Perimetr = data7 Vlazhnost = data8 << 8 Vlazhnost = Vlazhnost | data9 Press = data10 << 8 Press = Press | data11 # Вычисляем среднюю и максимальную скорость ветра. Skorost_1 = Skorost_1 + Skorost if Skorost_m < Skorost : Skorost_m = Skorost sleep(1) # Пауза 1 сек. i+=1 Skorost_sr = int(Skorost_1 / 50) today = datetime.today() today1 = today.strftime('%X') today2 = today.strftime('%x') hou = today.hour # Определение направления ветра по азимуту (0-360) if 0 <= Pozicion and 11 > Pozicion : Azm = 'С' if 11<= Pozicion and 34> Pozicion : Azm = 'ССВ' if 34 <= Pozicion and 56 > Pozicion : Azm = 'СВ' if 56 <= Pozicion and 79 > Pozicion : Azm = 'ВСВ' if 79 <= Pozicion and 101 > Pozicion : Azm = 'В' if 101 <= Pozicion and 124 > Pozicion : Azm = 'ВЮВ' if 124 <= Pozicion and 146 > Pozicion : Azm = 'ЮВ' if 146 <= Pozicion and 169 > Pozicion : Azm = 'ЮЮВ' if 169 <= Pozicion and 191 > Pozicion : Azm = 'Ю' if 191 <= Pozicion and 214 > Pozicion : Azm = 'ЮЮЗ' if 214 <= Pozicion and 236 > Pozicion : Azm = 'ЮЗ' if 236 <= Pozicion and 259 > Pozicion : Azm = 'ЗЮЗ' if 259 <= Pozicion and 281 > Pozicion : Azm = 'З' if 281 <= Pozicion and 304 > Pozicion : Azm = 'ЗСЗ' if 304 <= Pozicion and 326 > Pozicion : Azm = 'СЗ' if 326 <= Pozicion and 349 > Pozicion : Azm = 'ССЗ' if 349 <= Pozicion and 360 > Pozicion : Azm = 'С' # Выводим на экран параметры метеомтанции. #print('\n') #print('\tПараметры метеостанции.') #print('\n') #print('\n\tТемпература = ',Temperature,' C') #print('\n\tНаправление ветра = ',Azm) #print('\n\tСкорость ветра максимальная = ',Skorost_m,' м/с') #print('\n\tСкорость ветра средняя = ',Skorost_sr,' м/с') #print('\n\tСостояние охранного периметра (0-норма,1-авария) = ',Perimetr) #print('\n\tВлажность воздуха = ',Vlazhnost,' %') #print('\n\tДавление воздуха = ',Press,' мм.рт.ст') #print('\n\tДата и время измерения показаний метеостанции: ',today1,' ',today2) #print('\n') # Запись в файл. if znak == 0: Temperature = Temperature * -1 Temperature1 = str(Temperature) Skorost_m1 = str(Skorost_m) Skorost_sr1 = str(Skorost_sr) Perimetr1 = str(Perimetr) Vlazhnost1 = str(Vlazhnost) Press1 = str(Press) Pozicion1 = str(Pozicion) with open(filename, 'w') as f: f.write("var temper = '" + Temperature1 + "';") f.write("\nvar napr = '" + Azm + "';") f.write("\nvar napr1 = '" + Pozicion1 + "';") f.write("\nvar skor_m = " + Skorost_m1 + "; ") f.write("\nvar skor_s = " + Skorost_sr1 + "; ") f.write("\nvar vlash = '" + Vlazhnost1 + "'; ") f.write("\nvar davl = '" + Press1 + "'; ") f.write("\nvar vrm = '" + today1 + "'; ") f.write("\nvar vrm1 = '" + today2 + "'; ") f.write("\nvar elt = document.getElementById('temper'); ") f.write("\nelt.textContent = temper;") f.write("\nvar elv = document.getElementById('vlash');") f.write("\nelv.textContent = vlash;") f.write("\nvar eln = document.getElementById('napr'); ") f.write("\neln.textContent = napr;") f.write("\nvar eln_n = document.getElementById('napr1'); ") f.write("\neln_n.textContent = napr1;") f.write("\nvar els_s = document.getElementById('skor_s'); ") f.write("\nels_s.textContent = skor_s;") f.write("\nvar els_m = document.getElementById('skor_m'); ") f.write("\nels_m.textContent = skor_m;") f.write("\nvar eld = document.getElementById('davl'); ") f.write("\neld.textContent = davl; ") f.write("\nvar eld_t = document.getElementById('vrm'); ") f.write("\neld_t.textContent = vrm; ") f.write("\nvar eld_t1 = document.getElementById('vrm1'); ") f.write("\neld_t1.textContent = vrm1; ") # Задаём время срабатывания опроса данных для построения графиков # Опрос в 11 часов и в 23 часа if 0 < hou and 11 > hou: vrem = 0 if 12 <= hou and 23 > hou: vrem = 0 if hou == 11 or hou == 23 : if vrem == 0: vrem = 1 # Чтение данных из файла с показаниями температуры # первое значение не сохраняется все остальные значения # сохраняем в переменные. with open(filename1) as f: lines = f.readlines() i = 0 for line in lines: i = i+1 if i == 4: z1 = str(line.rstrip()) if i == 6: z2 = str(line.rstrip()) if i == 8: z3 = str(line.rstrip()) if i == 10: z4 = str(line.rstrip()) if i == 12: z5 = str(line.rstrip()) if i == 14: z6 = str(line.rstrip()) if i == 16: z7 = str(line.rstrip()) if i == 18: z8 = str(line.rstrip()) if i == 20: z9 = str(line.rstrip()) if i == 22: z10 = str(line.rstrip()) if i == 24: z11 = str(line.rstrip()) if i == 26: z12 = str(line.rstrip()) if i == 28: z13 = str(line.rstrip()) z14 = str(Temperature1) # Пишем значения температуры в файл из которого данные # используются для построения графика with open(filename1, 'w') as f: f.write("dat1=[ \n") f.write(z1 + " \n") f.write(",\n") f.write(z2 + " \n") f.write(",\n") f.write(z3 + " \n") f.write(",\n") f.write(z4 + " \n") f.write(",\n") f.write(z5 + " \n") f.write(",\n") f.write(z6 + " \n") f.write(",\n") f.write(z7 + " \n") f.write(",\n") f.write(z8 + " \n") f.write(",\n") f.write(z9 + " \n") f.write(",\n") f.write(z10 + " \n") f.write(",\n") f.write(z11 + " \n") f.write(",\n") f.write(z12 + " \n") f.write(",\n") f.write(z13 + " \n") f.write(",\n") f.write(z14 + " \n") f.write("];") # Чтение данных из файла с датой # первое значение не сохраняется все остальные значения # сохраняем в переменные. with open(filename2) as f: lines = f.readlines() i = 0 for line in lines: i = i+1 if i == 4: u1 = str(line.rstrip()) if i == 6: u2 = str(line.rstrip()) if i == 8: u3 = str(line.rstrip()) if i == 10: u4 = str(line.rstrip()) if i == 12: u5 = str(line.rstrip()) if i == 14: u6 = str(line.rstrip()) if i == 16: u7 = str(line.rstrip()) if i == 18: u8 = str(line.rstrip()) if i == 20: u9 = str(line.rstrip()) if i == 22: u10 = str(line.rstrip()) if i == 24: u11 = str(line.rstrip()) if i == 26: u12 = str(line.rstrip()) if i == 28: u13 = str(line.rstrip()) u14 = str(today2 + ' ' + today1) # Пишем значения с датой в файл из которого данные # используются для построения графика with open(filename2, 'w') as f: f.write("dat2=[ \n") f.write(u1 + " \n") f.write(",\n") f.write(u2 + " \n") f.write(",\n") f.write(u3 + " \n") f.write(",\n") f.write(u4 + " \n") f.write(",\n") f.write(u5 + " \n") f.write(",\n") f.write(u6 + " \n") f.write(",\n") f.write(u7 + " \n") f.write(",\n") f.write(u8 + " \n") f.write(",\n") f.write(u9 + " \n") f.write(",\n") f.write(u10 + " \n") f.write(",\n") f.write(u11 + " \n") f.write(",\n") f.write(u12 + " \n") f.write(",\n") f.write(u13 + " \n") f.write(",\n") f.write("'" + u14 + "' \n") f.write("];") # Чтение данных из файла с показаниями атм. давления # первое значение не сохраняется все остальные значения # сохраняем в переменные. with open(filename3) as f: lines = f.readlines() i = 0 for line in lines: i = i+1 if i == 4: x1 = str(line.rstrip()) if i == 6: x2 = str(line.rstrip()) if i == 8: x3 = str(line.rstrip()) if i == 10: x4 = str(line.rstrip()) if i == 12: x5 = str(line.rstrip()) if i == 14: x6 = str(line.rstrip()) if i == 16: x7 = str(line.rstrip()) if i == 18: x8 = str(line.rstrip()) if i == 20: x9 = str(line.rstrip()) if i == 22: x10 = str(line.rstrip()) if i == 24: x11 = str(line.rstrip()) if i == 26: x12 = str(line.rstrip()) if i == 28: x13 = str(line.rstrip()) x14 = Press1 # Пишем значения атм. давления в файл из которого данные # используются для построения графика with open(filename3, 'w') as f: f.write("dat3=[ \n") f.write(x1 + " \n") f.write(",\n") f.write(x2 + " \n") f.write(",\n") f.write(x3 + " \n") f.write(",\n") f.write(x4 + " \n") f.write(",\n") f.write(x5 + " \n") f.write(",\n") f.write(x6 + " \n") f.write(",\n") f.write(x7 + " \n") f.write(",\n") f.write(x8 + " \n") f.write(",\n") f.write(x9 + " \n") f.write(",\n") f.write(x10 + " \n") f.write(",\n") f.write(x11 + " \n") f.write(",\n") f.write(x12 + " \n") f.write(",\n") f.write(x13 + " \n") f.write(",\n") f.write(x14 + " \n") f.write("];") # Чтение данных из файла с показаниями Средней скорости ветра # первое значение не сохраняется все остальные значения # сохраняем в переменные. with open(filename4) as f: lines = f.readlines() i = 0 for line in lines: i = i+1 if i == 4: h1 = str(line.rstrip()) if i == 6: h2 = str(line.rstrip()) if i == 8: h3 = str(line.rstrip()) if i == 10: h4 = str(line.rstrip()) if i == 12: h5 = str(line.rstrip()) if i == 14: h6 = str(line.rstrip()) if i == 16: h7 = str(line.rstrip()) if i == 18: h8 = str(line.rstrip()) if i == 20: h9 = str(line.rstrip()) if i == 22: h10 = str(line.rstrip()) if i == 24: h11 = str(line.rstrip()) if i == 26: h12 = str(line.rstrip()) if i == 28: h13 = str(line.rstrip()) h14 = Skorost_sr1 # Пишем значения Средней скорости ветра в файл из которого # данные используются для построения графика with open(filename4, 'w') as f: f.write("dat4=[ \n") f.write(h1 + " \n") f.write(",\n") f.write(h2 + " \n") f.write(",\n") f.write(h3 + " \n") f.write(",\n") f.write(h4 + " \n") f.write(",\n") f.write(h5 + " \n") f.write(",\n") f.write(h6 + " \n") f.write(",\n") f.write(h7 + " \n") f.write(",\n") f.write(h8 + " \n") f.write(",\n") f.write(h9 + " \n") f.write(",\n") f.write(h10 + " \n") f.write(",\n") f.write(h11 + " \n") f.write(",\n") f.write(h12 + " \n") f.write(",\n") f.write(h13 + " \n") f.write(",\n") f.write(h14 + " \n") f.write("];") # Чтение данных из файла с показаниями Максимальной скорости ветра # первое значение не сохраняется все остальные значения # сохраняем в переменные. with open(filename5) as f: lines = f.readlines() i = 0 for line in lines: i = i+1 if i == 4: y1 = str(line.rstrip()) if i == 6: y2 = str(line.rstrip()) if i == 8: y3 = str(line.rstrip()) if i == 10: y4 = str(line.rstrip()) if i == 12: y5 = str(line.rstrip()) if i == 14: y6 = str(line.rstrip()) if i == 16: y7 = str(line.rstrip()) if i == 18: y8 = str(line.rstrip()) if i == 20: y9 = str(line.rstrip()) if i == 22: y10 = str(line.rstrip()) if i == 24: y11 = str(line.rstrip()) if i == 26: y12 = str(line.rstrip()) if i == 28: y13 = str(line.rstrip()) y14 = Skorost_m1 # Пишем значения Максимальной скорости ветра в файл из которого # данные используются для построения графика with open(filename5, 'w') as f: f.write("dat5=[ \n") f.write(y1 + " \n") f.write(",\n") f.write(y2 + " \n") f.write(",\n") f.write(y3 + " \n") f.write(",\n") f.write(y4 + " \n") f.write(",\n") f.write(y5 + " \n") f.write(",\n") f.write(y6 + " \n") f.write(",\n") f.write(y7 + " \n") f.write(",\n") f.write(y8 + " \n") f.write(",\n") f.write(y9 + " \n") f.write(",\n") f.write(y10 + " \n") f.write(",\n") f.write(y11 + " \n") f.write(",\n") f.write(y12 + " \n") f.write(",\n") f.write(y13 + " \n") f.write(",\n") f.write(y14 + " \n") f.write("];") bus.close() sleep(900)
Ну вот, пожалуй всё.
Все упомянутые в статье файлы можно скачать с яндекс диска.
Напишите отзыв.
Данная статья является продолжением статьи «Сервер на Raspberry PI4 для метеостанции». Здесь рассмотрим способ построения графиков параметров метеостанции и отображение графиков в web браузере. В этих стараниях нам поможет утилита «highcharts.js». Данная утилита есть в свободном доступе в интернете. Но, чтобы быть независимым от «дяди», который в любой момент закроет доступ, я решил скачать необходимые утилиты (утилиты расположены в архиве, скачать можно по кнопке в конце статьи). Так же скачал утилиту «jquery.min.js» - данная утилита необходима для корректной работы highcharts.js, это сокращённая версия jquery.
Сначала рассмотрим «отладочную версию». Здесь рассмотрим только построение графиков, далее рассмотрим «оконечную версию» где интегрируем графики в файл, расположенный на сервере.
Для работы графиков в одной папке с файлом «График.html» создаём следующие файлы:
Во всех файлах (кроме утилит) структура файлов одинаковая, разные только значения, в файле «Data.txt» значения даты заключены в одинарные кавычки, в остальных файлах кавычек нет. Это связано с тем, что файл «Data.txt» содержит данные отображаемые на оси абсцисс (ось Х). Остальные файлы содержат данные отображаемые на оси ординат (ось Y) и являются данными значения графиков, в то время как на оси абсцисс значения отображаются автоматически, а затем заменяются надписями, содержащимися в кавычках.
Ниже приведено содержание одного из файлов, остальные файлы создаются по аналогии.
Как видно все данные разнесены на отдельные строки. Данная конфигурация нужна для дальнейшего копирования отдельных строк с данными и записи их в переменные, после чего данный файл будет перезаписан. В новом файле будут отсутствовать первое значение и добавляться последнее. Данную процедуру производит программа, написанная на «Python» - i2c_Data.py. i2c_Data.py будет обновлять вышерассмотренные файлы два раза в сутки в 11 и 23 часа. Таким образом графики будут изменяться два раза в сутки.
В отладочной версии программа i2c_Data.py не используется, но в любом случае файлы должны иметь необходимое заполнение. В архиве имеются данные файлы доступные по кнопке в конце статьи.
Теперь рассмотрим файл «График.html». Данный файл содержит три контейнера в которых будут отображаться графики. Для отображения одного графика используются два файла - один Data.txt, а второй файл со значениями параметра.
Скрипты на «javascript» записывают из файлов данные в массивы dat1, dat2, dat3, dat4, dat5. В каждый контейнер программы на «javascript» выводят построение графиков используя данные массивов.
Ниже приведен html код файла «График.html».
<!DOCTYPE HTML PUBLIC > <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>График</title> <!-- Прописываем пути к библиотекам создания графиков --> <script src="jquery.min.js" type="text/javascript"></script> <script src="highcharts.js" type="text/javascript"></script> <!-- Прописываем пути к файлам содержащим массив данных "Температуры" --> <script type="text/javascript"> var dat1=[0]; </script> <script src="Temper_1.txt" type="text/javascript"></script> <!-- Прописываем пути к файлам содержащим массив данных "Даты" --> <script type="text/javascript"> var dat2=[0]; </script> <script src="Data.txt" type="text/javascript"></script> <!-- Прописываем пути к файлам содержащим массив данных "Атм. Давления" --> <script type="text/javascript"> var dat3=[0]; </script> <script src="Pres.txt" type="text/javascript"></script> <!-- Прописываем пути к файлам содержащим массив данных "Средней скорости ветра" --> <script type="text/javascript"> var dat4=[0]; </script> <script src="Veter_cr.txt" type="text/javascript"></script> <!-- Прописываем пути к файлам содержащим массив данных "Максимальной скорости ветра" --> <script type="text/javascript"> var dat5=[0]; </script> <script src="Veter_max.txt" type="text/javascript"></script> <!-- График температуры - данные читаются из двух файлов (для оси ординат и абсцисс соответственно) --> <script type="text/javascript"> var chart; $(document).ready(function(){ chart = new Highcharts.Chart({ chart: {renderTo: 'container'}, series: [{name: 'Температура',data: dat1, zones: [{value: 0,color: '#00ade9'},{color: '#f6a655'}] }], title: {text: 'График температуры.'}, xAxis: {categories: dat2,}, yAxis: {title: {text: 'Температура (\xB0C)'}}, plotOptions: {line: {dataLabels: {enabled: true}}}, }); }); </script> <!-- График Атм. давления - данные читаются из двух файлов (для оси ординат и абсцисс соответственно) --> <script type="text/javascript"> var chart1; $(document).ready(function(){ chart1 = new Highcharts.Chart({ chart: {renderTo: 'container1'}, series: [{name: 'Давление',data: dat3 ,color: '#6a6cb0'}], title: {text: 'График давления.'}, xAxis: {categories: dat2,}, yAxis: {title: {text: 'Атм. давление (мм.рт.ст.)'}}, plotOptions: {line: {dataLabels: {enabled: true}}}, }); }); </script> <!-- График Скорости ветра (средняя и максимальная) - данные читаются из трёх файлов (два для оси ординат и один абсцисс соответственно) --> <script type="text/javascript"> var chart2; $(document).ready(function(){ chart1 = new Highcharts.Chart({ chart: {renderTo: 'container2'}, series: [{name: 'Скорость ветра средняя',data: dat4 ,color: '#008180' ,dashStyle: 'longdash'}, {name: 'Скорость ветра максимальная.',data: dat5 ,color: '#00aca5' ,dashStyle: 'shortdot'} ], title: {text: 'Скорость ветра средняя.'}, xAxis: {categories: dat2,}, yAxis: {title: {text: 'Скорость ветра (м/c)'}}, plotOptions: {line: {dataLabels: {enabled: true}}}, }); }); </script> <!-- Выводим графики в отдельные контейнеры --> <body> <div id="container" style="width: 700px; height: 400px "> </div> <div id="container1" style="width: 700px; height: 400px "> </div> <div id="container2" style="width: 700px; height: 400px "> </div> </body> </head> </html>
На этом с построением графиков всё, далее рассмотрим интеграцию данного кода в код метеостанции.
Ну вот и добрались до «оконечной версии». Здесь рассмотрим интеграцию выше рассмотренного кода в код сервера метеостанции рассмотренный в статье «Сервер на Raspberry PI4 для метеостанции».
Выше рассмотренные текстовые файлы (Data.txt, Pres.txt, Temper_1.txt, Veter_cr.txt, Veter_max.txt) остаются без изменения и размещаются на сервере по адресу – /var/www/html/meteost.ru/public_html. По этому-же адресу располагаются файлы «highcharts.js», «jquery.min.js» и «index.html». Папка JS располагается там же, в папке расположен файл «znach.js» - смотрите в «Сервер на Raspberry PI4 для метеостанции».
В файл «index.html» добавляем код вышеупомянутого файла «График.html». В итоге получаем модернизированный файл «index.html», код файла приведён ниже.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Метеостанция</title> <!-- CSS описание страницы --> <style type="text/css"> body { width: 700px; font-family: Arial, Verdana, sans-serif; font-size: 110%; color: #666; background-color: #f8f8f8; margin: 10px auto auto auto;} h1 {margin: 0px auto 0px 230px;} table { border-spacing: 0px; margin: 0px auto 0px auto;} th, td { padding: 5px 30px 5px 10px; border-spacing: 0px; font-size: 95%; margin: 0px;} th, td { text-align: left; background-color: #e0e9f0; border-top: 1px solid #cbd2d8; border-right: 1px solid #cbd2d8;} tr.head th { color: fff; background-color: #90b4d6; border-bottom: 2px solid #547ca0; border-right: 1px solid #749abe; border-top: 1px solid #90b4d6; text-align: center; text-shadow: -1px -1px 1px #666; letter-spacing: 0.15em;} td { text-shadow: 1px 1px 1px #fff; text-align: center;} tr.even td, tr.even th { background-color: #e8eff5;} tr.head th:first-child { border-top-left-radius: 5px;} tr.head th:last-child { border-top-right-radius: 5px;} fieldset { width: 310px; margin-top: 20px; border: 1px solid #d6d6d6; background-color: #ffffff; line-height: 1.6em;} legend { font-style: italic; color: #666666;} input[type="text"] { width: 120px; border: 1px solid #d6d6d6; padding: 2px; outline: none;} input[type="text"]:focus, input[type="text"]:hover { background-color: #d0e2f0; border: 1px solid #999;} input[type="submit"] { border: 1px solid #006633; background-color: #009966; color: #ffffff; border-radius: 5px; padding: 5px; margin-top: 10px;} input[type="submit"]:hover { border: 1px solid #006633; background-color: #00cc33; color: #ffffff; cursor: pointer;} .title { float: left; width: 160px; clear: left;} .submit { width: 310px; text-align: right;} td.lef {text-align: left;} div {margin: 10px auto auto auto;} </style> <!-- Прописываем пути к библиотекам создания графиков --> <script src="jquery.min.js" type="text/javascript"></script> <script src="highcharts.js" type="text/javascript"></script> <!-- Прописываем пути к файлам содержащим массив данных "Температуры" --> <script type="text/javascript"> var dat1=[0]; </script> <script src="Temper_1.txt" type="text/javascript"></script> <!-- Прописываем пути к файлам содержащим массив данных "Даты" --> <script type="text/javascript"> var dat2=[0]; </script> <script src="Data.txt" type="text/javascript"></script> <!-- Прописываем пути к файлам содержащим массив данных "Атм. Давления" --> <script type="text/javascript"> var dat3=[0]; </script> <script src="Pres.txt" type="text/javascript"></script> <!-- Прописываем пути к файлам содержащим массив данных "Средней скорости ветра" --> <script type="text/javascript"> var dat4=[0]; </script> <script src="Veter_cr.txt" type="text/javascript"></script> <!-- Прописываем пути к файлам содержащим массив данных "Максимальной скорости ветра" --> <script type="text/javascript"> var dat5=[0]; </script> <script src="Veter_max.txt" type="text/javascript"></script> <!-- ------------- Создаём таблицу с данными полученными от метеостанции ------------- --> </head> <body> <h1>Метеостанция</h1> <p>В таблице отображаются параметры переданные с внешнего (уличного) блока метеостанции (с. Троицкое).</p> <table> <tr class="head"> <th>Параметр</th> <th>Значение</th> <th>Ед. изм.</th> </tr> <tr> <th>Температура на улице</th> <td id="temper"></td> <td class="lef">°С</td> </tr> <tr class="even"> <th>Влажность на улице</th> <td id="vlash"></td> <td class="lef">%</td> </tr> <tr> <th>Направление ветра</th> <td id="napr"></td> <td id="napr1" class="lef"> </td> </tr> <tr class="even"> <th>Скорость ветра (сред.)</th> <td id="skor_s"></td> <td class="lef">м/с</td> </tr> <tr class="even"> <th>Скорость ветра (макс.)</th> <td id="skor_m"></td> <td class="lef">м/с</td> </tr> <tr> <th>Атм. Давление</th> <td id="davl"></td> <td class="lef">мм.рт.ст</td> </tr> <tr> <th></th> <td></td> <td></td> </tr> <tr> <th>Дата и время измерения показаний метеостанции</th> <td id="vrm"></td> <td id="vrm1"></td> </tr> </table> <script src="js/znach.js"></script> <p></p> <!-- ------------------- Построение графиков ---------------------- --> <!-- График температуры - данные читаются из двух файлов (для оси ординат и абсцисс соответственно) --> <script type="text/javascript"> var chart; $(document).ready(function(){ chart = new Highcharts.Chart({ chart: {renderTo: 'container'}, series: [{name: 'Температура',data: dat1, zones: [{value: 0,color: '#00ade9'},{color: '#f6a655'}] }], title: {text: 'График температуры.'}, xAxis: {categories: dat2,}, yAxis: {title: {text: 'Температура (\xB0C)'}}, plotOptions: {line: {dataLabels: {enabled: true}}}, }); }); </script> <!-- График Атм. давления - данные читаются из двух файлов (для оси ординат и абсцисс соответственно) --> <script type="text/javascript"> var chart1; $(document).ready(function(){ chart1 = new Highcharts.Chart({ chart: {renderTo: 'container1'}, series: [{name: 'Давление',data: dat3 ,color: '#6a6cb0'}], title: {text: 'График атмосферного давления.'}, xAxis: {categories: dat2,}, yAxis: {title: {text: 'Атм. давление (мм.рт.ст.)'}}, plotOptions: {line: {dataLabels: {enabled: true}}}, }); }); </script> <!-- График Скорости ветра (средняя и максимальная) - данные читаются из трёх файлов (два для оси ординат и один абсцисс соответственно) --> <script type="text/javascript"> var chart2; $(document).ready(function(){ chart1 = new Highcharts.Chart({ chart: {renderTo: 'container2'}, series: [{name: 'Скорость ветра средняя',data: dat4 ,color: '#008180' ,dashStyle: 'longdash'}, {name: 'Скорость ветра максимальная.',data: dat5 ,color: '#00aca5' ,dashStyle: 'shortdot'} ], title: {text: 'Скорость ветра средняя и максимальная.'}, xAxis: {categories: dat2,}, yAxis: {title: {text: 'Скорость ветра (м/c)'}}, plotOptions: {line: {dataLabels: {enabled: true}}}, }); }); </script> <!-- Выводим графики в отдельные контейнеры --> <div id="container" style="width: 700px; height: 400px "> </div> <div id="container1" style="width: 700px; height: 400px "> </div> <div id="container2" style="width: 700px; height: 400px "> </div> </body> </html>
В принципе если сейчас запустить файл «index.html», то мы получим готовую Html страницу, просматриваемую через браузер.
Для того чтобы графики обновлялись два раза в сутки (в 11 и 23 часа , в архиве имеется файл в котором время устанавливается 1 и 13 часов), а старые данные недельной давности удалялись, необходимо модернизировать файл «i2c_Data.py». Данный файл расположен на сервере по адресу - /home/ubuntu. Файл «i2c_Data.py» должен быть в автозагрузке при запуске ОС (См. «Сервер на Raspberry PI4 для метеостанции»).
Данная программа будет копировать данные с текстовых файлов, удалять данные недельной давности, добавлять последние измеренные данные и переписывать в те же самые файлы.
Ниже представлен код (написанный на Python) модернизированного файла «i2c_Data.py».
Далее загружаем фал на сервер по вышеуказанному адресу. Настройки сервера смотрите в «Сервер на Raspberry PI4 для метеостанции».
Перезагружаем сервер и заходим на сервер через браузер с внешнего компьютера.
В результате должна появиться подобная картинка.