NEWS
MegaD 328
-
Надо внести ясность.
1. Вход - Это то откуда данные поступают в ioBroker, например кнопка
Выход - Это выход из ioBroker и из меги в сторону лампы/реле
:?: `
Да. -
1. Как выглядит твоя конкретно конфигурация меги? По-портам:
P0 - Dig Input, Mode P&R(Press&Release :?: ) 1, Action: "7:1", Net: "192xxx" ?
P1 - Dig Input
P2 - Dig Input
P3 - Dig Input
P4 - Dig Input
P5 - Dig Input
P6 - Dig Input
P7 - Dig Output,
P8 - Dig Output,
P9 - Dig Output,
P10 - Dig Output,
P11 - Dig Output,
P12 - Dig Output,
P13 - Dig Output,
P14- A6 - Analog Input
P15- A7 - Analog Input `
Именно так сейчас и выглядит.
-
2. Что выдаётся у тебя на "http://192.168.0.14/sec/?cmd=all" :?:
OFF;OFF;OFF;OFF;OFF;OFF;OFF;ON/1;OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;25;67
:?: `
OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;OFF;OFF;OFF;OFF;OFF;OFF;OFF;39;23
Как раз OFF/0 это вход, а просто OFF это выход
У меня конфигурация меги 7I7O, то есть 7 входов (0-6) и 7 выходов (7-13)
Вот так выглядит строка с включенным симистором/реле на седьмом порту
OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;ON;OFF;OFF;OFF;OFF;OFF;OFF;35;22
На конце цыфры (35;22), на этих двух портах у меня сейчас ничего нет, но это и нормально, там напряжение скачет, т.к. нет никаких датчиков. Эти два порта могут быть только ADC.
-
3. Что надо вызвать чтобы появилась страница с настройками для порта? "http://192.168.0.14/sec/?pt=0" ?
А для P14 "http://192.168.0.14/sec/?pt=14" ? `
-
4. Как выглядит HTML source code такой страницы? Для входа, выхода, ADC, DHT, NC ?
Без этого я не смогу написать нормальный симулятор, а без симулятора не смогу написать нормальный драйвер. `
Надеюсь это только для симулятора :), не для парсинга %)
Bluefox, а почему бы не попросить у Андрея данное устройство для написания драйвера, я думаю что он будет согласен!
<u>Вход</u>
[Back](/sec) P0/OFF/0 <form action="/sec/">Type In Act Net Mode <select name="m"><option value="0">P</option><option value="1" selected="">P&R</option><option value="2">R</option></select> Raw </form>
<u>Выход</u>
[Back](/sec) P7/OFF [ON](/sec/?pt=7&cmd=7:1) [OFF](/sec/?pt=7&cmd=7:0) <form action="/sec/">Type Out Default: <select name="d"><option value="0" selected="">0</option><option value="1">1</option></select> </form>
<u>ADC только 14 и 15 порты или А6 А7</u>
[Back](/sec) A6/95 <form action="/sec/">Mode <select name="m"><option value="0" selected="">Norm</option><option value="1">></option><option value="2"><</option><option value="3"><></option></select> Val Act Net </form>
<u>NC</u>
[Back](/sec) P0 <form action="/sec/">Type <select name="pty"><option value="255" selected="">NC</option><option value="0">In</option><option value="1">Out</option><option value="3">DSen</option><option value="2">ADC</option></select> </form>
<u>Dsen</u>
[Back](/sec) P0 temp:0 hum:0 <form action="/sec/">Type <select name="pty"><option value="255">NC</option><option value="0">In</option><option value="1">Out</option><option value="3" selected="">DSen</option><option value="2">ADC</option></select> Sensor: <select name="m"><option value="1" selected="">DHT11</option><option value="2">DHT22</option></select> </form>
-
На все ли я ответил?
-
3. Что надо вызвать чтобы появилась страница с настройками для порта? "http://192.168.0.14/sec/?pt=0" ?
А для P14 "http://192.168.0.14/sec/?pt=14" ? `
http://192.168.0.14/sec/?pt=0
filename="p0.png" index="2">~~http://192.168.0.14/sec/?pt=7
filename="p7.png" index="1">~~http://192.168.0.14/sec/?pt=14
filename="p14.png" index="0">~~ `
Вроде начинает проясняться. Спасибо!> Надеюсь это только для симулятора :), не для парсинга %)
Именно для парсинга. Я хочу считать все "…sec/?pt=Х" и извлечь настройки. А что есть какой то другой путь? -
Если я не ошибаюсь, то есть, т.к. есть скрипт который все настройки экспортирует.
Работа с настройками
При использовании ключа –ee (стирание EEPROM), часто необходимого при обновлении прошивки, из памяти устройства удаляется вся текущая нстройка портов. Это очень неудобно после перепрошивки восстанавливать настройки устройства и портов. Поэтому начиная с версии 1.1 скрипта megad-cfg.php была предусмотрена функция считывания и записи текущих настроек.
Считывание конфигурации устройства и запись в файл megad.cfg
php megad-cfg.php --ip 192.168.0.14 --read-conf megad.cfg -p sec
Считывание конфигурации из файла и запись в устройство
php megad-cfg.php --ip 192.168.0.14 --write-conf megad.cfg -p sec
Сканирование всех устройств типа MegaD-328 в сети
php megad-cfg.php –scan
-
Сканирование (из php файла):
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1); $broadcast_ip = preg_replace("/(\d+)\.(\d+)\.(\d+)\.(\d+)/", "$1.$2.$3.255", $local_ip); # Prepearing sockets if ( !empty($options['local-ip']) ) $local_ip = $options['local-ip']; else { $local_ip = gethostbyname(gethostname()); if ( empty($local_ip) || preg_match("/127\./", $local_ip) ) { if ( preg_match("/^WIN/", PHP_OS) ) $local_ip = get_local_ip_win(); else { $find_ip = get_local_ip(); foreach ( $find_ip as $iface => $iface_ip) { if ( preg_match("/^192\.168/", $find_ip[$iface]) || preg_match("/^10\./", $find_ip[$iface]) ) $local_ip = $find_ip[$iface]; } } } if ( !preg_match("/192\.168\./", $local_ip) && !preg_match("/10\.0\./", $local_ip) && !preg_match("/172\.16\./", $local_ip) ) { echo "Unable to detect local network\nPlase, specify local IP-address with --local-ip\n"; exit; } } # Scanning network for Mega-cool MegaD-devices ;) if ( array_key_exists('scan', $options) || array_key_exists('s', $options) ) { $broadcast_string = chr(0xAA).chr(0).chr(12); socket_sendto($sock, $broadcast_string, strlen($broadcast_string), 0, $broadcast_ip, 52000); usleep(100); do { $pkt = fread($socket, 10); if ( !empty($pkt) && ord($pkt[0]) == 0xAA ) echo ord($pkt[1]).".".ord($pkt[2]).".".ord($pkt[3]).".".ord($pkt[4])."\n"; } while ( $pkt != false ); }
Чтение конфига
if ( array_key_exists('read-conf', $options) ) { echo "Reading configuration... "; $pages = array("cf=1", "cf=2"); //$pages = array(); $page = file_get_contents("http://".$options['ip']."/".$options['p']); $ports = preg_replace("/.*\?pt=(\d+).*/", "$1", $page); for ( $i = 0; $i <= $ports; $i++ ) $pages[] = "pt=$i"; $fh = fopen($options['read-conf'], "w"); $dom = new DOMDocument(); $preset_flag = 0; for ( $i = 0; $i < count($pages); $i++ ) { if ( $preset_flag == 1 ) { //echo "Setting preset 0\n"; $page = file_get_contents("http://".$options['ip']."/".$options['p']."/?cf=1&pr=0"); sleep(1); $preset_flag = 2; } $page = file_get_contents("http://".$options['ip']."/".$options['p']."/?".$pages[$i]); @$dom->loadHTML($page); //$url = "http://".$options['ip']."/".$options['p']."/?"; $url = ""; $els=$dom->getelementsbytagname('input'); foreach($els as $inp) { if ( $inp->getAttribute('type') != "submit" ) { $name=$inp->getAttribute('name'); //$value=urlencode($inp->getAttribute('value')); if ( $inp->getAttribute('type') == "checkbox" ) { if ( $inp->hasAttribute('checked') ) $value=1; else $value=''; } else $value=$inp->getAttribute('value'); if ( $name != "pt" ) { if ( $name == "sl" && empty($value)); else $url .= "$name=$value&"; } } } $select = $dom->getelementsbytagname('select'); foreach($select as $elem) { $name=$elem->getAttribute('name'); $els=$elem->getelementsbytagname('option'); $sel_flag = 0; foreach($els as $inp) { if ( $inp->hasAttribute('selected') ) { //$name=$inp->getAttribute('name'); $value=urlencode($inp->getAttribute('value')); $value=$inp->getAttribute('value'); $url .= "$name=$value&"; $sel_flag = 1; if ( $pages[$i] == "cf=1" && $name == "pr" && !empty($value) ) { $preset_flag = 1; $stored_preset = $value; } } } // Хак ввиду того, что PHP DOM почему-то не может распарсить значение <> поля "Mode" if ( $sel_flag == 0 && $name == "m" ) $url .= "m=3&"; } $url = preg_replace("/&$/", "", $url); fwrite($fh, "$url\n"); } fclose($fh); if ( $preset_flag == 2 ) { //echo "Setting preset 1\n"; $page = file_get_contents("http://".$options['ip']."/".$options['p']."/?cf=1&pr=$stored_preset"); sleep(1); } echo "OK\n"; }
-
Посмотрел чтение конфига, там тот же парсинг идет :lol:
А вот поиск устройств, всего две строки, отправка udp запроса бродкастом на порт 52000
-
Из мануала:
Если порт настроен как вход, то через слеш указывается значение счетчика входа. То есть там может быть не 0, а любая цифра.
-
Спасибо. Вот теперь я знаю, что я буду делать на выходных.
-
Что возвращают?
Как HTML.
-
MegaD-328 by [ab-log.ru](http://ab-log.ru) (fw: 3.30b5) [Config](/sec/?cf=1) -- Ports -- [P0 - IN](/sec/?pt=0) [P1 - IN](/sec/?pt=1) [P2 - IN](/sec/?pt=2) [P3 - IN](/sec/?pt=3) [P4 - IN](/sec/?pt=4) [P5 - IN](/sec/?pt=5) [P6 - IN](/sec/?pt=6) [P7 - OUT](/sec/?pt=7) [P8 - OUT](/sec/?pt=8) [P9 - OUT](/sec/?pt=9) [P10 - OUT](/sec/?pt=10) [P11 - OUT](/sec/?pt=11) [P12 - OUT](/sec/?pt=12) [P13 - OUT](/sec/?pt=13) [A6 - ADC](/sec/?pt=14) [A7 - ADC](/sec/?pt=15)
2. Тоже самое что и первое
3.
[Back](/sec) | [Megad-ID](/sec/?cf=2) <form action="/sec/">IP: Pwd: GW: SRV: Script: Preset: <select name="pr"><option value="0" selected="">Norm</option><option value="1">7I7O</option></select> T check: Alarm T: Cur T: 37 </form>
[Back](/sec) | [Config](/sec/?cf=1) <form action="/sec/">Megad-ID: srv loop: </form>
-
Предложение, если я выставляю режим кнопки "изменение", то соответственно, я буду использовать доп. режимы, это либо долгое нажатие, либо двойное, либо в сумме. Так вот предлагаю эти галочки у этих двух параметров по умолчанию чтобы были выставлены. Возможно такое?
-
Дописал драйвер с твоей помощью. Можешь попробовать?
-
Привет
В новой прошивке Megad есть поддержка датчиков 1wire DS18B20 и DS1990A (считыватели ключей iButton, EM-Marene с поддержкой протокола TM/1-wire). Вместо DHT22 определился DHT11, а вместо 1W тоже определился DHT11.
1W
[Back](/sec) P7 temp:26.81 <form action="/sec/">Type <select name="pty"><option value="255">NC</option><option value="0">In</option><option value="1">Out</option><option value="3" selected="">DSen</option></select> Mode <select name="m"><option value="0">Norm</option><option value="1" selected="">></option><option value="2"><</option><option value="3"><></option></select> Val Act Net Sensor: <select name="d"><option value="1">DHT11</option><option value="2">DHT22</option><option value="3" selected="">1W</option><option value="4">iB</option></select> </form>
DHT22
[Back](/sec) P0 temp:30.30 hum:38.70 <form action="/sec/">Type <select name="pty"><option value="255">NC</option><option value="0">In</option><option value="1">Out</option><option value="3" selected="">DSen</option><option value="2">ADC</option></select> Sensor: <select name="d"><option value="1">DHT11</option><option value="2" selected="">DHT22</option><option value="3">1W</option><option value="4">iB</option></select> </form>
443_screencapture-192-168-1-68-8081-1440449132648.png
443_screencapture-192-168-1-14-sec-1440449943300.png -
В новой версии фирмваре поменялось значение аттрибута m для цифровых датчиков.
Я запрограммировал, как в новой версии. Кстати у неё есть номер, что бы я мог написать, что поддерживается версия от X.Y
Может кто нибудь попробовать новую версию?
cd /opt/iobroker npm install https://github.com/ioBroker/ioBroker.megad/tarball/master
> В новой прошивке Megad есть поддержка датчиков 1wire DS18B20 и DS1990A (считыватели ключей iButton, EM-Marene с поддержкой протокола TM/1-wire). Вместо DHT22 определился DHT11, а вместо 1W тоже определился DHT11.
А всё остальное работает??? -
В настройках параметры считываются шыкарно , но не записываются . А в Vis ни на что не реагирует .
-
Поигрался с новым драйвером и есть вопрос про длинное нажатие. Сейчас это работает как одинарное и двойное нажатие - true и сразу false, хотя я продолжаю держать кнопку.Хотелось бы иметь true после времени задержки, а false по отпусканию кнопки…
2015-09-03 13:54:06.920 - debug: inMem message * megad.0.p11_P11_long val=true, ack=true, ts=1441277647, from=system.adapter.megad.0, lc=1441277647
2015-09-03 13:54:07.126 - debug: inMem message * megad.0.p11_P11_long val=false, ack=true, ts=1441277647, from=system.adapter.megad.0, lc=1441277647