Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.22 KB | None | 0 0
  1. from struct import unpack_from
  2. import json
  3. import numpy as np
  4. from websocket import create_connection
  5. from time import sleep
  6. import AggregatorRESTClient as RESTClient
  7. import datetime
  8. from datetime import datetime,timezone, timedelta
  9. import sys
  10. import time
  11.  
  12. DTYPES = { 0: np.int8, 1: np.uint8, 2: np.int16, 3: np.uint16, 4: np.int32, 5: np.uint32, 6: np.float32, 7: np.float64, }
  13.  
  14. ASCII_RS = '\u001e'
  15. ASCII_US = '\u001f'
  16.  
  17. entrypoint = "B4401.lab.ltu.se"#input("Server IP or name: ")
  18.  
  19. #USE AN ADMIN ACCOUNT
  20. username = "h2al"
  21. password = "h2al2019"
  22.  
  23. aggregator = RESTClient.AggregatorRESTClient(entrypoint,username,password)
  24.  
  25. def refreshToken(rc):
  26. rc.login()
  27. return rc.token
  28.  
  29. print("Logging in...")
  30. response_status, response_body = aggregator.login()
  31. token_expiration_time = int(time.time()) + 3000 #refresh every 50 minutes
  32.  
  33. token = aggregator.token
  34.  
  35. print("Token: ", aggregator.token)
  36.  
  37. user_id = response_body["id"]
  38. user_name = response_body["personalData"]["userName"]
  39.  
  40. def to_message(buffer):
  41. # parse MatNet messages from JSON / own binary format
  42. if isinstance(buffer, str):
  43. return json.loads(buffer)
  44. seek = 0
  45. # bufferSize = np.asscalar(np.frombuffer(buffer, np.int32, 1, seek))
  46. fields_len = np.asscalar(np.frombuffer(buffer, np.int32, 1, seek + 4))
  47. header_buff = buffer[seek + 8: seek + 8 + fields_len].decode('utf8')
  48. id, keys = header_buff.split(ASCII_RS)
  49. msg = {'ID': id, 'Payload': {}}
  50. seek += 8 + fields_len
  51. for key in keys.split(ASCII_US):
  52. # fieldSize = np.asscalar(np.frombuffer(buffer, np.int32, 1, seek))
  53. dtype = DTYPES[np.asscalar(np.frombuffer(buffer, np.int32, 1, seek + 4))]
  54. ndims = np.asscalar(np.frombuffer(buffer, np.int32, 1, seek + 8))
  55. dims = np.frombuffer(buffer, np.int32, ndims, seek + 12)
  56. seek += 12 + ndims * np.int32().nbytes
  57. data = np.frombuffer(buffer, dtype, np.prod(dims), seek)
  58. seek += np.prod(dims) * dtype().nbytes
  59. msg['Payload'][key] = data.reshape(dims) if ndims else np.asscalar(data)
  60. return msg
  61.  
  62. #print("aaaa")
  63. listener = create_connection("ws://130.240.114.15:1234/")
  64. # retrieve current configuration
  65. #listener.send(json.dumps({ 'Type': 'COMMAND', 'ID': 'SET_PARAMS', 'Payload': { 'Cfg.MonitoredRoomDims': [-1.5, 1.5, -2, 2, 0.8, 1.8], 'Cfg.Common.sensorOrientation.mountPlane': 'xy', 'Cfg.Common.sensorOrientation.transVec': [0.0, 0.0, 2.4], 'Cfg.imgProcessing.substractionMode': 6.0, 'Cfg.TargetProperties.MaxPersonsInArena': 8.0, 'Cfg.TargetProperties.StandingMaxHeight': 2.0, 'Cfg.TargetProperties.StandingMinHeight': 1.45, 'Cfg.TargetProperties.SittingMinHeight': 0.8, 'Cfg.TargetProperties.LyingMinHeight': 0.2, 'Cfg.TargetProperties.PersonRadius': 0.6, 'MPR.save_dir': '', 'MPR.read_from_file': 0.0, 'MPR.save_to_file': 0.0, 'MPR.save_image_to_file': 0.0, 'Cfg.OutputData.save_to_file': 0.0, 'Cfg.ExternalGUI.FilterImage.TH': 0.0, 'Cfg.ExternalGUI.FilterImage.numOfSd': 3.0, 'Cfg.PeopleCounter.inCarIsLocked': False, 'Cfg.Zones.Beds': None } }))
  66.  
  67. # set outputs for each frame
  68. listener.send(json.dumps({ 'Type': 'COMMAND', 'ID': 'SET_OUTPUTS', 'Payload': { 'binary_outputs': ['LocationMatrix','NumOfPeople','BreathingMatrix'], 'json_outputs':['PostureVector'] } }))
  69. # start the engine - if WebGUI is not running
  70. listener.send(json.dumps({ 'Type': 'COMMAND', 'ID': 'START', 'Payload': {} }))
  71.  
  72. listener.send(json.dumps({'Type': 'QUERY', 'ID': 'BINARY_DATA'}))
  73. listener.send(json.dumps({'Type': 'QUERY', 'ID': 'JSON_DATA'}))
  74. print("Running! Waiting for messages...")
  75. while True:
  76. buffer = listener.recv()
  77. data = to_message(buffer)
  78. #print(data['ID'])
  79. #Creating Event structure to send data to Aggregator (SensorCentral+:) )
  80. event = {}
  81. timestamp_str = datetime.now().isoformat()
  82. ts_str = timestamp_str[0:-3] + "+0100"
  83. event["startTime"] = ts_str
  84. event["endTime"] = ts_str
  85. event["label"] = "VAYYAR"
  86. event["data"] = aggregator.encode_data(str(data['Payload']))
  87. events = {"events":[]}
  88.  
  89. if data['ID'] == 'JSON_DATA':
  90. event["type"] = "JSON_DATA"
  91. print("PostureVector: ", data['Payload']['PostureVector'])
  92. listener.send(json.dumps({'Type': 'QUERY', 'ID': 'JSON_DATA'})) # pass
  93. events["events"].append(event)
  94. #check token expiration time
  95. current_time = int(time.time())
  96. if current_time > token_expiration_time:
  97. aggregator.login() ## Refreshing token
  98. token_expiration_time = current_time + 3000# refresh every 50 minutes
  99. #Sending data to aggregator
  100. status_code = aggregator.addEvents(user_id,events)
  101. if status_code == 200:
  102. print("Sending event: OK")
  103. else:
  104. print("Error sending event to the aggregator")
  105. break
  106. '''if data['ID'] == 'SET_PARAMS':
  107. print("CONFIGURATION:")
  108. for key in data['Payload']:
  109. print(key, data['Payload'][key])'''
  110. listener.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement