Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 10, 2013 14:51:19

robot_chickn
Зарегистрирован: 2013-03-25
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Настройка двух библиотек

ПРивет всем. Появилась проблема не могу ее решить, может кто то сможет мне подсказать?
Я использую две библиотеки. Первая: telnetlib - через нее я подключаюсь к устройству и получаю поток данных NMEA. Вторая библиотка: pynmea - библиотека для работы с данными формата NMEA.
Вот описание этих двух библиотек:
http://docs.python.org/2/library/telnetlib
https://code.google.com/p/pynmea/

Через сам телнет данные выглядят как на файле. В итоге, мне нужно иметь возможность получать нужные данные из потока.

Мой код для получения данных:
import getpass
import sys
import telnetlib
HOST = “192.168.1.1”
tn = telnetlib.Telnet(HOST)
tn.write(“stty -F /dev/ttyO3 4800”)
tn.write(“cat /dev/ttyO3”)

А вот дальше как правильно настроить работу библиотеки pynmea не знаю.
и все самостоятельные попытки заканчивались ничем(

Спасибо всем неравнодушным ))

Отредактировано robot_chickn (Апрель 10, 2013 14:55:54)

Прикреплённый файлы:
attachment telnet.JPG (114,3 KБ)

Офлайн

#2 Апрель 10, 2013 15:08:09

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Настройка двух библиотек

После отправки команды через телнет:

data = tn.read_all()
gpgga = nmea.GPGGA()
gpgga.parse(data)

Ну или из потока с помощью NMEAStreamer.



Офлайн

#3 Апрель 10, 2013 15:40:30

robot_chickn
Зарегистрирован: 2013-03-25
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Настройка двух библиотек

почему то после
data = tn.read_all()
программа как будто бы зависает. мой код:
import getpass
import sys
import telnetlib
HOST = “192.168.1.1”
tn = telnetlib.Telnet(HOST)
print “telnet true”
tn.write(“stty -F /dev/ttyO3 4800”)
print “1 true”
tn.write(“cat /dev/ttyO3”)
print “2 true”
from pynmea import nmea
data = tn.read_all()
print “1”
gpgga = nmea.GPGGA()
print “2”
gpgga.parse(data)
print “3”
print gpgga.latitude

последнее что я вижу при включение это: 2 true

Офлайн

#4 Апрель 10, 2013 16:18:30

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Настройка двух библиотек

Telnet.read_all()
Read all data until EOF; block until connection closed.

Если такой режим вам не подходит, то просто используйте другой метод чтения.
Там их чуть меньше 10.



Офлайн

#5 Апрель 10, 2013 16:24:01

robot_chickn
Зарегистрирован: 2013-03-25
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Настройка двух библиотек

у меня работает чтение только: tn.read_some() я могу прочитать непосредственно, что мне пишет телнет, но когда я подключаюсь к GPS, то не получается считать данные с него. Пробовал практически все команды.
Если делать все то же самое в ручную через командную строку, то данные приходят. Смотрите файл в первом сообщении.
Что можете посоветовать?

Офлайн

#6 Апрель 10, 2013 17:53:15

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Настройка двух библиотек

А GPS у вас точно имеет адрес 192.168.1.1?
Соединение то существует?

Что возвращает tn.read_some()?



Офлайн

#7 Апрель 10, 2013 18:02:03

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Настройка двух библиотек

Думаю, еще не хватает новой строки в конце команд

tn.write("stty -F /dev/ttyO3 4800\n")
...

Отредактировано reclosedev (Апрель 10, 2013 18:05:24)

Офлайн

#8 Апрель 10, 2013 21:04:20

robot_chickn
Зарегистрирован: 2013-03-25
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Настройка двух библиотек

reclosedev
Думаю, еще не хватает новой строки в конце команд
Спасибо большое! Действительно этого не хватало, теперь могу через print выводить полученную информацию на экран. Только вот почему то не работает до сих пор pynmea.
делаю теперь вот так:
import getpass
import sys
import telnetlib
HOST = “192.168.1.1”
tn = telnetlib.Telnet(HOST)
print “telnet true”
tn.write(“stty -F /dev/ttyO3 4800\n”)
tn.write(“cat /dev/ttyO3\n”)
from pynmea import nmea
data = tn.read_all()
gpgga = nmea.GPGGA()
gpgga.parse(data)
print gpgga.latitude

для проверки работает или нет запускал следующее и получал данные:
import getpass
import sys
import telnetlib
HOST = “192.168.1.1”
tn = telnetlib.Telnet(HOST)
print “telnet true”
tn.write(“stty -F /dev/ttyO3 4800\n”)
tn.write(“cat /dev/ttyO3\n”)
while True:
print tn.read_eager()

Как мне можно сделать чтобы я смог вытаскивать широту и долготу из потока данных??

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version