How to detect changes in firebase child with python?

前端 未结 3 841
醉梦人生
醉梦人生 2021-01-03 15:31

I have some troubles with this application. What I need is that If I detect a change in the database (FIREBASE) particularly in \'sala\' and \'ventilacion\' nodes the functi

3条回答
  •  再見小時候
    2021-01-03 15:38

    Question: How to detect changes in firebase child


    Note: All Examples use Public Access

    1. Setup Example Data and verify it's readable.
      This hase to be done once!

      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())
      
    2. Create First Script doing Updates:

      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)
      
    3. Create Second Script with Stream Handler

      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
      
    4. Run Stream Handler Script:

      Response Output from def stream_handler after startup (Initial Data):

      event="put"; path=/;  data={'Device_1': {'temperature': 30, 'time': '13:34:24', 'date': '2017-07-20'}}
      
    5. Run Updater Script:

    6. Watch Output from Stream Handler Script

      Response Output from def stream_handler after First Update Data:

      event=patch; path=/Device_1;  data={'temperature': 25, 'time': '13:49:12'}
      

    Tested with Python: 3.4.2


    Pyrebase
    streaming

    You can listen to live changes to your data with the stream() method.

    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)
    

    You should at least handle put and patch events. Refer to "Streaming from the REST API" for details.

提交回复
热议问题