import machine,network,time, BlynkLib, sys, gc, ujson
from neopixel import NeoPixel
from machine import Pin

def readSecrets():
    with open('secrets.json') as fp:
        secrets=ujson.loads(fp.read())
        return secrets

#  connect to Blynk
secrets=readSecrets()
BLYNK_AUTH=secrets['home_wifi']['blynkAuth']
blynk=BlynkLib.Blynk(BLYNK_AUTH,server='ny3.blynk.cloud')
vpin=1

#  button connected to pin 39, ground, when btn pressed value=0
btn=machine.Pin(39,machine.Pin.IN,machine.Pin.PULL_UP)

#  button connected to pin 18, ground, when btn pressed blynk.disconnect
#btnD=machine.Pin(18,machine.Pin.IN,machine.Pin.PULL_UP)

#  LED GP25
LED_GPIO = const(27)
matrix_size_x = const(5)
matrix_size_y = const(5)
is_atom_matrix = True

np = NeoPixel(Pin(LED_GPIO), matrix_size_x * matrix_size_y)

#  set up datastream to Blynk (btn.value=pin v1)
@blynk.on('read V1')
def read_virtual_pin_handler(vpin):
    blynk.virtual_write(vpin,int(btn.value()))

#  LED handler (turn on when connected)
@blynk.on("connected")
def blynk_connected():
    np.fill((0,25,0))
    np.write()

#  LED handler (turn off when disconnected)
@blynk.on("disconnected")
def blynk_disconnected():
    np.fill((25,0,0))
    np.write()

#  garbage collection
gc.threshold(26144)
gc.enable()

#  main loop    
while True:
    try:
        read_virtual_pin_handler(vpin)
        #print(int(btn.value()))
        if int(btn.value())==0:
            blynk.log_event("Mommy_alert")
        time.sleep(.25)
        
#        if int(btnD.value())==0:
#            wlan.disconnect()
#            blynk.disconnect()
    
        blynk.run()
    except KeyboardInterrupt:
        blynk_disconnected()
        blynk.disconnect()
        sys.exit()