user3808687
user3808687

Reputation: 1

Python script for polling Raspberry Pi internal SoC temperature

I have been cobbling together a script from multiple sources to poll my Raspberry Pi's internal SoC temperature. I want to then stream that data to my Plotly account.

I have a semi-working script but once the chip temp is read, it continues streaming that temperature indefinitely. As a noob to Python, I cannot seem to figure out how to take the temperature (on a user-set interval) and continuously update it with a fresh value. My code is below:

#!/usr/bin/env python

import plotly.plotly as py # plotly library
from plotly.graph_objs import * # all plotly graph objects
import json # used to parse config.json
import time # timer functions
import datetime
import os # used to acquire internal SoC temperature
import sys

# Initialize some variables with your credentials
with open('./config.json') as config_file:
    plotly_user_config = json.load(config_file)

username = plotly_user_config['plotly_username']
api_key = plotly_user_config['plotly_api_key']
stream_token = plotly_user_config['plotly_streaming_tokens'][0]

# Initialize a Plotly Object
py.sign_in(username, api_key)

# Initialize your graph (not streaming yet)
data = [Scatter(
    x=[],y=[],
    mode='lines+markers',
    stream={'token': stream_token, 'maxpoints': 1000},
    name='UCBPD')
]
layout = Layout(
    title='Raspberry Pi Temperature',
    xaxis={'autorange': True, 'title': 'Time of Day'},
    yaxis={'autorange': True, 'title': 'Degrees (Celsuis)'}
)
your_graph_url = py.plot(Figure(data=data, layout=layout), filename='Raspberry Pi     Temp', auto_open=False)

# Acquire internal SoC temperature
cmd = '/opt/vc/bin/vcgencmd measure_temp'
line = os.popen(cmd).readline().strip()

if "error" in line:
    print "Error ... is your firmware up-to-date? Run rpi-update"
else:
  # line now contains something like: temp=41.2'C
  # to get the temperature, split on =, and then on '

    temp = line.split('=')[1].split("'")[0]

# Initialize the Plotly Streaming Object
stream = py.Stream(stream_token)
stream.open()

# Start looping and streaming!
while True:
    stream.write({'x': datetime.datetime.now(), 'y': temp})
    time.sleep(1) # delay between stream posts

Upvotes: 0

Views: 1337

Answers (1)

David Grayson
David Grayson

Reputation: 87386

Whatever code sets the value of the temp (temperature) variable needs to be in the while loop or else there is no way the temperature variable can change.

If you continue to have trouble you should simplify this by removing the config file and the graphing, and just print raw readings to the console.

Upvotes: 1

Related Questions