Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/controllers/camera.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,8 @@ def get_frame(self) -> Optional[np.ndarray]:
frame = np.zeros((480, 640, 3), dtype=np.uint8) if self.black_frame else self.noise_frame()
return cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

return frame

def get_jpeg_frame(self) -> Optional[bytes]:
frame = self.get_frame()

Expand Down
21 changes: 11 additions & 10 deletions src/controllers/whitenoise.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ def __init__(self, rate=44100, chunk=1024):
self.chunk = chunk
self.running = False

self.p = pyaudio.PyAudio()
try:
self.p = pyaudio.PyAudio()
except:
self.p = None
self.thread = None

def __openSpeaker(self):
Expand All @@ -27,9 +30,10 @@ def __play(self):
try:
while self.running:
noise = np.random.uniform(-1, 1, self.chunk).astype(np.float32)
self.stream.write(noise.tobytes())
if hasattr(self, 'stream') and self.stream:
self.stream.write(noise.tobytes())
except:
if self.stream:
if hasattr(self, 'stream') and self.stream:
self.stream.stop_stream()
self.stream.close()

Expand All @@ -50,13 +54,10 @@ def stop(self):
self.running = False
if self.thread:
self.thread.join()
self.__close()
if hasattr(self, 'stream') and self.stream:
self.stream.stop_stream()
self.stream.close()

return True
except:
return False

def __close(self):
self.stop()
self.stream.stop_stream()
self.stream.close()
return False
5 changes: 5 additions & 0 deletions src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@

gpio = GPIOController()
camera = CameraController()
try:
camera.enable()
logger.info("Camera enabled successfully")
except Exception as e:
logger.warning(f"Camera enable failed: {e}")
audio = AudioController()
media = MediaController()
whitenoise = WhiteNoisePlayer()
Expand Down
2 changes: 2 additions & 0 deletions src/packages.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
python3-pyaudio
portaudio19-dev
python3-dev
vlc
python3-gi
openresolv
Expand Down
26 changes: 20 additions & 6 deletions src/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,26 @@ def sp_to_label(speed):

return label

def quick_speed_test():
st = Speedtest()
st.get_servers()
st.get_best_server()
download_speed = st.download() / 1_000_000
upload_speed = st.upload() / 1_000_000
def quick_speed_test(timeout_sec=15):
import concurrent.futures

def _run():
st = Speedtest()
st.get_servers()
st.get_best_server()
download_speed = st.download() / 1_000_000
upload_speed = st.upload() / 1_000_000
return download_speed, upload_speed

with concurrent.futures.ThreadPoolExecutor() as executor:
try:
fut = executor.submit(_run)
download_speed, upload_speed = fut.result(timeout=timeout_sec)
except:
return {
"download": { "speed": 0, "label": "No Connection" },
"upload": { "speed": 0, "label": "No Connection" }
}

if download_speed == 0:
return {
Expand Down