Sunday, 11 September 2022

Recorder.py

import logging
import re
import datetime
import os
from pixels import pixels
import time

class RecordException(Exception):
    def __init__(self, msg):
        self.msg = msg

    def __str__(self):
        return f"RecordException {self.msg}"

def dbg(lmsg):
    logging.info(lmsg)

def dbgDeprecated(*args, quiet = True):
    if not quiet:
        for arg in args:
            print(arg, end = '')
        print("")


def record(basename='', hours = 1, minute_chunks = 15, dry_run = False):

    duration_secs = minute_chunks * 60

    num_recordings = int((hours * 60)/minute_chunks)
    dbg(f"number of recordings : {num_recordings} chunk size: {minute_chunks} mins total: {hours} hrs")

    for chunk in range(num_recordings):
        format = 'S32_LE'
        rate = 16000

        file = re.sub('[- :.]','_',str(datetime.datetime.now())) + '.wav'
        fullpath = f"/mnt/usb1/recordings/{basename}_{file}"

        cmd = f"arecord -q -d {duration_secs} -f {format} -r {rate} {fullpath}"
        dbg(f"Recording {chunk} {cmd}")
        if not dry_run:
            v = os.system(cmd)
        dbg(f"Chunk completed {v}")
        if (v != 0):
         raise RecordException("Record Failure")
    dbg("Completed")


logname = '/mnt/usb1/recordings/recordlog.log'

logging.basicConfig(filename=logname,
                    filemode='a',
                    format='%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s',
                    datefmt='%H:%M:%S',
                    level=logging.DEBUG)

dbg("Starting Recording...")
lights = False
if lights:
  pixels.wakeup()

try:
 record(basename='frontroom', hours = 24*30, minute_chunks = 15, dry_run = False)
except RecordException as e:
 dbg(f"Oh No! {e}")

pixels.off()
time.sleep(1)

Thursday, 1 September 2022

Byron Warning System

import machine
import time
from ubitstring import Bits

def wavebit(pin, v, dly):
    pin.value(1 if v else 0)
    time.sleep_us(dly)



def xmit(data,gpio_pin = 16,delay_us = 160):
    pin = machine.Pin(gpio_pin, machine.Pin.OUT)
    for b in data:
        for bit in range(8):
#            wavebit(pin, b & 128 != 0, delay_us)
            pin.value(1 if (b & 128 != 0) else 0)
            time.sleep_us(delay_us)
            b<<=1
            
   
   

byron = "bec3e43e41e79041043079e43e41f0001041e4107df61f61f61f7d86186083efb0fb0f8000c30fb0c3efb0fb079079f61861861f7d87d87c0006187d861f7d87d87d87df60860860f3c83c83c0006187d861f7d87d87c83ef20c30c30fbec3ec3e00030c3ec30fbec3e41e41e7d86186187df61f20f0000820f20c"

bitstring = Bits(hex=(byron*4))
#print(bitstring)
formatted = bitstring.tobytes()


while True:
    #print("Transmitting..")
    xmit(formatted)
    time.sleep(5)