kopia lustrzana https://github.com/ogre/habboy
297 wiersze
8.5 KiB
Python
297 wiersze
8.5 KiB
Python
#!/usr/bin/env python3
|
|
|
|
"""
|
|
misc utility functions for habitat queries
|
|
"""
|
|
|
|
import string
|
|
import sys
|
|
import json
|
|
from time import time
|
|
from pprint import pprint
|
|
import urllib3
|
|
|
|
urllib3.disable_warnings()
|
|
http = urllib3.PoolManager()
|
|
|
|
import formatSentence
|
|
|
|
|
|
def getFlights():
|
|
_url = (
|
|
"http://habitat.habhub.org/habitat/_design/flight/_view/end_start_including_payloads?startkey=["
|
|
+ str(int(time()))
|
|
+ "]&include_docs=True"
|
|
)
|
|
flights_json = http.request("GET", _url)
|
|
flights = json.loads(flights_json.data.decode("utf-8"))["rows"]
|
|
res = [f for f in flights if f["doc"]["type"] == "flight"]
|
|
return res
|
|
|
|
|
|
def getPayloads(i_flights=None):
|
|
_url = (
|
|
"http://habitat.habhub.org/habitat/_design/flight/_view/end_start_including_payloads?startkey=["
|
|
+ str(int(time()))
|
|
+ "]&include_docs=True"
|
|
)
|
|
all_docs = http.request("GET", _url)
|
|
all_docs = json.loads(all_docs.data.decode("utf-8"))["rows"]
|
|
|
|
if not i_flights:
|
|
i_flights = getFlights()
|
|
|
|
flyingPayloadsIds = []
|
|
for f in i_flights:
|
|
flyingPayloadsIds.extend(f["doc"]["payloads"])
|
|
|
|
res = []
|
|
for f in all_docs:
|
|
if (
|
|
f["doc"]["type"] == "payload_configuration"
|
|
and f["doc"]["_id"] in flyingPayloadsIds
|
|
):
|
|
# f['telemetry'] = getTelemetry( f['doc']['sentences'][0]['callsign'] )
|
|
res.append(f)
|
|
|
|
return res
|
|
|
|
|
|
def getCallsignsForPayloadId(payload_id):
|
|
flights = getFlights()
|
|
payloads = getPayloads(flights)
|
|
for p in payloads:
|
|
if p["doc"]["_id"] == payload_id:
|
|
return p["doc"]["sentences"][0]["callsign"]
|
|
return None
|
|
|
|
|
|
"""
|
|
def getTelemetry(i_payloadName, max_positions=1 ):
|
|
data_url = "http://spacenear.us/tracker/datanew.php"
|
|
data_str = "mode=position&type=positions&format=json&max_positions=" + str(max_positions) + "&position_id=0&vehicles=" + urllib2.quote(i_payloadName)
|
|
_url = data_url + '?' + data_str
|
|
res = http.request('GET', _url)
|
|
res = json.loads(res.data.decode('utf-8'))
|
|
res = res['positions']['position']
|
|
|
|
return res
|
|
"""
|
|
|
|
|
|
def defaultSensorsInfo(i_sentence):
|
|
"""
|
|
treat all sensors as string
|
|
except: sentence_id, time, lat, lon, alt
|
|
"""
|
|
|
|
if not i_sentence:
|
|
return None
|
|
|
|
num_sensors = len(formatSentence.getData(i_sentence))
|
|
|
|
sensors_info_arr = [
|
|
{"name": "sensor_" + str(x), "sensor": "base.string"}
|
|
for x in range(num_sensors)
|
|
]
|
|
|
|
# sentence_id
|
|
sensors_info_arr[0]["name"] = "sentence_id"
|
|
sensors_info_arr[0]["sensor"] = "base.ascii_int"
|
|
|
|
# time
|
|
sensors_info_arr[1]["name"] = "time"
|
|
sensors_info_arr[1]["sensor"] = "stdtelem.time"
|
|
|
|
# lat
|
|
sensors_info_arr[2]["name"] = "latitude"
|
|
sensors_info_arr[2]["sensor"] = "stdtelem.coordinate"
|
|
|
|
# lon
|
|
sensors_info_arr[3]["name"] = "longitude"
|
|
sensors_info_arr[3]["sensor"] = "stdtelem.coordinate"
|
|
|
|
# alt
|
|
sensors_info_arr[4]["name"] = "altitude"
|
|
sensors_info_arr[4]["sensor"] = "base.ascii_float"
|
|
|
|
return sensors_info_arr
|
|
|
|
|
|
def getSentenceInfo(i_payload_id, i_sentence=None):
|
|
# print('getSentenceInfo', (i_payload_id, i_sentence))
|
|
example_output = [
|
|
{"name": "sentence_id", "sensor": "base.ascii_int"},
|
|
{"name": "time", "sensor": "stdtelem.time"},
|
|
{"name": "latitude", "sensor": "stdtelem.coordinate", "format": "dd.dddd"},
|
|
{"name": "longitude", "sensor": "stdtelem.coordinate", "format": "dd.dddd"},
|
|
{"name": "altitude", "sensor": "base.ascii_int"},
|
|
{"name": "temperature_internal", "sensor": "base.ascii_float"},
|
|
{"name": "temperature_external", "sensor": "base.ascii_float"},
|
|
{"name": "satellites", "sensor": "base.ascii_int"},
|
|
{"name": "some_float1", "sensor": "base.ascii_float"},
|
|
{"name": "some_float2", "sensor": "base.ascii_float"},
|
|
{"name": "some_float3", "sensor": "base.ascii_float"},
|
|
{"name": "some_float4", "sensor": "base.ascii_float"},
|
|
{"name": "packets_err", "sensor": "base.ascii_int"},
|
|
{"name": "flags", "sensor": "base.string"},
|
|
]
|
|
|
|
# ARY
|
|
example_output = [
|
|
{"name": "sentence_id", "sensor": "base.ascii_int"},
|
|
{"name": "time", "sensor": "stdtelem.time"},
|
|
{"name": "latitude", "sensor": "stdtelem.coordinate", "format": "dd.dddd"},
|
|
{"name": "longitude", "sensor": "stdtelem.coordinate", "format": "dd.dddd"},
|
|
{"name": "altitude", "sensor": "base.ascii_int"},
|
|
{"name": "elev", "sensor": "base.ascii_int"},
|
|
{"name": "temperature_internal", "sensor": "base.ascii_float"},
|
|
{"name": "temperature_external", "sensor": "base.ascii_float"},
|
|
{"name": "pressure", "sensor": "base.ascii_float"},
|
|
{"name": "mesg", "sensor": "base.string"},
|
|
]
|
|
|
|
# return example_output
|
|
|
|
result = None
|
|
|
|
payloads = getPayloads(getFlights())
|
|
for p in payloads:
|
|
# print("payload ", p['doc']['_id'], p['doc']['name'], i_payload_id)
|
|
# if p['doc']['_id'] == i_payload_id or p['doc']['name'] == i_payload_id:
|
|
if (
|
|
p["doc"]["_id"] == i_payload_id
|
|
or p["doc"]["sentences"][0]["callsign"] == i_payload_id
|
|
):
|
|
result = p["doc"]["sentences"][0]["fields"]
|
|
break
|
|
else:
|
|
pass
|
|
# print(p)
|
|
|
|
'''
|
|
if not result and i_sentence:
|
|
result = defaultSensorsInfo(i_sentence)
|
|
print("Building Default sensor datainfo based on sentence: " + i_sentence)
|
|
pprint(result)
|
|
return result
|
|
'''
|
|
|
|
return result
|
|
|
|
|
|
"""
|
|
def getLastSentence_faked(i_payload_name):
|
|
getLastSentence.last_id += 1
|
|
result = "CALLSIGN," + str(getLastSentence.last_id) + ",15:41:24,44.32800,-74.14427,00491,0,0,12,30.7,0.0,0.001,20.2,958,1b*6BC9"
|
|
result = formatSentence.formatSentence(result)
|
|
return ""
|
|
return result
|
|
getLastSentence_faked.last_id = 0
|
|
"""
|
|
|
|
|
|
def getLastSentence(i_payload_id):
|
|
_url = (
|
|
"http://habitat.habhub.org/habitat/_design/flight/_view/end_start_including_payloads?startkey=["
|
|
+ str(int(time()))
|
|
+ "]&include_docs=True"
|
|
)
|
|
|
|
try:
|
|
flights_json = http.request("GET", _url)
|
|
except urllib3.exceptions.MaxRetryError:
|
|
return None
|
|
|
|
flights = json.loads(flights_json.data.decode("utf-8"))["rows"]
|
|
|
|
flight_id = None
|
|
for f in flights:
|
|
if f["doc"]["type"] != "flight":
|
|
continue
|
|
if i_payload_id in f["doc"]["payloads"]:
|
|
flight_id = f["doc"]["_id"]
|
|
break
|
|
|
|
if flight_id:
|
|
try:
|
|
r = http.request(
|
|
"GET",
|
|
'http://habitat.habhub.org/habitat/_design/payload_telemetry/_view/flight_payload_time?startkey=["'
|
|
+ flight_id
|
|
+ '","'
|
|
+ i_payload_id
|
|
+ '",[]]&endkey=["'
|
|
+ flight_id
|
|
+ '","'
|
|
+ i_payload_id
|
|
+ '"]&include_docs=True&descending=True&limit=1',
|
|
)
|
|
except urllib3.exceptions.MaxRetryError:
|
|
return None
|
|
|
|
telemetry = json.loads(r.data.decode("utf-8"))["rows"]
|
|
if telemetry:
|
|
try:
|
|
telemetry = json.loads(r.data.decode("utf-8"))["rows"][-1]
|
|
last_sentence = telemetry["doc"]["data"]["_sentence"]
|
|
last_sentence = last_sentence.strip()
|
|
except KeyError:
|
|
pprint(telemetry)
|
|
return ""
|
|
print(last_sentence)
|
|
return last_sentence
|
|
return None
|
|
|
|
|
|
def uploadChaseCar(car_data):
|
|
r = None
|
|
try:
|
|
r = http.request(
|
|
"GET",
|
|
'http://spacenear.us/tracker/track.php',
|
|
fields = car_data
|
|
)
|
|
except urllib3.exceptions.MaxRetryError:
|
|
return False
|
|
|
|
if r.status != 200:
|
|
print(r.data)
|
|
return False
|
|
|
|
return True
|
|
|
|
if __name__ == "__main__":
|
|
|
|
flights = getFlights()
|
|
payloads = getPayloads(flights)
|
|
|
|
"""
|
|
print "Flights:"
|
|
pprint(flights)
|
|
print "==================================="
|
|
|
|
print "payloads:"
|
|
pprint(payloads)
|
|
print "==================================="
|
|
|
|
for p in payloads:
|
|
print "telemetry ", p['doc']['name']
|
|
pprint( getTelemetry(p['doc']['name']) )
|
|
print "==================================="
|
|
|
|
print('M6')
|
|
pprint ( getTelemetry('M6') )
|
|
print "==================================="
|
|
|
|
print( getSentenceInfo('MI6') )
|
|
"""
|
|
|
|
pprint(getSentenceInfo("5facec9731fc190ce510c9f1ee6e4bb8"))
|
|
# pprint( getLastSentence('5facec9731fc190ce510c9f1ee6e4bb8') )
|
|
|
|
# //////////////////////////////
|
|
|
|
# print( getSentenceInfo( 0, 'fro3,3,220759,52.029996,21.999550,130.0,80.0,80.0,80.0*CE7D') )
|
|
|