Конечно.
Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Обновил до 4.32b1. Возник следующий глюк: при нажатии на кнопку одновременно срабатывает действие из Act и происходит обращение к серверу, хотя галочки справа от поля "Act" не стоит. По отдельности все работает: т.е. если убрать все из Act, оставить действие в скрипте на сервере - происходит обращение к серверу и выполнение команды ; если в скрипте на сервере убрать выполнение команды (сам скрипт и сервер не выключать), но оставить в поле Act - то выполняется действие из Act. HTTP всегда возвращает код 200.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Описанную проблему воспроизвести не могу.
По-видимому, проблема в вашем скрипте. Покажите его код.
По-видимому, проблема в вашем скрипте. Покажите его код.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Код: Выделить всё
#!/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)
Лог апача - после многочисленного тыканья на кнопку, лампочка вспыхивает на долю секунды:
Код: Выделить всё
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"
Код: Выделить всё
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"
Код: Выделить всё
http://192.168.1.221/sec/?cmd=22:2
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Во-первых, всегда возникает вопрос, зачем открывать новое соединение (urllib.request.urlopen), когда значительно проще и быстрее отдать команду в рамках текущего.
Во-вторых, все эти "print ("nothing")...print(temp)" улетают в контроллер и он пытается интерпретировать "это", как команды сервера. Поэтому нужно делать дамп сетевого обмена и смотреть, что именно воспринимается контроллером как некорректный ответ сервера.
Во-вторых, все эти "print ("nothing")...print(temp)" улетают в контроллер и он пытается интерпретировать "это", как команды сервера. Поэтому нужно делать дамп сетевого обмена и смотреть, что именно воспринимается контроллером как некорректный ответ сервера.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Новое соединение для универсальности, т.к. команда может идти не только на текущий контроллер, но и на другие контроллеры или на несколько контроллеров несколько команд.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
P.S. попозже tcpdump'ом сниму и выложу обмен между сервером и контроллером, понятно будет что на контроллер в ответ попадает.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Если открывается новая сессия, то текущую нужно закрыть.
Как это делается на языке python сходу не скажу. В PHP для этого есть функция flush().
Иначе команда от сервера поступает раньше, чем передается ответ со статусом HTTP 200 в рамках текущей сессии. И это может вызывать описанные вами проблемы.
В связи с необходимостью экономить оперативную память, в контроллере нет tcp/ip heap. Это накладывает определенные ограничения.
Как это делается на языке python сходу не скажу. В PHP для этого есть функция flush().
Иначе команда от сервера поступает раньше, чем передается ответ со статусом HTTP 200 в рамках текущей сессии. И это может вызывать описанные вами проблемы.
В связи с необходимостью экономить оперативную память, в контроллере нет tcp/ip heap. Это накладывает определенные ограничения.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Спасибо! Скорее всего дело действительно в этом - веб сервер буферизирует вывод и контроллер не дождавшись ответа выполняет команду. В питоне есть sys.stdout.flush(), попробую с ним поиграться.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Изучаю диммирование с помощью управления ШИМ-портом. С порта P10 ШИМ-сигнал подается на соответствующую ножку микросхемы L298N. В качестве нагрузки подключена лампочка на 12 В. Все диммируется как положено.
Но заметил вот какую странность. После подачи питания на Мегу, когда она (Мега) загружается, в течение, примерно, 5 секунд лампочка загорается, потом (по окончании загрузки Меги) -- гаснет. Прошивка последняя (4.32 beta1). Кстати, на предыдущей прошивке (4.31 beta8) было то же самое.
Покажу настройку ШИМ-порта: Это так и должно быть (такое поведение)?
Сразу скажу, что Мега отсоединена от сети, а все остальные порты переведены в состояние NC.
Но заметил вот какую странность. После подачи питания на Мегу, когда она (Мега) загружается, в течение, примерно, 5 секунд лампочка загорается, потом (по окончании загрузки Меги) -- гаснет. Прошивка последняя (4.32 beta1). Кстати, на предыдущей прошивке (4.31 beta8) было то же самое.
Покажу настройку ШИМ-порта: Это так и должно быть (такое поведение)?
Сразу скажу, что Мега отсоединена от сети, а все остальные порты переведены в состояние NC.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Default 1 и будет наоборот.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Нашел в чем проблема, обошелся пока без flash(). Мега видимо не все заголовки переваривает, возможно есть ограничения по длине?
Когда сервер отвечает Меге вот с таким заголовком:
то она считает что сервер живой и действия в поле Act не выполняет. А вот когда на сервере настроены некоторые элементы безопасности, заголовок дополняется и Мега считает что сервер сдох и выполняет действия в Act, хотя HTTP код приходит тоже 200
Когда сервер отвечает Меге вот с таким заголовком:
Код: Выделить всё
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
Код: Выделить всё
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
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
А вот и не наоборот. Поставил Default =30 (чтобы яркость была небольшой). При старте Меги все равно включается на полную яркость, а через 5 секунд (по окончании загрузки контроллера) переходит на положенные по дефолту 30.
В любом случае нехорошо, когда когда, допустим, весь диммируемый свет в доме будет вспыхивать при старте Меги.
Прошивку обновлял с очисткой EEPROM. Ни в каких входах поле Act не заполнено...
Если это важно, исп.модуль MegaD-14-IN.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Этот эффект проявляется в том случае, когда L298N подключается к порту MegaD-14-IN в режиме "цифрового входа". И связан он с наличием не отключаемой подтяжки. В момент включения контроллера и в течение времени, когда работает загрузчик, порт не сконфигурирован как OUT/PWM и цифровая подтяжка меняет логический уровень на выходе, что и проявляется в виде включения нагрузки.Ruslan писал(а): ↑26 янв 2019, 18:08С порта P10 ШИМ-сигнал подается на соответствующую ножку микросхемы L298N. В качестве нагрузки подключена лампочка на 12 В. Все диммируется как положено. Но заметил вот какую странность. После подачи питания на Мегу, когда она (Мега) загружается, в течение, примерно, 5 секунд лампочка загорается, потом (по окончании загрузки Меги) -- гаснет.
Вот почему в новом MegaD-14-IOR, который пришел на замену MegaD-14-IN, была реализована возможность отключения цифровой подтяжки. Подробнее об этом написано здесь. В разделе "Отличие №4" вы найдете точное описание вашей ситуации.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
А зачем домашнему серверу эти сомнительные "элементы безопасности" в виде заголовков типа "nosniff"? Это как надпись "совершенно секретно", только привлекающая внимание?
Что касается проблемы, то прошивка считает, что размер пакета с ответом сервера, включая заголовки, не должен превышать 220 байт. Все эти заголовки контроллеру не нужны. Чем меньше пакет, тем выше производительность. Ваш пакет получался больше. Увеличил этот лимит на 100 байт. Теперь контроллер должен переваривать ваши массивные заголовки.
https://ab-log.ru/files/File/megad-2561 ... a2-hex.zip
Да, насчет "charset=UTF-8". В пакете не должно быть UTF-8 BOM.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Спасибо, теперь работает и с большим и с маленьким заголовком.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 подниму для Меги отдельный виртуальный сервер, на нем уже весь мусор уберу.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
После обновления версии прошивки 4.29b9 до последней перестал работать датчик BMx280. Не определяется и показания все 0. Откатил версию. Все равно не работает. Сброс настроек делал в обоих случаях. Что может быть?
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Если scan датчик не находит, то скорее всего дело не в прошивке. Нужно проверять соединения, подключения.
Если scan датчик находит и он висит на одной шине с другими I2C-устройствами, то нужно хотя бы один раз настроить порт на работу с BMx280, чтобы контроллер считал и сохранил калибровочные коэффициенты.
Если scan датчик находит и он висит на одной шине с другими I2C-устройствами, то нужно хотя бы один раз настроить порт на работу с BMx280, чтобы контроллер считал и сохранил калибровочные коэффициенты.
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Скан не находит. Соединения не трогались. Проверял соединения после этого несколько раз. Произошло именно после обновления. На шине висит только один датчик.
Поменял порты, заработал. Проблема с портами?
Поменял порты, заработал. Проблема с портами?
Re: Прошивка MegaD-2561 (релизы, обсуждения, предложения)
Я могу рассуждать только рационально. Процесс перепрошивки никак даже теоретически не способен повлиять на работоспособность портов.
Сохраните настройки контроллера, временно полностью очистите EEPROM и настройте прежние порты SCL/SDA вручную. Если это помогает, значит дело только в настройках или в процессе записи сохраненных настроек.
Сохраните настройки контроллера, временно полностью очистите EEPROM и настройте прежние порты SCL/SDA вручную. Если это помогает, значит дело только в настройках или в процессе записи сохраненных настроек.