Не работает Z-Connector в Linux

Данный раздел предназначен для русскоязычных пользователей. Если вы владеете английским, рекомендуем также просмотреть общую ветку обсуждений на английском.
roher
Posts: 28
Joined: 18 Oct 2012 10:10

Не работает Z-Connector в Linux

Post by roher » 18 Oct 2012 13:29

Добрый день всем! У меня в Linux Run_Z-agent.sh (ну а точнее сам z-agent) не может подключиться к устройству. После запуска висит надпись
Opening device...
и всё, никаких сообщений дальше нет.
Устройство у меня Z-Wave.Me Z-Stick 4, ОС - Последняя debian
При этом сам Z-Stick системой определяется, вот вывод dmesg:
[2484432.888014] usb 3-2: new full speed USB device using uhci_hcd and address 4
[2484433.046965] usb 3-2: New USB device found, idVendor=067b, idProduct=2303
[2484433.046970] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[2484433.046974] usb 3-2: Product: USB-Serial Controller D
[2484433.046977] usb 3-2: Manufacturer: Prolific Technology Inc.
[2484433.047129] usb 3-2: configuration #1 chosen from 1 choice
[2484433.050059] pl2303 3-2:1.0: pl2303 converter detected
[2484433.062074] usb 3-2: pl2303 converter now attached to ttyUSB0

Мало того, в Windows Z-Connector замечательно определяет и подключает этот Z-Stick к сети.

Вот мой Run_Z-agent.sh:
#!/bin/bash

cd ${0%/*}

if [ "`uname`" == "Darwin" ]
then
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:.
fi

while [ 1 ]
do
./z-agent -s z-cloud.z-wave.me -p 9087 --cacert ../Certificates/cacert.pem --cert ../Certificates/cert.pem --key ../Certificates/cert.key -d /dev/ttyUSB0 --debug
# substitute /dev/ttyUSB0 by /dev/ttyACM0 or another device depending on the hardware you have
# on Mac OS X use /dev/cu.usbserial or another cu.* device

sleep 1 # spare the CPU
done

как видите, даже поставил --debug, что не дало никакого эффекта. Параметры соединения (-s и -p) поставил как в конфигурации в Windows Z-Connector.

Так же вот на всякий случай права на /dev/ttyUSB0:
crw-rw-rw- 1 root dialout 188, 0 Oct 18 13:58 /dev/ttyUSB0

Подскажите плиз что может быть не так?
Спасибо.

User avatar
PoltoS
Posts: 5211
Joined: 26 Jan 2011 19:36

Сложно сходу сказать, в вчём дело

Post by PoltoS » 18 Oct 2012 13:29

Скорее всего какая-то проблема с драйвером. Вы побовали запускать z-agent с любым другим устройством, представляющим /dev/ttyUSBx, но с другим драйвером. Попробуйте какой-нибудь модем.Ещё имеет смысл вывести трасировочную информацию. Запуститеuser@host:~/Downloads/Z-Connector/Unix$ strace ./z-agent -s z-cloud.z-wave.me -p 9087 --cacert ../Certificates/cacert.pem --cert ../Certificates/cert.pem --key ../Certificates/cert.key -d /dev/ttyUSB0Пришлите нам, что у вас в районе строк (только если много всего будет, то лучше на почту info; или прямо такой же кусок как здесь):stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=95, ...}) = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}, 16) = 0
poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}])
sendto(3, "8@117z-cloud6z-wave2me"..., 35, MSG_NOSIGNAL, NULL, 0) = 35
poll([{fd=3, events=POLLIN}], 1, 5000) = 1 ([{fd=3, revents=POLLIN}])
ioctl(3, FIONREAD, [51]) = 0
recvfrom(3, "8@201200117z-cloud6z-wave2me"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}, [16]) = 51
close(3) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f514ca8f000
write(1, " Opening device...
", 22 Opening device...
) = 22
open("/dev/ttyUSB0", O_RDWR) = 3
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B115200 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_CONTINUE or TCSETSF, {B115200 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B115200 -opost -isig -icanon -echo ...}) = 0
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 4
setsockopt(4, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
write(1, " Connecting to server...
", 28 Connecting to server...
) = 28
connect(4, {sa_family=AF_INET, sin_port=htons(9087), sin_addr=inet_addr("46.20.244.23")}, 16) = 0
Возможно, проблема обнаружится

User avatar
PoltoS
Posts: 5211
Joined: 26 Jan 2011 19:36

Ещё можно попробовать minicom

Post by PoltoS » 18 Oct 2012 13:29

Запустите
minicom -D /dev/ttyUSB0
и проверьте, что он сможет открыть порт.

roher
Posts: 28
Joined: 18 Oct 2012 10:10

Вот кусок начиная со stat:

Post by roher » 18 Oct 2012 13:29

Вот кусок начиная со stat:
stat64("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=22, ...}) = 0
gettimeofday({1350636879, 784337}, NULL) = 0
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("172.16.0.1")}, 16) = 0
gettimeofday({1350636879, 784545}, NULL) = 0
poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}])
send(3, "257313117z-cloud6z-wave2me"..., 35, MSG_NOSIGNAL) = 35
poll([{fd=3, events=POLLIN}], 1, 5000) = 1 ([{fd=3, revents=POLLIN}])
ioctl(3, FIONREAD, [51]) = 0
recvfrom(3, "257313201200117z-cloud6z-wave2me"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("172.16.0.1")}, [16]) = 51
close(3) = 0
fstat64(1, {st_mode=S_IFREG|0644, st_size=22, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb76f9000
write(1, " Opening device...
", 22) = 22
open("/dev/ttyUSB0", O_RDWR|O_NOCTTY
На последней строке (вот именно так как здесь) вывод заканчивается и процесс повисает.

Minicom выдал следующее:
Welcome to minicom 2.4

OPTIONS: I18n
Compiled on Sep 5 2010, 09:23:03.
Port /dev/ttyUSB0

Press CTRL-A Z for help on special keys

Другие девайсы проверить не могу, т.к. таковых нет в наличии.
Спасибо!

User avatar
PoltoS
Posts: 5211
Joined: 26 Jan 2011 19:36

Собственно, разница в этом:

Post by PoltoS » 18 Oct 2012 13:29

Собственно, разница в этом: open("/dev/ttyUSB0", O_RDWR|O_NOCTTYПопробуйте в файле Unix/main.c на строке 164 убрать O_NOCTTY:Вместо: dev = open(deviceName, O_BINARY | O_RDWR | O_NOCTTY);написать: dev = open(deviceName, O_BINARY | O_RDWR);Если после сборки всё заработает, то мы попробуем понять, почему у Вас это не работает. Данная опция была добавлена для поддержки Mac OS X и работает на наших Linux компьютерах.Вы пробовали запускать на других компьютерах Linux? 

roher
Posts: 28
Joined: 18 Oct 2012 10:10

Привет! Нет, убрать O_NOCTTY

Post by roher » 18 Oct 2012 13:29

Привет! Нет, убрать O_NOCTTY не помогло, картина та же самая (ну за исключением отсутствия O_NOCTTY в конце).

Попробовал скомпилировать и запустить на Asus RT-N16 - всё заработало. Причём даже драйвера ставить не понадобилось. Правда соединение почему-то очень плохо держит, т.е. всё время буквально через 10-20 секунд после подключения серверу выскакивает "socket has gone", но это уже другая история.

Вот так. Я конечно могу временно оставить свисток в RT-N16, но он занимает нужный для другого usb-порт, так что на постоянку не вариант.

User avatar
PoltoS
Posts: 5211
Joined: 26 Jan 2011 19:36

Проблема явно в драйвере или

Post by PoltoS » 18 Oct 2012 13:29

Проблема явно в драйвере или udev. Что-то определённое сказать сложно. А другие "модемы" (3G, например) работают?

roher
Posts: 28
Joined: 18 Oct 2012 10:10

Добрый день. Проверить на

Post by roher » 18 Oct 2012 13:29

Добрый день. Проверить на модеме пока не получилось так как его нет в наличии. Хотел пока не найду модем воткнуть свисток в мой ASUS RT-N16. Но здесь проблема с обрывом: каждые 5 секунд socket has gone, и в итоге сайт пишет что контроллер к сети не подключен. Может хоть с этой проблемой пока поручится справиться?

User avatar
PoltoS
Posts: 5211
Joined: 26 Jan 2011 19:36

Эта проблема обычно вызвана неверным портом стика

Post by PoltoS » 18 Oct 2012 13:29

Вы сокрее всего выбрли неверный порт в Run_Z-Agent.sh.

Вчера в логах от Вас зафиксировано длительное подключение без особых проблем. Видимо, с проблемой Вы справились.

roher
Posts: 28
Joined: 18 Oct 2012 10:10

Порт посмотрю, спасибо.

Post by roher » 18 Oct 2012 13:29

Посмотрел параметры соединения: такие же как в Windows: адрес z-cloud.zwave.me порт 9087.
Может какой есть резервный, другой попробовать?

А длительное подключение без особых проблем - это я свисток в ноутбук с Windows 7 вставлял. Тут действительно всё стабильно работает. Но я не могу всю жизнь держать дома включённый ноутбук :)

Post Reply