<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="lt">
	<id>https://wiki.eofnet.lt/w//index.php?action=history&amp;feed=atom&amp;title=Raspberry_temp</id>
	<title>Raspberry temp - Versijų istorija</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.eofnet.lt/w//index.php?action=history&amp;feed=atom&amp;title=Raspberry_temp"/>
	<link rel="alternate" type="text/html" href="https://wiki.eofnet.lt/w//index.php?title=Raspberry_temp&amp;action=history"/>
	<updated>2026-04-15T20:48:05Z</updated>
	<subtitle>Šio puslapio versijų istorija projekte</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.eofnet.lt/w//index.php?title=Raspberry_temp&amp;diff=8925&amp;oldid=prev</id>
		<title>\dev\null 20:03, 13 birželio 2019</title>
		<link rel="alternate" type="text/html" href="https://wiki.eofnet.lt/w//index.php?title=Raspberry_temp&amp;diff=8925&amp;oldid=prev"/>
		<updated>2019-06-13T20:03:55Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Naujas puslapis&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
== RasperryPI/OrangePI temp ==&lt;br /&gt;
&lt;br /&gt;
[[Vaizdas:Screenshot 2019-06-13 at 18.37.39.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
import os&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
def measure_temp():&lt;br /&gt;
        tFile = open('/sys/class/thermal/thermal_zone0/temp')&lt;br /&gt;
        temp = round((float(tFile.read())/1000),2)&lt;br /&gt;
        return temp&lt;br /&gt;
&lt;br /&gt;
print(measure_temp())&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sudedam į '''/usr/local/bin/cpu_temp.py'''&lt;br /&gt;
 chmod +x /usr/local/bin/cpu_temp.py&lt;br /&gt;
&lt;br /&gt;
== CPU Temp tinklo resursas ==&lt;br /&gt;
&lt;br /&gt;
[[Vaizdas:Screenshot 2019-06-13 at 23.01.00.png|800px]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python2.7&lt;br /&gt;
# HW Reporting REST API&lt;br /&gt;
# (c) 2018-2019 justinas@eofnet.lt&lt;br /&gt;
# INSTALL: apt-get install python-pip; pip install python-daemon bottle&lt;br /&gt;
import sys, os&lt;br /&gt;
from time import sleep&lt;br /&gt;
import argparse&lt;br /&gt;
import daemon&lt;br /&gt;
import logging&lt;br /&gt;
import subprocess&lt;br /&gt;
import json&lt;br /&gt;
import re&lt;br /&gt;
from bottle import run, post, request, response, get, route&lt;br /&gt;
&lt;br /&gt;
if not os.getegid() == 0:&lt;br /&gt;
      sys.exit('Script must be run as root')&lt;br /&gt;
&lt;br /&gt;
def measure_temp():&lt;br /&gt;
        tFile = open('/sys/class/thermal/thermal_zone0/temp')&lt;br /&gt;
        temp = round((float(tFile.read())/1000),2)&lt;br /&gt;
        return temp&lt;br /&gt;
&lt;br /&gt;
def daemonize():&lt;br /&gt;
	    print (&amp;quot;Daemonizing..&amp;quot;)&lt;br /&gt;
            @route('/temp')&lt;br /&gt;
            def returntemp():&lt;br /&gt;
               temp = measure_temp()&lt;br /&gt;
               respond = { &amp;quot;answer&amp;quot;: temp }&lt;br /&gt;
               return json.dumps(respond)&lt;br /&gt;
	    run(host='0.0.0.0', port=1414, debug=False)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    parser = argparse.ArgumentParser(description='HW info REST API (c) 2019 justinas@eofnet.lt, EOFNET LAB10',&lt;br /&gt;
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)&lt;br /&gt;
    parser.add_argument('--temp', action='store_true')&lt;br /&gt;
    parser.add_argument('--daemonize',action='store_true')&lt;br /&gt;
    args = parser.parse_args()&lt;br /&gt;
    try:&lt;br /&gt;
       if args.temp:&lt;br /&gt;
         print measure_temp()&lt;br /&gt;
       elif args.daemonize:&lt;br /&gt;
         daemonize()&lt;br /&gt;
       else:&lt;br /&gt;
          print &amp;quot;No arguments specified&amp;quot;&lt;br /&gt;
    except KeyboardInterrupt:&lt;br /&gt;
        pass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''hw_info.service'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Power Switch Relay Network Service&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/usr/local/bin/hw_info.py --daemonize&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Įdedam šį servisą į '''/etc/systemd/system''' ir įjungiam&lt;br /&gt;
 systemctl enable hw_info&lt;br /&gt;
 systemctl start hw_info&lt;br /&gt;
&lt;br /&gt;
== RRD Temperatūrų grafikai keliems įrenginiams ==&lt;br /&gt;
&lt;br /&gt;
Sugalvota užduotis, monitorinti kelių Raspberių ir Orange'ų temperatūras centriniame serveryje. Turime šiuos įrenginius:&lt;br /&gt;
# lokalus serveris 127.0.0.1 # monitorinsime [[lm sensors monitoring|taip]].&lt;br /&gt;
# relayswitch 192.168.254.102&lt;br /&gt;
# cam1 192.168.254.101&lt;br /&gt;
# cam4 192.168.254.104&lt;br /&gt;
# cam5 192.168.254.105&lt;br /&gt;
# rpitv 192.168.254.9&lt;br /&gt;
&lt;br /&gt;
=== Įdiegiame mums reikalingus įrankius ===&lt;br /&gt;
&lt;br /&gt;
 apt-get install rrdtool python2.7 python-requests python-rrdtool&lt;br /&gt;
&lt;br /&gt;
=== Sukuriame RRD ===&lt;br /&gt;
&lt;br /&gt;
 rrdtool create /etc/mods/devices_temp.rrd --step 60 \&lt;br /&gt;
 DS:server:GAUGE:120:0:100 \&lt;br /&gt;
 DS:relay:GAUGE:120:0:100 \&lt;br /&gt;
 DS:cam1:GAUGE:120:0:100 \&lt;br /&gt;
 DS:cam4:GAUGE:120:0:100 \&lt;br /&gt;
 DS:cam5:GAUGE:120:0:100 \&lt;br /&gt;
 DS:rpitv:GAUGE:120:0:100 \&lt;br /&gt;
 RRA:AVERAGE:0.5:1:1440 \&lt;br /&gt;
 RRA:MIN:0.5:1:1440 \&lt;br /&gt;
 RRA:MAX:0.5:1:1440&lt;br /&gt;
&lt;br /&gt;
=== Python scriptas atnaujinimui ir grafikų braižymui ===&lt;br /&gt;
&lt;br /&gt;
'''iot_rrd.py'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python2.7&lt;br /&gt;
# Bidon script for gathering networked devices informations such as temperatures and other equipment and make nice RRD Graphs :)&lt;br /&gt;
# (c) 2019 justinas@eofnet.lt&lt;br /&gt;
# apt install python-rrdtool&lt;br /&gt;
import time&lt;br /&gt;
import argparse as ap&lt;br /&gt;
from rrdtool import update as rrd_update&lt;br /&gt;
import rrdtool&lt;br /&gt;
import requests&lt;br /&gt;
import json&lt;br /&gt;
&lt;br /&gt;
rrd_file = &amp;quot;/etc/mods/devices_temp.rrd&amp;quot;&lt;br /&gt;
devices = [{&amp;quot;name&amp;quot;:&amp;quot;server&amp;quot;, &amp;quot;host&amp;quot;:&amp;quot;127.0.0.1&amp;quot;, &amp;quot;color&amp;quot;:&amp;quot;#ff0000&amp;quot;},&lt;br /&gt;
              {&amp;quot;name&amp;quot;:&amp;quot;relay&amp;quot;, &amp;quot;host&amp;quot;:&amp;quot;192.168.254.102&amp;quot;, &amp;quot;color&amp;quot;:&amp;quot;#0000ff&amp;quot;},&lt;br /&gt;
              {&amp;quot;name&amp;quot;:&amp;quot;cam1&amp;quot;, &amp;quot;host&amp;quot;:&amp;quot;192.168.254.101&amp;quot;, &amp;quot;color&amp;quot;:&amp;quot;#3cb371&amp;quot;},&lt;br /&gt;
              {&amp;quot;name&amp;quot;:&amp;quot;cam4&amp;quot;, &amp;quot;host&amp;quot;:&amp;quot;192.168.254.104&amp;quot;, &amp;quot;color&amp;quot;:&amp;quot;#ee82ee&amp;quot;},&lt;br /&gt;
              {&amp;quot;name&amp;quot;:&amp;quot;cam5&amp;quot;, &amp;quot;host&amp;quot;:&amp;quot;192.168.254.105&amp;quot;, &amp;quot;color&amp;quot;:&amp;quot;#ffa500&amp;quot;},&lt;br /&gt;
              {&amp;quot;name&amp;quot;:&amp;quot;rpitv&amp;quot;, &amp;quot;host&amp;quot;:&amp;quot;192.168.254.9&amp;quot;, &amp;quot;color&amp;quot;:&amp;quot;#6a5acd&amp;quot;}]&lt;br /&gt;
&lt;br /&gt;
def temp_data(host):&lt;br /&gt;
      try:&lt;br /&gt;
        response = requests.get('http://'+host+':1414/temp')&lt;br /&gt;
        data = json.loads(response.content)&lt;br /&gt;
        if data[&amp;quot;answer&amp;quot;] is not None:&lt;br /&gt;
          return str(data[&amp;quot;answer&amp;quot;])&lt;br /&gt;
        else:&lt;br /&gt;
          return &amp;quot;0&amp;quot;&lt;br /&gt;
      except:&lt;br /&gt;
        return &amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def UpdateRRD():&lt;br /&gt;
   template = &amp;quot;N&amp;quot;&lt;br /&gt;
   for device in devices:&lt;br /&gt;
     tempc = temp_data(device[&amp;quot;host&amp;quot;])&lt;br /&gt;
     template = template + &amp;quot;:&amp;quot;+tempc&lt;br /&gt;
     print &amp;quot;Device: &amp;quot;+device[&amp;quot;name&amp;quot;]+&amp;quot; temp: &amp;quot;+tempc+&amp;quot;C&amp;quot;&lt;br /&gt;
   ret = rrd_update(rrd_file, template)&lt;br /&gt;
   if ret:&lt;br /&gt;
     print rrdtool.error()&lt;br /&gt;
&lt;br /&gt;
def GenDefs():&lt;br /&gt;
  defs = []&lt;br /&gt;
  for device in devices:&lt;br /&gt;
    defs.append(&amp;quot;DEF:&amp;quot;+device[&amp;quot;name&amp;quot;]+&amp;quot;=&amp;quot;+rrd_file+&amp;quot;:&amp;quot;+device[&amp;quot;name&amp;quot;]+&amp;quot;:AVERAGE&amp;quot;)&lt;br /&gt;
  return defs&lt;br /&gt;
&lt;br /&gt;
def GenLines():&lt;br /&gt;
  lines = []&lt;br /&gt;
  count = 1&lt;br /&gt;
  for device in devices:&lt;br /&gt;
    lines.append(&amp;quot;LINE&amp;quot;+str(count)+&amp;quot;:&amp;quot;+device[&amp;quot;name&amp;quot;]+device[&amp;quot;color&amp;quot;]+&amp;quot;:&amp;quot;+device[&amp;quot;name&amp;quot;])&lt;br /&gt;
    lines.append(&amp;quot;GPRINT:&amp;quot;+device[&amp;quot;name&amp;quot;]+&amp;quot;:LAST:Last\:%8.2lf %s&amp;quot;)&lt;br /&gt;
    lines.append(&amp;quot;GPRINT:&amp;quot;+device[&amp;quot;name&amp;quot;]+&amp;quot;:MIN:Min\:%8.2lf %s&amp;quot;)&lt;br /&gt;
    lines.append(&amp;quot;GPRINT:&amp;quot;+device[&amp;quot;name&amp;quot;]+&amp;quot;:AVERAGE:Average\:%8.2lf %s&amp;quot;)&lt;br /&gt;
    lines.append(&amp;quot;GPRINT:&amp;quot;+device[&amp;quot;name&amp;quot;]+&amp;quot;:MAX:Max\:%8.2lf %s\\n&amp;quot;)&lt;br /&gt;
    count += 1&lt;br /&gt;
  return lines&lt;br /&gt;
&lt;br /&gt;
def MakeNiceGraph():&lt;br /&gt;
   for sched in ['daily' , 'weekly', 'monthly', 'yearly']:&lt;br /&gt;
    if sched == 'weekly':&lt;br /&gt;
        period = 'w'&lt;br /&gt;
    elif sched == 'daily':&lt;br /&gt;
        period = 'd'&lt;br /&gt;
    elif sched == 'monthly':&lt;br /&gt;
        period = 'm'&lt;br /&gt;
    elif  sched == 'yearly':&lt;br /&gt;
        period = 'y'&lt;br /&gt;
    ret = rrdtool.graph( &amp;quot;/var/www/html/temp-%s.png&amp;quot; %(sched), &amp;quot;--start&amp;quot;, &amp;quot;-1%s&amp;quot; %(period), &amp;quot;--vertical-label=Temperatura&amp;quot;,&lt;br /&gt;
         '--watermark=Temperatures of the devices',&lt;br /&gt;
         &amp;quot;-w 800 -h 400&amp;quot;,&lt;br /&gt;
         GenDefs(), GenLines())&lt;br /&gt;
&lt;br /&gt;
parser = ap.ArgumentParser(description=&amp;quot;Just another script&amp;quot;)&lt;br /&gt;
parser.add_argument(&amp;quot;--graph&amp;quot;)&lt;br /&gt;
parser.add_argument(&amp;quot;--update&amp;quot;)&lt;br /&gt;
args, leftovers = parser.parse_known_args()&lt;br /&gt;
if args.graph is not None:&lt;br /&gt;
 MakeNiceGraph()&lt;br /&gt;
elif args.update is not None:&lt;br /&gt;
 UpdateRRD()&lt;br /&gt;
else:&lt;br /&gt;
 for device in devices:&lt;br /&gt;
   print &amp;quot;Device: &amp;quot;+device[&amp;quot;name&amp;quot;]+&amp;quot; temp: &amp;quot;+temp_data(device[&amp;quot;host&amp;quot;])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sudedam visa malonumą į crontab:&lt;br /&gt;
 * * * * * root /usr/local/bin/iot_rrd.py --update RRD &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
 */5  * * * * root /usr/local/bin/iot_rrd.py --graph RRD &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:RaspberryPI]]&lt;br /&gt;
[[Category:OrangePI]]&lt;/div&gt;</summary>
		<author><name>\dev\null</name></author>
	</entry>
</feed>