-
Notifications
You must be signed in to change notification settings - Fork 0
/
live_gps.py
150 lines (102 loc) · 3.61 KB
/
live_gps.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
import json
#import time
import datetime
import psycopg2
import paho.mqtt.client as mqtt
import sys
import urllib2
from pprint import pprint
debug=False
pg_host = "db-host"
pg_db = "db-name"
pg_user = "db-user"
pg_pass = "db-passw"
fmt = "%Y-%m-%d %H:%M:%S"
global bperc
def msg_insert(in_line):
ndx = in_line.find("{")
gps_input = in_line[ndx:]
#print "gps_input: ", gps_input
decoded = json.loads(gps_input)
# pretty printing of json-formatted string
#print json.dumps(decoded, sort_keys=True, indent=4)
lat = decoded['lat']
lon = decoded['lon']
sec = decoded['tst']
bat = decoded['batt']
global bperc
bperc = bat
time = datetime.datetime.fromtimestamp(float(sec)).strftime(fmt)
adres = getAdres(lat,lon)
print "Lat : ", lat
print "Lon : ", lon
print "Time: ", time
print "Batt : ", bat
print "Adres: ", adres
qry = "INSERT INTO live_gps (lat,lon,wanneer,batt,adres,the_geom) VALUES ('{0}','{1}', (TIMESTAMP WITHOUT TIME ZONE 'epoch' + '{2}' * INTERVAL '1 second'), {3}, '{4}' ,ST_SetSRID(ST_MakePoint({1},{0}),4326));".format(str(lat),str(lon),sec,int(bat),adres)
return qry
def pg_execute(qry_line):
str_con = "dbname='{0}' user='{1}' host='{2}' password='{3}'".format(pg_db,pg_user,pg_host,pg_pass)
#print "str_con: ", str_con
conn = psycopg2.connect(str_con)
cur = conn.cursor()
print "qry: ", qry_line
cur.execute(qry_line)
conn.commit()
cur.close()
conn.close()
def pub_accu():
print "inside pub - bperc: ", bperc
mqtmsg= "{{ \"idx\" : 278, \"nvalue\" : 0, \"svalue\" : \"{0}\", \"Battery\" : {0} }}".format(str(bperc))
print "mqtmsq: ", mqtmsg
client.publish("domoticz/in", mqtmsg ,2)
def getAdres(lat,lon):
locatieServerNGR = "http://geodata.nationaalgeoregister.nl/locatieserver"
if debug:
print("Lookup adres for Lat=" + lat + " Lon=" + lon)
# create string
url = locatieServerNGR + "/suggest?wt=json&q=type:adres&rows=1&lat=" + lat + "&lon=" + lon
urlFile = urllib2.urlopen(url)
data = json.load(urlFile)
#dumps the json object into an element
json_str = json.dumps(data)
#load the json to a string
resp = json.loads(json_str)
#extract first id in the response
adresId = resp["response"]["docs"][0]["id"]
if debug:
print("Gevonden adresId=" + adresId)
# Next call
url = locatieServerNGR + "/lookup?wt=json&id=" + adresId
urlFile = urllib2.urlopen(url)
data = json.load(urlFile)
if debug:
pprint(data)
#dumps the json object into an element
json_str = json.dumps(data)
#load the json to a string
resp = json.loads(json_str)
#get first weergavenaam from response
weergaveNaam = resp["response"]["docs"][0]["weergavenaam"]
return weergaveNaam
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, rc):
print("Connected with result code "+str(rc))
# Subscribing in on_connect() means that if we lose the connection and
# reconnect then subscriptions will be renewed.
client.subscribe("owntracks/otrack/+")
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
try:
pg_execute(msg_insert(msg.payload))
except Exception, error:
print "Fout in on_message"
print str(error)
pub_accu()
bperc = "100"
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("192.168.14.24", 1883, 60)
client.loop_forever()