Hirdetés

2024. április 25., csütörtök

Gyorskeresés

Téma összefoglaló

Téma összefoglaló

  • Utoljára frissítve: 2023-12-13 05:08:33

LOGOUT.hu

Okos Otthon összefoglaló

Összefoglaló kinyitása ▼

Hozzászólások

(#16) vargalex


vargalex
félisten

Sziasztok!

Én is jó dolognak tartom, hogy indult egy ilyen topic is. Én 2014 májusában kezdtem foglalkozni a dologgal és idő hiányában sajnos megakadt a dolog a hőmérséklet mérésnél. Egy Raspberry Pi-re van kötve 4 db DS18B20 szenzor, illetve magának a Raspberry-nek a CPU/GPU hőmérésékletét mérem. Az értékeket percenként olvassa, mySQL adatbázisba rögzíti. MySQL-ben egy trigger összesítő táblákba számolja az értékeket a gyors megjelenítés miatt. A szenzorok adatait shell script olvassa ki és hajtja végre az insert-et:

#!/bin/bash
HOST=db_host
USER=db_user
PASSWORD=db_user_pass
DATABASE=database_name
MYSQL=/usr/bin/mysql
W1_SLAVES_COUNT=0
W1_SLAVES=/sys/devices/w1_bus_master1/w1_master_slaves
W1_SLAVES_DIR=/sys/bus/w1/devices/
SQLFILE=/tmp/temperature.sql
DATUM=$(date '+%Y-%m-%d %H:%M:%S')
CPUTEMP=$(cat /sys/class/thermal/thermal_zone0/temp | awk '{ print $1/1000}')
GPUTEMP=$(/opt/vc/bin/vcgencmd measure_temp | cut -f 2 -d "=" | cut -f 1 -d "'")
PIDFILE=/run/lock/gettemps.sh.pid
if [ -r $PIDFILE ]; then
exit
fi
echo "$$" > $PIDFILE
for w1_slave in $(cat $W1_SLAVES)
do
((W1_SLAVES_COUNT++))
W1_SLAVE_CONTENT=$(cat $W1_SLAVES_DIR/$w1_slave/w1_slave)
while [ "$(echo "$W1_SLAVE_CONTENT" | head -n 1 | cut -f 12 -d " ")" != "YES" ]
do
sleep 1
W1_SLAVE_CONTENT=$(cat $W1_SLAVES_DIR/$w1_slave/w1_slave)
done
TEMPERATURE=$(echo "$W1_SLAVE_CONTENT" | tail -1 | cut -f 2 -d "=" | awk '{ print $1/1000}')
TEMPNAMES[$W1_SLAVES_COUNT]=$w1_slave
TEMPERATURES[$W1_SLAVES_COUNT]=$TEMPERATURE
done
rm -rf $SQLFILE
for i in $(seq 1 $W1_SLAVES_COUNT)
do
echo "insert into temperatures(sensor_id, temperature, datum) select id, ${TEMPERATURES[$i]}, '$DATUM' from sensors where name='${TEMPNAMES[$i]}';" >> $SQLFILE
done
#Inserting CPU temperature
echo "insert into temperatures(sensor_id, temperature, datum) select id, $CPUTEMP, '$DATUM' from sensors where name='cpu_sensor';" >> $SQLFILE
#Inserting GPU temperature
echo "insert into temperatures(sensor_id, temperature, datum) select id, $GPUTEMP, '$DATUM' from sensors where name='gpu_sensor';" >> $SQLFILE
echo "quit" >> $SQLFILE
$MYSQL --host=$HOST --user=$USER --password=$PASSWORD $DATABASE < $SQLFILE
rm $PIDFILE

A megjelenítéshez a szerver oldal php-ban készült, grafikonhoz pedig highchart-ot használok:

A grafikonba természetesen dinamukusan bele lehet nagyítani, egy ajax kéréssel a szerver oldalról lekéri a részletesebb adatokat, így a percenkénti értékek bármikor visszanézhetőek:

Most éppen várok néhány ESP8266-ot (ESP-12F-et) és van még elfekvőben DS18B20-am, így a terv szerint kicsit kiterjesztem további vezetékelés nélkül a mérést.

[ Szerkesztve ]

Alex

Copyright © 2000-2024 PROHARDVER Informatikai Kft.