Jako że jetem kompletnym laikiem jeśli chodzi o środowisko php, mysql - pozwoliłem sobie zamieścić tutaj (jeśli nie ten dział to proszę o przeniesienie) prośbę o pomoc.
Jestem piwowarem domowym i ostatnio wpadła mi w ręce fajna zabaweczka, tj. modulik ESP8266 dzięki, któremu mam możliwość sterowania i kontroli temperatury
fermentacji piwa w lodówce. Na chwilę obecną dane wrzucam na thingspeak'a tutaj macie podgląd. Koledze z forum piwo.org
udało się stworzyć skrypt który daję bardziej rozbudowany i czytelny wykres - podesłał mi do niego kod a ja niestety nie potrafię go odpowiednio "użyć". Stworzyłem sobie domenę
na darmowym serwisie hostinger.pl która obsługuję php i mysql i na tym moje umiejętności się kończą - dlatego proszę Was o pomoc w złożeniu tego w całość abym mógł w pełni wykorzystać ten modulik.
Poniżej podam Wam treść wiadomości priv kolegi, który mi udostępnił ten kod:
Najpierwskrypt zbierający dane:
wrzuć go przez SSH i dodaj go do crontab żeby co 10minut się łączył
#!/bin/bash cd /var wget [url="http://ADRES_STEROWNIKA/ster"]http://ADRES_STEROWNIKA/ster[/url] -o /dev/null if [ ! -f "/var/input" ]; then if [ ! -f "/var/wylacz" ]; then fi exit 1 fi if [ -f "/var/wylacz" ]; then rm /var/wylacz fi plik=$(cat /var/ster) onoff=`cat ster | grep Aktualna | sed 's/.*Zalaczony=<\/p><\/th><th><p align=left>//' | sed 's/<\/p><\/th><\/tr><tr><th$ temp=`cat ster | grep Aktualna | sed 's/.*temperatura=<\/p><\/th><th><p align=left>//' | sed 's/<koniectempertury><\/p>$ rm /var/input mysql -u UZYTKOWNIK_MYSQL -pHASLO_MYSQL -e "INSERT INTO BAZA_DANYCH.TABLICA (temperatura, onoff) VALUES ('$temp', '$onoff');"
tu musisz się sedem pobawić bo ja mam trochę inne oprogramowanie i robiłem to trochę na oślep
przy mysqlach hasło ma być bezpośrednio po -p (to nie jest błąd!)
Potem skrypt PHP:
Musisz się pobawić i poustawiać to pod siebie i ściagnąć bibliotekę jquery oraz highcharts (ogolnie dostepne)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html;CHARSET=UTF-8"> <meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate"> <meta http-equiv="Cache-Control" content="post-check=0, pre-check=0"> <meta http-equiv="Pragma" content="no-cache"> <title>Temperatura w komorze fermentacyjnej</title> <script type="text/javascript" src="js/jquery.min.js"></script> <script src="js/highcharts.js"></script> <?php function czastworz() { return ((float)$usec + (float)$sec); } $cz = czastworz(); $teraz=$teraz+3600; $wroc=$teraz-(30*86400); // 30 dni $zapytanie = mysql_query("SELECT sztempel, temperatura FROM TABLICA WHERE temperatura is not null and sztempel < '".date("Y-m-d H:i:s",$teraz)."'$were"); $temp .= "[".$data.",".$wiersz[1]."],"; } $zapytanie = mysql_query("SELECT sztempel, onoff FROM TABLICA WHERE onoff is not null and sztempel < '".date("Y-m-d H:i:s",$teraz)."'$were"); $wl .= "[".$data.",".$wiersz[1]."],"; ?> <script type="text/javascript"> $(function () { Highcharts.setOptions({ lang: { resetZoom: 'Cofnij', resetZoomTitle: 'Kliknij by zobaczyć cały wykres', months: ['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'], shortMonths: ['Sty', 'Luty', 'Marz', 'Kwie', 'Maj', 'Cze', 'Lip', 'Sie', 'Wrz', 'Paźdz', 'Lis', 'Gru'], weekdays: ['Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota']} }); Highcharts.theme = { chart: { backgroundColor: '#FFFFFF', borderColor: '#BBBBBB', borderWidth: 1, shadow: true, plotShadow: false,margin: [55,75,30,65] }, credits: { enabled: false }, legend: { enabled: false }, xAxis: { labels: {style: {color: '#000000'}}, gridLineWidth: 0.3, gridLineDashStyle: 'longdash' }, yAxis: { tickWidth: 1, tickColor: "#000", labels: {style: {color: '#000000'}}}, tooltip: { dateTimeLabelFormats:{hour:"%A, %e %B, %H:%M"} }, plotOptions: { series: { marker: { enabled: false, states: { hover: { enabled: true }}}}} }; var highchartsOptions = Highcharts.setOptions(Highcharts.theme); $('#divTemp').highcharts({ chart: { type: 'spline', zoomType: 'x' }, title: { text: 'Komora fermentacyjna', x: -20 }, subtitle: { text: 'malinowy.eu', x: -20 }, xAxis: { type: 'datetime', maxZoom: 2 * 3600000, // 2 godziny title: { text: null },}, yAxis: [{ title: { text: 'Temperatura [°C]' }, tickinterval: 0.5, min: 1, max: 20, plotLines: [{ value: 0, width: 1,color: '#808080' }], opposite: true }, { title: { text: 'Czy włączone?'}, min: 0, max: 6, tickinterval: 1 ,plotLines: [{ value: 0, width: 1, color: '#808080'}], opposite: false }], legend: { layout: 'vertical', align: 'right', verticalAlign: 'middle', borderWidth: 0 }, series: [{ type: 'areaspline', fillColor : { linearGradient : { x1: 0, y1: 0, x2: 0, y2: 1 }, stops : [[0, Highcharts.getOptions().colors[5]], [1, Highcharts.Color(Highcharts.getOptions().colors[5]).setOpacity(0).get('rgba')]]}, tooltip: { valueSuffix: '°C' }, name: 'Temperatura', color: 5, yAxis: 0, { yAxis: 1, tooltip: { valueSuffix: '' }, name: 'Włączone', }); }); </script> </head> <body> <div id="divTemp" style="width: 900px; height: 500px; margin: 0 auto"></div> <font size=1 color=#dcdcdc> <?php } $czk = czastworz(); ?> </font> </body>
Ja mam bazę danych ustawioną tak:
ID, sztempel, temperatura, onoff
id - numer kolejny
sztempel - czas utworzenia wpisu
edit. Zapomniałem podać linka jak wygląda taki wykres z powyższego kodu tutaj link