Автор Тема: Z5R-WEB-json - Контроллер перестает отправлять запросы и евенты серверу  (Прочитано 6733 раз)

astashov

  • Пользователь
  • *****
  • Сообщений: 72
Второй день подряд, без каких то определенных причин контроллер перестает отправлять сообщения с запросами и евентами на сервер.
За два дня - два случая.

Первый случай - нет запросов, есть только евенты
Второй случай - нет ни запросов, ни евентов. Вообще никакого трафика от контроллера в сторону сервера.

При этом веб интерфейс работает, и проход по уже записанным картам работает.
Такое ощущение, как будто контроллер перешел в оффлайн режим. Только вот почему?

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

Подскажите пожалуйста, в какую сторону смотреть?

Егор

  • Пользователь
  • *****
  • Сообщений: 25
Присоединяюсь. Буквально на прошлой неделе такое же было. На ровном месте контроллер  перестал слать эвенты. Веб -интерфейс работал нормально.
После перезагрузки все восстановилось с пакетом прошедших событий.

ATOMHbIu

  • Пользователь
  • *****
  • Сообщений: 4
Добрый день, с такой же проблемой столкнулись, бывало 4-5 раз за день вырубался, вэб морда работала а сам контроллер в режим оффлайн уходил. Немного помог swapon если по ssh зайти на сам контроллер. Он сам стал рестартовать при сбое и кол-во перезагрузок снизилось до 1(редко 2) в сутки.

astashov

  • Пользователь
  • *****
  • Сообщений: 72
Добрый день, с такой же проблемой столкнулись, бывало 4-5 раз за день вырубался, вэб морда работала а сам контроллер в режим оффлайн уходил. Немного помог swapon если по ssh зайти на сам контроллер. Он сам стал рестартовать при сбое и кол-во перезагрузок снизилось до 1(редко 2) в сутки.
Вот интересную вещь сказали. Что то я раньше не смотрел наличия ssh. Даже когда прочитал что на опенврт работает контроллер. А тут постучался, и да. И это отлично.
Теперь при желании можно из него даже WiFi точку доступа сделать :) Что бы собирать сиды устройств, которые вокруг него :) Ну это если совсем скучно будет :)
Эх ручонки мои ручонки.... :)

astashov

  • Пользователь
  • *****
  • Сообщений: 72
Конечно интересно. Можно было бы поподробнее покопаться, но не хочется в данный момент тратить время.

Что в итоге я понял:
На сервере есть демон, который общается с GPIO через i2c.
Видимо на аппаратном уровне реализована собачка(watchdog), который в случае отсутствия периодического опроса демоном webjsond, осуществляет принудительный перезапуск контроллера, ведь что то пошло не так и надо перезагрузиться что бы демон webjsond запустился через демон webd.
Причем если запустить  webjsond в интерактивном режиме, то что мы видим в евентах? Правильно. Пустые евенты.
А вот после того как мы убиваем второй процесс, то на нас с дикой скоростью вываливаются старые евенты. В моем случае вывалились евенты за три дня. Т.е. по факту - это скорее всего и есть причина сдвига указателя на крайний евент.
Т.е. видимо в процессе обычной работы, по какой то причине запустился второй экземпляр webjsond, и вот он и приводил к тому, что шли пустые евенты и потом вся история.


Это частично(а может и полностью) объясняет почему контроллер перезагружался если ему послать криво сформированный ответ на евент. Видимо webjsond  не мог сериализовать ответ от сервера, и получал эксепшен. Умирал.... А вслед за ним перезапускался контроллер, что бы воскресить потерянного боевого товарища :)


astashov

  • Пользователь
  • *****
  • Сообщений: 72
Так что перезапуск контроллера - это результат не кривой работы опенврт, или просадкой питания(хотя в некоторых случаях это так и есть), а такой нехитрый способ решить ошибки в программном коде :)
Круто чо :)


astashov

  • Пользователь
  • *****
  • Сообщений: 72
Я вот до этого говорил что на ардуинке можно такое собрать, беру свои слова обратно :)
а ардуинке не удобно :) Проще взять распбери пай, на ней уже и gpio есть, и usb, и сеть... И даже wifi :)
И дебиан для распбери, а не openwrt, и места побольше :) и даже сата можно подключить при необходимости....

А может это и есть модификация незначительная распбери? :) Не приглядывался на плату, не скажу :)

astashov

  • Пользователь
  • *****
  • Сообщений: 72
и еще маленький моментик:
в логах на контроллере периодически проскакивает

ReadMem error CS 72 72

Причем последние два байта всегда разные.

А так же в логе есть вот такое:

Try To Get License!
Error! Wrong signature!(A6500D2C)

Это что за зверь? :)

ATOMHbIu

  • Пользователь
  • *****
  • Сообщений: 4
и еще маленький моментик:
в логах на контроллере периодически проскакивает

ReadMem error CS 72 72

Причем последние два байта всегда разные.

А так же в логе есть вот такое:

Try To Get License!
Error! Wrong signature!(A6500D2C)

Это что за зверь? :)

Вообще да, Именно ReadMem Error и натолкнул меня на размышление об утечках памяти. Есть подозрение что прошивка самого контроллера(модуля) на плюсах написана(не смотрел но что то подсказывает), отсюда и идет утечка памяти, как следствие переполнение в определенный момент, и z5r .  В пользу этой версии говорит так же что swapon увеличил время работы до сбоя. Плюс контроллер стал сам уходить в рестарт, и сдается мне это делает именно openWRT, а не какая то внутренняя логика z5r.

Прошу сильно не пинать за догадки, я больше по программной части.

astashov

  • Пользователь
  • *****
  • Сообщений: 72
не, это именно openwrt. А еще webjsond регулярно общается с gpio14, и на постоянной основе только с ним. возможно при отсутствии общения и происходит перезапуск контроллера.

astashov

  • Пользователь
  • *****
  • Сообщений: 72
кстати, логи которые скачиваются через веб интерфейс, которые ище в бинарном формате - это обычный dmesg. где то просто мурат говорил что это какие то специальные логи для разработчиков.... нет там ничего интересного. strace и то интереснее и информативнее.

astashov

  • Пользователь
  • *****
  • Сообщений: 72

Версия FW контроллера:   3.26
Версия FW модуля связи: 1.0.130

В очередной раз контроллер перестал слать евенты:
последнее в логе:
Цитировать
[146608.970000] GetCtrlParams
DATA TO PARSE: {"date":"2018-11-25 21:18:49","interval":10,"messages":[]}66142,"operation":"ping","active":1,"mode":0}]}
[146609.000000] Try to parse JSON
[146609.000000] DATE= 2018-11-25 21:18:49
[146609.010000] INTERVAL = 10
[146609.010000] T_C=10
[146618.840000] GetCtrlParams
[146618.850000] Events: 0 (Empty: 2008)
[146618.850000] GetCtrlParams
DATA TO PARSE: {"date":"2018-11-25 21:18:59","interval":10,"messages":[]}6232,"operation":"ping","active":1,"mode":0}]}
[146618.880000] Try to parse JSON
[146618.880000] DATE= 2018-11-25 21:18:59
[146618.880000] INTERVAL = 10
[146618.890000] T_C=10
[146623.800000] External error
[146624.170000] External error
До этого несколько
Цитировать
[146390.880000] GetCtrlParams
DATA TO PARSE: {"date":"2018-11-25 21:15:11","interval":10,"messages":[]}65464,"operation":"ping","active":1,"mode":0}]}
[146390.920000] Try to parse JSON
[146390.930000] DATE= 2018-11-25 21:15:11
[146390.930000] INTERVAL = 10
[146390.930000] T_C=10
[146396.820000] ReadMem error CS C0 02
[146396.870000] ReadMem error CS C1 01
[146397.180000] External error
[146397.230000] ReadMem error CS C3 01
[146397.240000] ReadMem error CS C4 02
[146398.060000] GetExternal
[146398.060000] ERROR: WAIT TIMEOUT!
[146401.040000] GetCtrlParams
[146401.050000] Events: 0 (Empty: 2008)
[146401.050000] GetCtrlParams

Да и в принципе, ReadMem error достаточно.

В ps  нет заветного процесса
Цитировать
root@Z5RWEB:~# ps
  PID USER       VSZ STAT COMMAND
    1 root      1332 S    /sbin/procd
    2 root         0 SW   [kthreadd]
    3 root         0 SW   [ksoftirqd/0]
    5 root         0 SW<  [kworker/0:0H]
    6 root         0 SW   [kworker/u2:0]
    7 root         0 SW<  [khelper]
    8 root         0 SW   [kworker/u2:1]
   61 root         0 SW<  [writeback]
   64 root         0 SW<  [bioset]
   66 root         0 SW<  [kblockd]
   91 root         0 SW   [kworker/0:1]
   96 root         0 SW   [kswapd0]
  141 root         0 SW   [fsnotify_mark]
  156 root         0 SW<  [ath79-spi]
  238 root         0 SW<  [deferwq]
  250 root         0 SW   [khubd]
  331 root         0 SWN  [jffs2_gcd_mtd3]
  384 root       876 S    /sbin/ubusd
  385 root       772 S    /sbin/askfirst ttyATH0 /bin/ash --login
  797 root         0 SW<  [cfg80211]
  927 root      1036 S    /sbin/logd -S 16
 1027 root         0 SW<  [kworker/0:1H]
 1149 nobody     916 S    /usr/sbin/dnsmasq -C /var/etc/dnsmasq.conf -k
 1271 root      1152 S    /usr/sbin/dropbear -F -P /var/run/dropbear.1.pid -p 22 -K 300
 1503 root      1364 S    /usr/sbin/crond -f -c /etc/crontabs -l 5
 1521 root      2088 S    /usr/sbin/uhttpd -f -h /www -r Z5RWEB -x /cgi-bin -u /ubus -t 60 -T 30 -A 1 -n 3 -p 0.0.0.0:80 -i .sh=/bin/sh -I index.sh -C /etc/uhttpd.crt -K /etc/uhttpd.key -s 0.0.0.0:443
 1528 root      1488 S    /sbin/netifd
 1637 root      1360 S    ntpd -p pool.ntp.org -S ctrl_time
13777 root      1196 D    /usr/sbin/dropbear -F -P /var/run/dropbear.1.pid -p 22 -K 300
13785 root      1364 S    -ash
13791 root      1360 R    ps
15438 root         0 RW   [kworker/0:0]


Как только с консоли запустил
Цитировать
webjsond -d
евенты сразу полетели и контроллер начал работать и присылать пинги.
После старта, в логе кроме нескольких ReadMem error ничего подозрительного нет.