Oct-01-2020, 06:36 AM
Hi all. I'm new to Python, but have some experience in HTML/CSS/JS. I'm running Raspberry Pi to be able to monitor my daughter's rabbit in the shed outside. So far I've been able to accomplish the following:
-RPI webpage (created with a Python example script), displaying the camera (mjpeg) stream can be accessed via dynamic dns :)
-Another Python script that access the temperature sensor works in console :)
Now, my challenge here is to display the output of the temperature script on the same Python generated webpage, which displays the camera stream. I've been banging my head with this for a few days, but I just cannot grasp the thing how to "access" the temperature script output from the webpage :/ Like I said the Python code generating the webpage is not my creation, but an example from the internets.
Could someone more experienced help me accomplish this what I'm trying to achieve here? The more simple solution, the better :)
Here's the script that creates the webpage and displays the mjpeg stream:
-RPI webpage (created with a Python example script), displaying the camera (mjpeg) stream can be accessed via dynamic dns :)
-Another Python script that access the temperature sensor works in console :)
Now, my challenge here is to display the output of the temperature script on the same Python generated webpage, which displays the camera stream. I've been banging my head with this for a few days, but I just cannot grasp the thing how to "access" the temperature script output from the webpage :/ Like I said the Python code generating the webpage is not my creation, but an example from the internets.
Could someone more experienced help me accomplish this what I'm trying to achieve here? The more simple solution, the better :)
Here's the script that creates the webpage and displays the mjpeg stream:
# Web streaming example # Source code from the official PiCamera package # http://picamera.readthedocs.io/en/latest/recipes2.html#web-streaming import io import picamera import logging import socketserver from threading import Condition from http import server PAGE="""\ <html> <head> <title>Raspberry Pi - Surveillance Camera</title> </head> <body> <center><h1>Raspberry Pi - Surveillance Camera</h1></center> <center><img src="stream.mjpg" width="1280" height="720"></center> </body> </html> """ class StreamingOutput(object): def __init__(self): self.frame = None self.buffer = io.BytesIO() self.condition = Condition() def write(self, buf): if buf.startswith(b'\xff\xd8'): # New frame, copy the existing buffer's content and notify all # clients it's available self.buffer.truncate() with self.condition: self.frame = self.buffer.getvalue() self.condition.notify_all() self.buffer.seek(0) return self.buffer.write(buf) class StreamingHandler(server.BaseHTTPRequestHandler): def do_GET(self): if self.path == '/': self.send_response(301) self.send_header('Location', '/index.html') self.end_headers() elif self.path == '/index.html': content = PAGE.encode('utf-8') self.send_response(200) self.send_header('Content-Type', 'text/html') self.send_header('Content-Length', len(content)) self.end_headers() self.wfile.write(content) elif self.path == '/stream.mjpg': self.send_response(200) self.send_header('Age', 0) self.send_header('Cache-Control', 'no-cache, private') self.send_header('Pragma', 'no-cache') self.send_header('Content-Type', 'multipart/x-mixed-replace; boundary=FRAME') self.end_headers() try: while True: with output.condition: output.condition.wait() frame = output.frame self.wfile.write(b'--FRAME\r\n') self.send_header('Content-Type', 'image/jpeg') self.send_header('Content-Length', len(frame)) self.end_headers() self.wfile.write(frame) self.wfile.write(b'\r\n') except Exception as e: logging.warning( 'Removed streaming client %s: %s', self.client_address, str(e)) else: self.send_error(404) self.end_headers() class StreamingServer(socketserver.ThreadingMixIn, server.HTTPServer): allow_reuse_address = True daemon_threads = True with picamera.PiCamera(resolution='1280x720', framerate=24) as camera: output = StreamingOutput() #Uncomment the next line to change your Pi's Camera rotation (in degrees) #camera.rotation = 90 camera.start_recording(output, format='mjpeg') try: address = ('', 8000) server = StreamingServer(address, StreamingHandler) server.serve_forever() finally: camera.stop_recording()Here's the script that shows the temperature reading in console:
import os import glob import time os.system('modprobe w1-gpio') os.system('modprobe w1-therm') base_dir = '/sys/bus/w1/devices/' device_folder = glob.glob(base_dir + '28*')[0] device_file = device_folder + '/w1_slave' def read_temp_raw(): f = open(device_file, 'r') lines = f.readlines() f.close() return lines def read_temp(): lines = read_temp_raw() while lines[0].strip()[-3:] != 'YES': time.sleep(0.2) lines = read_temp_raw() equals_pos = lines[1].find('t=') if equals_pos != -1: temp_string = lines[1][equals_pos+2:] temp_c = float(temp_string) / 1000.0 temp_f = temp_c * 9.0 / 5.0 + 32.0 return temp_c, temp_f while True: print(read_temp()) time.sleep(1)