Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from struct import unpack_from
- import json
- import numpy as np
- from websocket import create_connection
- from time import sleep
- import AggregatorRESTClient as RESTClient
- import datetime
- from datetime import datetime,timezone, timedelta
- import sys
- import time
- 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, }
- ASCII_RS = '\u001e'
- ASCII_US = '\u001f'
- entrypoint = "B4401.lab.ltu.se"#input("Server IP or name: ")
- #USE AN ADMIN ACCOUNT
- username = "h2al"
- password = "h2al2019"
- aggregator = RESTClient.AggregatorRESTClient(entrypoint,username,password)
- def refreshToken(rc):
- rc.login()
- return rc.token
- print("Logging in...")
- response_status, response_body = aggregator.login()
- token_expiration_time = int(time.time()) + 3000 #refresh every 50 minutes
- token = aggregator.token
- print("Token: ", aggregator.token)
- user_id = response_body["id"]
- user_name = response_body["personalData"]["userName"]
- def to_message(buffer):
- # parse MatNet messages from JSON / own binary format
- if isinstance(buffer, str):
- return json.loads(buffer)
- seek = 0
- # bufferSize = np.asscalar(np.frombuffer(buffer, np.int32, 1, seek))
- fields_len = np.asscalar(np.frombuffer(buffer, np.int32, 1, seek + 4))
- header_buff = buffer[seek + 8: seek + 8 + fields_len].decode('utf8')
- id, keys = header_buff.split(ASCII_RS)
- msg = {'ID': id, 'Payload': {}}
- seek += 8 + fields_len
- for key in keys.split(ASCII_US):
- # fieldSize = np.asscalar(np.frombuffer(buffer, np.int32, 1, seek))
- dtype = DTYPES[np.asscalar(np.frombuffer(buffer, np.int32, 1, seek + 4))]
- ndims = np.asscalar(np.frombuffer(buffer, np.int32, 1, seek + 8))
- dims = np.frombuffer(buffer, np.int32, ndims, seek + 12)
- seek += 12 + ndims * np.int32().nbytes
- data = np.frombuffer(buffer, dtype, np.prod(dims), seek)
- seek += np.prod(dims) * dtype().nbytes
- msg['Payload'][key] = data.reshape(dims) if ndims else np.asscalar(data)
- return msg
- #print("aaaa")
- listener = create_connection("ws://130.240.114.15:1234/")
- # retrieve current configuration
- #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 } }))
- # set outputs for each frame
- listener.send(json.dumps({ 'Type': 'COMMAND', 'ID': 'SET_OUTPUTS', 'Payload': { 'binary_outputs': ['LocationMatrix','NumOfPeople','BreathingMatrix'], 'json_outputs':['PostureVector'] } }))
- # start the engine - if WebGUI is not running
- listener.send(json.dumps({ 'Type': 'COMMAND', 'ID': 'START', 'Payload': {} }))
- listener.send(json.dumps({'Type': 'QUERY', 'ID': 'BINARY_DATA'}))
- listener.send(json.dumps({'Type': 'QUERY', 'ID': 'JSON_DATA'}))
- print("Running! Waiting for messages...")
- while True:
- buffer = listener.recv()
- data = to_message(buffer)
- #print(data['ID'])
- #Creating Event structure to send data to Aggregator (SensorCentral+:) )
- event = {}
- timestamp_str = datetime.now().isoformat()
- ts_str = timestamp_str[0:-3] + "+0100"
- event["startTime"] = ts_str
- event["endTime"] = ts_str
- event["label"] = "VAYYAR"
- event["data"] = aggregator.encode_data(str(data['Payload']))
- events = {"events":[]}
- if data['ID'] == 'JSON_DATA':
- event["type"] = "JSON_DATA"
- print("PostureVector: ", data['Payload']['PostureVector'])
- listener.send(json.dumps({'Type': 'QUERY', 'ID': 'JSON_DATA'})) # pass
- events["events"].append(event)
- #check token expiration time
- current_time = int(time.time())
- if current_time > token_expiration_time:
- aggregator.login() ## Refreshing token
- token_expiration_time = current_time + 3000# refresh every 50 minutes
- #Sending data to aggregator
- status_code = aggregator.addEvents(user_id,events)
- if status_code == 200:
- print("Sending event: OK")
- else:
- print("Error sending event to the aggregator")
- break
- '''if data['ID'] == 'SET_PARAMS':
- print("CONFIGURATION:")
- for key in data['Payload']:
- print(key, data['Payload'][key])'''
- listener.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement