Tengo algunos problemas con esta aplicación. Lo que necesito es que si detecto un cambio en la base de datos (FIREBASE), particularmente en los nodos ‘sala’ y ‘ventilacion’, la función hace lo que tiene que hacer. Si no hay ningún cambio en la base de datos, no haría nada. Estoy usando python y pyrebase library. Aquí está el código. Muchas gracias por su ayuda.
import pyrebase import serial import time config = { #firebase configurations } firebase = pyrebase.initialize_app(config) db = firebase.database() def ReconfiguracionFabrica(): ser.write('AT') time.sleep(0.2) ser.write('AT+RENEW') time.sleep(0.3) def ConfiguracionMaster(): time.sleep(0.5) ser.write('AT+IMME1') time.sleep(0.350) ser.write('AT+ROLE1') time.sleep(0.2) ser=serial.Serial(port="/dev/ttyAMA0", baudrate=9600, timeout=1) ReconfiguracionFabrica() time.sleep(0.1) ConfiguracionMaster() time.sleep(0.1) print "********** INICIO *************" ser.flushInput() contador=0 prender= '' ventilacion1= '' checkeo= '' while True: #if db.child("sala").: # It is the line where would be the conditional that allows me to detect any change only in the sala's node. salidaLed1 = db.child("sala").get() ser.write('AT') time.sleep(0.1) ser.write('AT+CON508CB16A7014') time.sleep(0.1) if salidaLed1.val()== True: prender=";" if salidaLed1.val()== False: prender="," ser.write('luz: %s \n' %(prender)) print ('luz: %s \n' %(prender)) time.sleep(1) ser.read(checkeo) if checkeo== 'j': ReconfiguracionFabrica() time.sleep(0.1) ConfiguracionMaster()
Pregunta : ¿Cómo detectar cambios en niño base de fuego?
Nota : todos los ejemplos usan acceso público
Configura los datos de ejemplo y verifica que sea legible.
Esto hase hecho una vez !
temperature_c = 30 data = {'date':time.strftime('%Y-%m-%d'), 'time':time.strftime('%H:%M:%S'), 'temperature':temperature_c} db.child('public').child('Device_1').set(data) response = db.child('public').child('Device_1').get() print(response.val())
Crear primer script haciendo actualizaciones:
for t in [25, 26, 27, 28, 29, 30, 31, 32, 33, 35]: temperature_c = t data = {'date':time.strftime('%Y-%m-%d'), 'time':time.strftime('%H:%M:%S'), 'temperature':temperature_c} db.child('public').child('Device_1').update(data) time.sleep(60)
Crear una segunda secuencia de comandos con el controlador de secuencia
def stream_handler(message): print('event={m[event]}; path={m[path]}; data={m[data]}' .format(m=message)) my_stream =db.child('public').child('Device_1').stream(stream_handler) # Run Stream Handler forever while True: data = input("[{}] Type exit to disconnect: ".format('?')) if data.strip().lower() == 'exit': print('Stop Stream Handler') if my_stream: my_stream.close() break
Ejecutar secuencia de comandos de secuencia de comandos:
Salida de respuesta de def stream_handler
después del inicio (datos iniciales):
event="put"; path=/; data={'Device_1': {'temperature': 30, 'time': '13:34:24', 'date': '2017-07-20'}}
Ejecutar el script de actualización:
Salida de reloj de secuencia de comandos de secuencia
Salida de respuesta de def stream_handler
después de la primera actualización de datos:
event=patch; path=/Device_1; data={'temperature': 25, 'time': '13:49:12'}
Probado con Python: 3.4.2
Pyrebase
transmisiónPuede escuchar los cambios en vivo de sus datos con el método stream ().
def stream_handler(message): print(message["event"]) # put print(message["path"]) # /-K7yGTTEp7O549EzTYtI print(message["data"]) # {'title': 'Pyrebase', "body": "etc..."} my_stream = db.child("posts").stream(stream_handler)
Al menos debes manejar los eventos de poner y parchar. Consulte “Transmisión desde la API REST” para obtener más información.