Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 24 янв 2019, 12:06

Burst писал(а):
22 янв 2019, 13:55
P.S. А ключи " -f -e" и "--ee" в скрипте одновременно сработают?
Конечно.

Burst
Сообщения: 113
Зарегистрирован: 25 янв 2018, 13:22
Откуда: Балашиха

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Burst » 25 янв 2019, 16:27

Обновил до 4.32b1. Возник следующий глюк: при нажатии на кнопку одновременно срабатывает действие из Act и происходит обращение к серверу, хотя галочки справа от поля "Act" не стоит. По отдельности все работает: т.е. если убрать все из Act, оставить действие в скрипте на сервере - происходит обращение к серверу и выполнение команды ; если в скрипте на сервере убрать выполнение команды (сам скрипт и сервер не выключать), но оставить в поле Act - то выполняется действие из Act. HTTP всегда возвращает код 200.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 25 янв 2019, 17:10

Описанную проблему воспроизвести не могу.
По-видимому, проблема в вашем скрипте. Покажите его код.

Burst
Сообщения: 113
Зарегистрирован: 25 янв 2018, 13:22
Откуда: Балашиха

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Burst » 25 янв 2019, 17:37

Andrey_B писал(а):
25 янв 2019, 17:10
Описанную проблему воспроизвести не могу.
По-видимому, проблема в вашем скрипте. Покажите его код.

Код: Выделить всё

#!/usr/bin/python

ip=\
{"192.168.1.221":"cntrl1","192.168.1.222":"cntrl2",\
"192.168.1.223":"cntrl3","192.168.1.224":"cntrl4",\
"192.168.1.225":"cntrl5"}

controllers=\
{"cntrl1":"192.168.1.221","cntrl2":"192.168.1.222",\
"cntrl3":"192.168.1.223","cntrl4":"192.168.1.224",\
"cntrl5":"192.168.1.225"}

import cgi, cgitb
import pymysql
import urllib.request
import time
import os

conn = pymysql.connect(
ХХХХ)

c = conn.cursor()

form = cgi.FieldStorage()

if form.getvalue('pt'):
    pt=form.getvalue('pt')
    if form.getvalue('m'):
        m=form.getvalue('m')
    else:
        m='0'
    if form.getvalue('click'):
        click=form.getvalue('click')
    else:
        click='0'


print ("Content-type: text/html\r\n\r\n");
controller=ip.get(os.environ['REMOTE_ADDR'])
query="select * from events where controller1='"+controller+"' and port1="+pt+" and m="+m+" and click="+click

print ("nothing")
c.execute(query)
sel=c.fetchall()
for r in sel:
    if r[9]==0:
        cmd="http://"+controllers.get(r[6])+"/sec/?cmd="+r[7]+":"+r[8]
        #print(cmd)
        temp = urllib.request.urlopen(cmd).read().decode()
        print(temp)
p16(IN): act: 22:2

Лог апача - после многочисленного тыканья на кнопку, лампочка вспыхивает на долю секунды:

Код: Выделить всё

192.168.1.221 - - [24/Jan/2019:20:02:53 +0300] "GET /pt.py?pt=16&cnt=22 HTTP/1.1" 200 273 "-" "megad"
192.168.1.221 - - [24/Jan/2019:20:02:56 +0300] "GET /pt.py?pt=16&cnt=23 HTTP/1.1" 200 273 "-" "megad"
Убрал с порта 16 act 22:2

Код: Выделить всё

192.168.1.221 - - [24/Jan/2019:20:06:35 +0300] "GET /pt.py?st=1 HTTP/1.1" 200 268 "-" "megad"
Лампочка нормально включилась и выключилась через сервер:

Код: Выделить всё

192.168.1.221 - - [24/Jan/2019:20:06:50 +0300] "GET /pt.py?pt=16&cnt=1 HTTP/1.1" 200 273 "-" "megad"
192.168.1.221 - - [24/Jan/2019:20:06:52 +0300] "GET /pt.py?pt=16&cnt=2 HTTP/1.1" 200 273 "-" "megad"
cmd которая формируется скриптом:

Код: Выделить всё

http://192.168.1.221/sec/?cmd=22:2

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 25 янв 2019, 17:53

Во-первых, всегда возникает вопрос, зачем открывать новое соединение (urllib.request.urlopen), когда значительно проще и быстрее отдать команду в рамках текущего.
Во-вторых, все эти "print ("nothing")...print(temp)" улетают в контроллер и он пытается интерпретировать "это", как команды сервера. Поэтому нужно делать дамп сетевого обмена и смотреть, что именно воспринимается контроллером как некорректный ответ сервера.

Burst
Сообщения: 113
Зарегистрирован: 25 янв 2018, 13:22
Откуда: Балашиха

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Burst » 25 янв 2019, 18:08

Andrey_B писал(а):
25 янв 2019, 17:53
Во-первых, всегда возникает вопрос, зачем открывать новое соединение (urllib.request.urlopen), когда значительно проще и быстрее отдать команду в рамках текущего.
Во-вторых, все эти "print ("nothing")...print(temp)" улетают в контроллер и он пытается интерпретировать "это", как команды сервера. Поэтому нужно делать дамп сетевого обмена и смотреть, что именно воспринимается контроллером как некорректный ответ сервера.
Новое соединение для универсальности, т.к. команда может идти не только на текущий контроллер, но и на другие контроллеры или на несколько контроллеров несколько команд.
Т.е. правильно ли я понимаю, что после получения "HTTP/1.1 200 OK Content-Type: text/htm " контроллер пытается интерпретировать дальнейший текст, считает что ответ некорректный и для исправления достаточно будет если ответом от сервера контроллеру будет:

Код: Выделить всё

HTTP/1.1 200 OK
Content-Type: text/html
тогда контроллер не будет ничего дополнительно пытаться интерпретировать, посчитает что скрипт на сервере отработал корректно и действие, прописанное в "Act", выполнять не будет?

P.S. попозже tcpdump'ом сниму и выложу обмен между сервером и контроллером, понятно будет что на контроллер в ответ попадает.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 25 янв 2019, 19:57

Если открывается новая сессия, то текущую нужно закрыть.
Как это делается на языке python сходу не скажу. В PHP для этого есть функция flush().
Иначе команда от сервера поступает раньше, чем передается ответ со статусом HTTP 200 в рамках текущей сессии. И это может вызывать описанные вами проблемы.
В связи с необходимостью экономить оперативную память, в контроллере нет tcp/ip heap. Это накладывает определенные ограничения.

Burst
Сообщения: 113
Зарегистрирован: 25 янв 2018, 13:22
Откуда: Балашиха

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Burst » 25 янв 2019, 20:15

Спасибо! Скорее всего дело действительно в этом - веб сервер буферизирует вывод и контроллер не дождавшись ответа выполняет команду. В питоне есть sys.stdout.flush(), попробую с ним поиграться.

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Ruslan » 26 янв 2019, 18:08

Изучаю диммирование с помощью управления ШИМ-портом. С порта P10 ШИМ-сигнал подается на соответствующую ножку микросхемы L298N. В качестве нагрузки подключена лампочка на 12 В. Все диммируется как положено.

Но заметил вот какую странность. После подачи питания на Мегу, когда она (Мега) загружается, в течение, примерно, 5 секунд лампочка загорается, потом (по окончании загрузки Меги) -- гаснет. Прошивка последняя (4.32 beta1). Кстати, на предыдущей прошивке (4.31 beta8) было то же самое.
Покажу настройку ШИМ-порта:
CropImage.png
Настройка ШИМ-порта
CropImage.png (7.6 КБ) 2434 просмотра
Это так и должно быть (такое поведение)?

Сразу скажу, что Мега отсоединена от сети, а все остальные порты переведены в состояние NC.

Andry
Сообщения: 213
Зарегистрирован: 23 мар 2017, 10:41

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andry » 26 янв 2019, 21:07

Default 1 и будет наоборот.

Burst
Сообщения: 113
Зарегистрирован: 25 янв 2018, 13:22
Откуда: Балашиха

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Burst » 26 янв 2019, 21:57

Нашел в чем проблема, обошелся пока без flash(). Мега видимо не все заголовки переваривает, возможно есть ограничения по длине?
Когда сервер отвечает Меге вот с таким заголовком:

Код: Выделить всё

       HTTP/1.1 200 OK
        Date: Sat, 26 Jan 2019 17:43:52 GMT
        Server: Apache/2.4.29 (Ubuntu)
        Content-Length: 9
        Content-Type: text/html; charset=UTF-8
то она считает что сервер живой и действия в поле Act не выполняет. А вот когда на сервере настроены некоторые элементы безопасности, заголовок дополняется и Мега считает что сервер сдох и выполняет действия в Act, хотя HTTP код приходит тоже 200

Код: Выделить всё

        HTTP/1.1 200 OK
        Date: Sat, 26 Jan 2019 17:48:37 GMT
        Server: Apache/2.4.29 (Ubuntu)
        Strict-Transport-Security: max-age=63072000; includeSubdomains
        X-Frame-Options: DENY
        X-Content-Type-Options: nosniff
        Content-Length: 9
        Content-Type: text/html; charset=UTF-8

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Ruslan » 27 янв 2019, 01:28

Andry писал(а):
26 янв 2019, 21:07
Default 1 и будет наоборот.
А вот и не наоборот. Поставил Default =30 (чтобы яркость была небольшой). При старте Меги все равно включается на полную яркость, а через 5 секунд (по окончании загрузки контроллера) переходит на положенные по дефолту 30.

В любом случае нехорошо, когда когда, допустим, весь диммируемый свет в доме будет вспыхивать при старте Меги.
Прошивку обновлял с очисткой EEPROM. Ни в каких входах поле Act не заполнено...
Если это важно, исп.модуль MegaD-14-IN.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 27 янв 2019, 10:51

Ruslan писал(а):
26 янв 2019, 18:08
С порта P10 ШИМ-сигнал подается на соответствующую ножку микросхемы L298N. В качестве нагрузки подключена лампочка на 12 В. Все диммируется как положено. Но заметил вот какую странность. После подачи питания на Мегу, когда она (Мега) загружается, в течение, примерно, 5 секунд лампочка загорается, потом (по окончании загрузки Меги) -- гаснет.
Этот эффект проявляется в том случае, когда L298N подключается к порту MegaD-14-IN в режиме "цифрового входа". И связан он с наличием не отключаемой подтяжки. В момент включения контроллера и в течение времени, когда работает загрузчик, порт не сконфигурирован как OUT/PWM и цифровая подтяжка меняет логический уровень на выходе, что и проявляется в виде включения нагрузки.
Вот почему в новом MegaD-14-IOR, который пришел на замену MegaD-14-IN, была реализована возможность отключения цифровой подтяжки. Подробнее об этом написано здесь. В разделе "Отличие №4" вы найдете точное описание вашей ситуации.

Ruslan
Сообщения: 2184
Зарегистрирован: 06 янв 2014, 20:44

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Ruslan » 27 янв 2019, 10:57

Andrey_B писал(а):
27 янв 2019, 10:51
... Подробнее об этом написано здесь. В разделе "Отличие №4" вы найдете точное описание вашей ситуации.
Спасибо за разъяснения!

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 27 янв 2019, 11:26

Burst писал(а):
26 янв 2019, 21:57
А вот когда на сервере настроены некоторые элементы безопасности, заголовок дополняется и Мега считает что сервер сдох и выполняет действия в Act, хотя HTTP код приходит тоже 200
А зачем домашнему серверу эти сомнительные "элементы безопасности" в виде заголовков типа "nosniff"? Это как надпись "совершенно секретно", только привлекающая внимание?
Что касается проблемы, то прошивка считает, что размер пакета с ответом сервера, включая заголовки, не должен превышать 220 байт. Все эти заголовки контроллеру не нужны. Чем меньше пакет, тем выше производительность. Ваш пакет получался больше. Увеличил этот лимит на 100 байт. Теперь контроллер должен переваривать ваши массивные заголовки.
https://ab-log.ru/files/File/megad-2561 ... a2-hex.zip
Да, насчет "charset=UTF-8". В пакете не должно быть UTF-8 BOM.

Burst
Сообщения: 113
Зарегистрирован: 25 янв 2018, 13:22
Откуда: Балашиха

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Burst » 27 янв 2019, 23:51

Andrey_B писал(а):
27 янв 2019, 11:26
Что касается проблемы, то прошивка считает, что размер пакета с ответом сервера, включая заголовки, не должен превышать 220 байт. Все эти заголовки контроллеру не нужны. Чем меньше пакет, тем выше производительность. Ваш пакет получался больше. Увеличил этот лимит на 100 байт. Теперь контроллер должен переваривать ваши массивные заголовки.
https://ab-log.ru/files/File/megad-2561 ... a2-hex.zip
Да, насчет "charset=UTF-8". В пакете не должно быть UTF-8 BOM.
Спасибо, теперь работает и с большим и с маленьким заголовком.
Чтобы оптимизировать заголовки HTTP подниму для Меги отдельный виртуальный сервер, на нем уже весь мусор уберу.

Prokol
Сообщения: 197
Зарегистрирован: 25 янв 2015, 21:43

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Prokol » 28 янв 2019, 13:07

После обновления версии прошивки 4.29b9 до последней перестал работать датчик BMx280. Не определяется и показания все 0. Откатил версию. Все равно не работает. Сброс настроек делал в обоих случаях. Что может быть?

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 28 янв 2019, 13:14

Если scan датчик не находит, то скорее всего дело не в прошивке. Нужно проверять соединения, подключения.
Если scan датчик находит и он висит на одной шине с другими I2C-устройствами, то нужно хотя бы один раз настроить порт на работу с BMx280, чтобы контроллер считал и сохранил калибровочные коэффициенты.

Prokol
Сообщения: 197
Зарегистрирован: 25 янв 2015, 21:43

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Prokol » 28 янв 2019, 13:45

Скан не находит. Соединения не трогались. Проверял соединения после этого несколько раз. Произошло именно после обновления. На шине висит только один датчик.
Поменял порты, заработал. Проблема с портами?

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 28 янв 2019, 14:09

Я могу рассуждать только рационально. Процесс перепрошивки никак даже теоретически не способен повлиять на работоспособность портов.
Сохраните настройки контроллера, временно полностью очистите EEPROM и настройте прежние порты SCL/SDA вручную. Если это помогает, значит дело только в настройках или в процессе записи сохраненных настроек.

Ответить