calibration.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. from firebase_admin import db as fbdb
  2. from threading import Thread
  3. from tornado.ioloop import IOLoop
  4. import logging as log
  5. class Calibrations(object):
  6. TOLERANCE_RATE = 0.6
  7. THRESHOLD = 10
  8. FALL_TOLERANCE = 0
  9. SEGMENT_SIZE = 5
  10. HOURLY_OFFSET = -5
  11. # SEGMENT_SIZE
  12. # n = cualquier cantidad de segundos
  13. # ceil = la duracion del audio en segmentos de 5
  14. # integer = la duracion exacto del audio
  15. def __init__(self, device_id):
  16. self.dev_ref = fbdb.reference('devices').child(device_id)
  17. self.calibrations_ref = self.dev_ref.child('calibrations')
  18. self.thread = None
  19. self.listener = None
  20. self.items = {}
  21. def get(self, station):
  22. calref = self.calibrations_ref.child(station)
  23. try:
  24. remote = calref.get()
  25. except fbdb.ApiCallError as err:
  26. log.error('[get] {}'.format(err))
  27. remote = None
  28. local = self.items.get(station, None)
  29. if not remote and not local:
  30. calibration = {
  31. 'tolerance': self.TOLERANCE_RATE,
  32. 'threshold': self.THRESHOLD,
  33. 'fallTolerance': self.FALL_TOLERANCE,
  34. 'segmentSize': self.SEGMENT_SIZE,
  35. 'hourlyOffset': self.HOURLY_OFFSET,
  36. }
  37. elif not remote and local:
  38. calibration = {
  39. 'tolerance': self.TOLERANCE_RATE,
  40. 'threshold': self.THRESHOLD,
  41. 'fallTolerance': self.FALL_TOLERANCE,
  42. 'segmentSize': self.SEGMENT_SIZE,
  43. 'hourlyOffset': self.HOURLY_OFFSET,
  44. }
  45. else:
  46. calibration = {
  47. 'tolerance': remote.get(
  48. 'tolerance',
  49. self.TOLERANCE_RATE,
  50. ),
  51. 'threshold': remote.get(
  52. 'threshold',
  53. self.THRESHOLD,
  54. ),
  55. 'fallTolerance': remote.get(
  56. 'fallTolerance',
  57. self.FALL_TOLERANCE,
  58. ),
  59. 'segmentSize': remote.get(
  60. 'segmentSize',
  61. self.SEGMENT_SIZE,
  62. ),
  63. 'hourlyOffset': remote.get(
  64. 'hourlyOffset',
  65. self.HOURLY_OFFSET,
  66. )
  67. }
  68. self.items[station] = calibration
  69. return self.items[station]