Raspberry temp
Jump to navigation
Jump to search
RasperryPI/OrangePI temp[keisti]
#!/usr/bin/python
import os
import time
def measure_temp():
tFile = open('/sys/class/thermal/thermal_zone0/temp')
temp = round((float(tFile.read())/1000),2)
return temp
print(measure_temp())
Sudedam į /usr/local/bin/cpu_temp.py
chmod +x /usr/local/bin/cpu_temp.py
CPU Temp tinklo resursas[keisti]
Užkūrus šį resursą ant įvairių įrenginių RaspberryPI, OrangePI ir t.t. Galima kreipiantis į http REST API, pasiimt informaciją apie įrenginį, kol kas jis atiduoda tik temperatūrą. Bet ateityje galima pridėti daugiau įvairių dalykų. Taip atiduodamą informaciją nesunkiai galima panaudoti tinklo monitoringo sistemose pvz.: braižyti grafikus, arba tikrinti ir raportuoti apie tam tikras problemas jeigu gautas rezultatas neatitinka nustatyto.
#!/usr/bin/python2.7
# HW Reporting REST API
# (c) 2018-2019 justinas@eofnet.lt
# INSTALL: apt-get install python-pip; pip install python-daemon bottle
import sys, os
from time import sleep
import argparse
import daemon
import logging
import subprocess
import json
import re
from bottle import run, post, request, response, get, route
if not os.getegid() == 0:
sys.exit('Script must be run as root')
def measure_temp():
tFile = open('/sys/class/thermal/thermal_zone0/temp')
temp = round((float(tFile.read())/1000),2)
return temp
def daemonize():
print ("Daemonizing..")
@route('/temp')
def returntemp():
temp = measure_temp()
respond = { "answer": temp }
return json.dumps(respond)
run(host='0.0.0.0', port=1414, debug=False)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='HW info REST API (c) 2019 justinas@eofnet.lt, EOFNET LAB10',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--temp', action='store_true')
parser.add_argument('--daemonize',action='store_true')
args = parser.parse_args()
try:
if args.temp:
print measure_temp()
elif args.daemonize:
daemonize()
else:
print "No arguments specified"
except KeyboardInterrupt:
pass
hw_info.service
[Unit]
Description=Power Switch Relay Network Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/hw_info.py --daemonize
[Install]
WantedBy=multi-user.target
Įdedam šį servisą į /etc/systemd/system ir įjungiam
systemctl enable hw_info systemctl start hw_info
RRD Temperatūrų grafikai keliems įrenginiams[keisti]
Sugalvota užduotis, monitorinti kelių Raspberių ir Orange'ų temperatūras centriniame serveryje. Turime šiuos įrenginius:
- lokalus serveris 127.0.0.1 # monitorinsime taip.
- relayswitch 192.168.254.102
- cam1 192.168.254.101
- cam4 192.168.254.104
- cam5 192.168.254.105
- rpitv 192.168.254.9
Įdiegiame mums reikalingus įrankius[keisti]
apt-get install rrdtool python2.7 python-requests python-rrdtool
Sukuriame RRD[keisti]
rrdtool create /etc/mods/devices_temp.rrd --step 60 \ DS:server:GAUGE:120:0:100 \ DS:relay:GAUGE:120:0:100 \ DS:cam1:GAUGE:120:0:100 \ DS:cam4:GAUGE:120:0:100 \ DS:cam5:GAUGE:120:0:100 \ DS:rpitv:GAUGE:120:0:100 \ RRA:AVERAGE:0.5:1:1440 \ RRA:MIN:0.5:1:1440 \ RRA:MAX:0.5:1:1440
Python scriptas atnaujinimui ir grafikų braižymui[keisti]
iot_rrd.py
#!/usr/bin/python2.7
# Bidon script for gathering networked devices informations such as temperatures and other equipment and make nice RRD Graphs :)
# (c) 2019 justinas@eofnet.lt
# apt install python-rrdtool
import time
import argparse as ap
from rrdtool import update as rrd_update
import rrdtool
import requests
import json
rrd_file = "/etc/mods/devices_temp.rrd"
devices = [{"name":"server", "host":"127.0.0.1", "color":"#ff0000"},
{"name":"relay", "host":"192.168.254.102", "color":"#0000ff"},
{"name":"cam1", "host":"192.168.254.101", "color":"#3cb371"},
{"name":"cam4", "host":"192.168.254.104", "color":"#ee82ee"},
{"name":"cam5", "host":"192.168.254.105", "color":"#ffa500"},
{"name":"rpitv", "host":"192.168.254.9", "color":"#6a5acd"}]
def temp_data(host):
try:
response = requests.get('http://'+host+':1414/temp')
data = json.loads(response.content)
if data["answer"] is not None:
return str(data["answer"])
else:
return "0"
except:
return "0"
def UpdateRRD():
template = "N"
for device in devices:
tempc = temp_data(device["host"])
template = template + ":"+tempc
print "Device: "+device["name"]+" temp: "+tempc+"C"
ret = rrd_update(rrd_file, template)
if ret:
print rrdtool.error()
def GenDefs():
defs = []
for device in devices:
defs.append("DEF:"+device["name"]+"="+rrd_file+":"+device["name"]+":AVERAGE")
return defs
def GenLines():
lines = []
count = 1
for device in devices:
lines.append("LINE"+str(count)+":"+device["name"]+device["color"]+":"+device["name"])
lines.append("GPRINT:"+device["name"]+":LAST:Last\:%8.2lf %s")
lines.append("GPRINT:"+device["name"]+":MIN:Min\:%8.2lf %s")
lines.append("GPRINT:"+device["name"]+":AVERAGE:Average\:%8.2lf %s")
lines.append("GPRINT:"+device["name"]+":MAX:Max\:%8.2lf %s\\n")
count += 1
return lines
def MakeNiceGraph():
for sched in ['daily' , 'weekly', 'monthly', 'yearly']:
if sched == 'weekly':
period = 'w'
elif sched == 'daily':
period = 'd'
elif sched == 'monthly':
period = 'm'
elif sched == 'yearly':
period = 'y'
ret = rrdtool.graph( "/var/www/html/temp-%s.png" %(sched), "--start", "-1%s" %(period), "--vertical-label=Temperatura",
'--watermark=Temperatures of the devices',
"-w 800 -h 400",
GenDefs(), GenLines())
parser = ap.ArgumentParser(description="Just another script")
parser.add_argument("--graph")
parser.add_argument("--update")
args, leftovers = parser.parse_known_args()
if args.graph is not None:
MakeNiceGraph()
elif args.update is not None:
UpdateRRD()
else:
for device in devices:
print "Device: "+device["name"]+" temp: "+temp_data(device["host"])
Sudedam visa malonumą į crontab:
* * * * * root /usr/local/bin/iot_rrd.py --update RRD > /dev/null 2>&1 */5 * * * * root /usr/local/bin/iot_rrd.py --graph RRD > /dev/null 2>&1