У меня есть система позиционирования, которая отправляет данные из тега, который он отслеживает, на определенный порт, 8787. У меня есть скрипт Python, который затем берет эту строку данных и пересылает ее в определенный порт для моей базы данных 8011. Есть три теги, которые отправляют данные. Система позиционирования жестко закодирована для отправки на порт 8787, а база данных - это Oracle и принимает данные только от порта 8011, следовательно, необходимость пересылки данных.При пересылке данных через python, как я могу выделить строки данных?
Вот строка данных каждый тег посылаемых (это всегда в этом формате):
{ "ID": "0xDECA38303180234E", "метка": 1450653835,723 "MSGID": 6825, "координаты ": {" х ": 4,160," у ": 2,368," г ": - 0,604," заголовок ": 0,000," ПКФ ": 65}," тез ": [{" якоря ":" 0xDECA323031300FBF "" расстояние ": 4,343," TQF ": 64," RSSI ": - 48}, {" якоря ":" 0xDECA323030901DE2" , "расстояние": 0,779, "TQF": 32, "RSSI": - 46}, {» якорь ":" 0xDECA313032901F24" , "расстояние": 1,223, "TQF": 32, "RSSI": - 44}, { "якоря": "0xDECA353034301E99", "расстояние": 4,929, "TQF": 32, "RSSI ": -46}]}
Когда это один тег, передающий данные, скрипт python считывает каждую строку отдельно, а затем пересылает каждую строку данных по одному. Когда есть два или более тега, скрипт python группирует входящие строки данных и отправляет их вместе, что вызывает ошибки в базе данных, поскольку она настроена на прием определенного формата. Я могу распечатать их отдельно с помощью модифицированной команды печати, но я не могу пересылать каждую строку данных отдельно.
Вот скрипт Python, который пересылает данные:
import socket
from pip._vendor import requests
import json
import time
port = 8787
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("", port))
print ("waiting on port:", port)
while 1:
#var_data = s.recvfrom(1024)
var_headers = {'Content-type': 'application/json'}
var_data, addr = s.recvfrom(16029)
print (var_data)
var_data_json = json.dumps(var_data) #@UndefinedVariable
#print (var_data_json)
response = requests.post('http://localhost:8011/SB_PositionLocatingService/PositionLocatingProxyService', data=var_data, headers=var_headers)
Я пробовал функцию таймера без успеха. Любая помощь была бы наиболее признательна. Благодаря Брайана
Вот как питон потоков данных из одного тега, и он прекрасно работает:
{"id":"0xDECA38303180234D","timestamp":1451680331.477,
{"id":"0xDECA38303180234D","timestamp":1451680331.478,
{"id":"0xDECA38303180234D","timestamp":1451680331.479,
Из двух тегов терпят неудачу, так как он послал в качестве одного:
{"id":"0xDECA38303180234D","timestamp":1451680331.477,
{"id":"0xDECA38303180235F","timestamp":1451680331.478,
{"id":"0xDECA38303180234D","timestamp":1451680331.478,
{"id":"0xDECA38303180235F","timestamp":1451680331.479,
От три теги терпят неудачу, поскольку они отправляются как один:
{"id":"0xDECA38303180234D","timestamp":1451680331.477,
{"id":"0xDECA38303180235F","timestamp":1451680331.478,
{"id":"0xDECA38303180234E","timestamp":1451680331.479,
{"id":"0xDECA38303180234D","timestamp":1451680331.478,
{"id":"0xDECA38303180235F","timestamp":1451680331.479,
{"id":"0xDECA38303180234E","timestamp":1451680331.480,
что я пытаюсь для двух и трех тегов, так что это разнесены так же, как он с одним тегом:
{"id":"0xDECA38303180234D","timestamp":1451680331.477,
{"id":"0xDECA38303180235F","timestamp":1451680331.478,
{"id":"0xDECA38303180234E","timestamp":1451680331.479,
{"id":"0xDECA38303180234D","timestamp":1451680331.478,
{"id":"0xDECA38303180235F","timestamp":1451680331.479,
{"id":"0xDECA38303180234E","timestamp":1451680331.480,
Вы пробовали разбор объекта JSON, прежде чем отправить его, а затем, используя для цикла, чтобы отправить запрос на почту, порождая новую строку JSON из разобранного объекта? Таким образом, вы можете быть уверены, что каждый входящий объект соответствует одному HTTP-запросу. –
Спасибо! Я дам вам выстрел и дам вам знать, как это работает. –
Вот что я пробовал для его разбора. 'var_data_json = json.dumps (var_data) # @UndefinedVariable печати (var_data_json)' Результаты является одним datastring независимо от того, сколько источников потокового и это не пространство его как это происходит в обновленной записи потока одного тега. Я что-то упускаю? Он также добавляет двойные кавычки на обоих концах строки. –