Wi-Fi камера Digoo DG-M1Z

  • Цена: US$29.99 (покупал за US$16.66 + доставка US$1.30)

Всем привет,
искал камеру для установки дома в прихожей, условий к камере было 3: обязательно с Wifi, возможность получать сработки в моё приложение (тут я немного лопухнулся) и подешевле. Некоторое время мониторил сайты: tomtop.com, aliexpress.com, banggood.com. На последнем выловил по акции за $16.66 камеру Digoo DG-M1Z.

Немного о доставке
Любителям проверки на п. 18

Заказ в личном кабинете:

Подробнее о заказе:

Трек на сайте почты:

Характеристики
Brand DIGOO
Model DG-M1Z Smart Home 1080P SHARK
Image Sensor 1/2.7 Progressive CMOS Sensor
Lens 2.8mm 130° Wide Angle Lens
5.0MP Lens More Clear Vision
RAM 1GB
Day/Night IR-CUT Auto Switch Filter
Digital Noise Reduction 3D Digital Noise Reduction

Image
Image FHD 1080P
2.0MP Image Sensor
Frame Rate 25fps± internet adaptively adjustment
Pictures Zoom 4X Digital Zoom
Compression
Video Compression H.264 HD Video Quality & Mass Storage
Audio Compression G.711
Bit Rate 16Kbps-2Mbps
Dual Stream Yes (Local Storage and Remote Network Transmission)

Camera Feature
Memory Support Micro TF Card Slot (Max to 64GB)
Local Storage
Onvif Support Onvif, Auto turn on the Onvif port
Fast Connect Wireless: Acoustic smart link configuration
(WIFI Fast Configuration)
Wired: Network cable plug and connect
Choose the best one depending on your situation.
Alarm Function Motion Detection
One Button Guard/Dis-Guard
Build in E-mail alert etc.
Support System IOS, Android, Windows PC, etc

General
IR Light 11Pcs IR LED
IR Distance Night Visibility 10m+
Operation Temperature -10°C~+60°C RH95% Max
Power Supply DC 5V/2A+ (Make sure to use the real quality adapter, reach enough 2A current output)
Power Consumer 3W-5W
Color Black, White
APP Search «Digoo Eye », Installatlion and use are 100%

Комплект поставки
Внешняя упаковка пришла помятая, местами порванная и явно тяжело переживала особенности работы почты. Спасибо китайцам за дополнительный кусок поролона вокруг коробки.

В комплектации ничего особеного:
1. камера
2. usb кабель
3. инструкция на английком
4. крепление
5. коробка

больше фотографий




Подключение и коммуникации
Подключение камеры замечательно описано в обзоре камеры Digoo DG-M1Q. Они совершенно ничем не отличаются.

С интересного: приложение DigooEye с маркета после установки называется Yoosee, если не полениться, можно найти отдельное приложение Yoosee. Они оба работают с одним сервером, у Вас будет 1 учетка на 2 приложения. После сравнения, за пару дней, могу выделить:

DigooEye — более качественный звук при обратной связи, скриншот с видео потока не работает.

Yoosee — менее китайский перевод настроек, нормальная запись видео и фотографий.

Сканирование на открытые порты не принесло хороших результатов:

  PORT     STATE SERVICE VERSION  554/tcp  open  rtsp?  |_rtsp-methods: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER,USER_CMD_SET  5000/tcp open  soap    gSOAP 2.8  | http-methods:   |_  Supported Methods: HEAD OPTIONS  |_http-server-header: gSOAP/2.8  

Порт 554 — RTSP работающий в Non-Interleaved Mode, внешнее устройство устанавливает связь и передает на камеру информацию, о том «куда слать» данные (UDP порты — более подробно можно ознакомится тут). Для доступа с мира необходимо или пробрасывать кучу портов на камеру, или использовать видео регистратор в пределах одной сети с ней, или использовать только официальные приложения.

Доступные ссылки:

rtsp://admin: ваш_пароль@ip_адрес_камеры/onvif1 — разрешение видео 1920х1072

rtsp://admin: ваш_пароль@ip_адрес_камеры/onvif2 — разрешение видео 320х180

Порт 5000 — протокол ONVIF, он и отвечает за возможность изменения настроек и поворота камеры (механизм PTZ). Китайцы очень творчески подходят к реализации данного протокола на своих устройствах. У каждого своя версия… Приложения, разработанные для работы с этим протоколом (побывал ONVIF Device Manager), кроме авторизации ничем не помогли.

Недокументируемые особенности
Все сработки по движению сохраняются на флешку (не входит в комплект поставки), вставленную в камеру, с разширением 640х360 и могут отправляться на емейл.

SMTP сервера без авторизации не поддерживаются. В самом приложении при настройке обязательное поле пароль. Для теста настраивал свой ящик на Gmail.com. Работало без претензий. Присылает 2 первых фотографии (зачем две?! — я теряюсь в догадках). Есть предположение, что второй файл — видео… должен быть… но не получилось у производителя.

Настройку Wifi можно производить созданием файла WifiInfo.txt в корне флешки.

немного извращения
По работе я далек от программирования, но некоторые вещи хочется делать…
Например, трансляцию через веб-интерфейс делал так:

  <?php    if (isset($_REQUEST["get"]) and $_REQUEST["get"]==true){      Header('Accept-Ranges:bytes');      Header('Connection:keep-alive');      Header('Content-type: multipart/x-mixed-replace;boundary=ffserver');      passthru('ffmpeg -rtsp_transport udp -i "rtsp://admin:4jjbg745@192.168.200.3:554/onvif2" -s 320x240 -f mpjpeg pipe:');    }     <html>    <head>      <title>RTSP to MJPEG</title>    </head>    <body>        <img src="rtsp.php?get=1"  width="640" height="480" />    </body>  </html>  

Можно собрать свой SMTP сервер и перехватывать сработки, для примера, чтобы потом их отправлять в телеграмм:

Код на php, который поднимает 4 linux daemon (минимум надо 2 — но я хочу 4 и все тут) для прослушивания SMTP порта, складывает фотографии в папку и добавляет запись в базу данных:

  <?php  set_time_limit(0);   ini_set('display_errors', 5);        declare(ticks = 1);        // Функция, перехватывающая сигналы      function sig_handler($signo) {          global $sock, $msgsock;  		socket_close($msgsock);  		socket_close($sock);  		die('Daemon dead');      }        // Регистрируемые сигналы      pcntl_signal(SIGTERM, "sig_handler");        // Форкаем процесс      $pid = pcntl_fork();      if ($pid == -1) {   		die('Could not fork '.PHP_EOL);  	} else  		if ($pid) {  				die('Die parent process.');  		} else {  				// Новый процесс, запускаем главный цикл  				posix_setsid(); // Отцепляемся от терминала    				$address = '192.168.0.45'; // сетевой интерфейс, который слушаем  				$port = 10000; // порт на нем  				$folder = 'video/'; //куда хранить  				$data = false;   				$br="rn";  				$img = false;  				  				if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {  					die('Не удалось выполнить socket_create(): причина: '.socket_strerror(socket_last_error()));  				}    				if (socket_bind($sock, $address, $port) === false) {  					die('Не удалось выполнить socket_bind(): причина: '.socket_strerror(socket_last_error($sock)));  				}  				  				socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1); // указываем таймаут    				if (socket_listen($sock, 4) === false) {  					die('Не удалось выполнить socket_listen(): причина: '.socket_strerror(socket_last_error($sock)));  				}    				socket_set_nonblock($sock); // запрещаем блокировку сокита    				$pid = pcntl_fork();  				if ($pid == -1) { die('Не удалось сделать многозадачным'); }    				if ($pid == 0) { echo 'I been live '.PHP_EOL.$br; }    				$pid = pcntl_fork();  				if ($pid == -1) { die('Не удалось сделать многозадачным'); }     				if ($pid == 0) { echo 'I been live '.PHP_EOL.$br; }    				do {  					sleep(1);  					if (($msgsock = socket_accept($sock)) === false) {  						  						/* В многопоточности постоянно такая лажа */  					} else {  						/* Отправляем инструкции. */  						$msg = '220 ESMTP ready'.$br;  						socket_write($msgsock, $msg, strlen($msg));    						do {  							if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {  								echo 'Не удалось выполнить socket_read(): причина: '.socket_strerror(socket_last_error($msgsock)).$br;  								break;  							}  							if (!$buf = trim($buf)) {  								continue;  							}  							  							if ($data>0 and $buf!='.') {  								  								switch ($img) {  									case 0:  										$kay=explode('; ', $buf);  										if ($kay[0]=='Content-Disposition: attachment') $img=1;  										break;  									case 1:  										$img_buf=$buf;  										$img=3;  										break;  									case 2:  										break;  									case 3:  										$kay=explode('------=====', $buf);  										if ($kay[0]=='--') {  											$img_buf=base64_decode($img_buf);  											file_put_contents($folder.$addr.'/'.$data.'.jpg', $img_buf);  											  											try {  												$db=new mysqli('localhost','логин_бд','пароль_бд','название_бд');  												$db->query('SET NAMES utf8');  												$db->query("insert into mod_motion (camera, filename, file_type, time_stamp, pub) values(2, '/mnt/motion/$addr/$data.jpg', 1, '".date('Y-m-d H:i:s')."', 0);");  												$db->close();  											} catch (Exception $e) {  												echo 'Error send mysql: '.$e->getMessage().$br;  											}  											  											$img_buf='';  											$img=2;  										} else {  											$img_buf.=$buf;  										}  										break;  								}  								  							} else {  								$kay=explode(' ', $buf);  								switch ($kay[0]) {    									case 'HELO':  										$talkback = '250 Daemon-SMTP stub';  										break;  									case 'EHLO':  										$addr = '';  										socket_getpeername($msgsock, $addr);  										$talkback = '250-tariffs.com.ua Hello '.$addr."rn".'250 AUTH LOGIN PLAIN'; // ['.$_SERVER['REMOTE_ADDR']."]  										//echo $br.$talkback.$br;  										break;  									case 'AUTH':  										if ($kay[1]=='LOGIN') $talkback = '334 VXNlcm5hbWU6'; //.base64_encode("Username:");  										if ($kay[1]=='PLAIN') $talkback = '235 2.7.0 Authentication successful';  										break;  									case 'emFiYml4QGkudWE=': // > zabbix@i.ua  										$talkback = '334 UGFzc3dvcmQ6'; //.base64_encode("Password:");  										break;  									case 'dGVzdA==': // > test  										$talkback = '235 2.0.0 Authentication successful';   										//235 2.7.0 Authentication successful  										//235 OK Authenticated  										break;  									case 'MAIL':  										if ($kay[1][0]=='F') $talkback = '250 OK'; //250 OK  										if ($kay[1][0]=='T') $talkback = '250 Accepted'; //250 Accepted  										break;  									case 'RCPT':  										$talkback = '250 OK';  										break;  									case 'DATA':  										$talkback = '354 Enter message, ending with "." on a line by itself';  										$data=time();  										break;  									case '.':  										$talkback = '250 OK id='.time();  										$data=false;  										$img=false;  										break;  									case 'QUIT':  										$talkback = '221 2.0.0 Bye'; //221 closing connection  										socket_write($msgsock, $talkback.$br, strlen($talkback.$br));  										break 2;  									default:  										$talkback = '500 unrecognized command'; // 502 5.5.2 Error: command not recognized  								}  								socket_write($msgsock, $talkback.$br, strlen($talkback.$br));  							}  							//echo "C:$bufrnS:".$talkback.$br;  						} while (true);  						socket_close($msgsock);  					}  				} while (true);  				socket_close($sock);  			}  	unset($sock);  

П.С. если кому-то действительно понадобиться, обращайтесь расскажу подробнее.

Видео по движению
Пишется очень странно: то есть… то нет… Закономерность и логика отсутствует.

Фотографии:
день

вечер

ночь

Заключение
В целом я доволен покупкой, надеюсь выйдет новая прошивка (на момент обзора стоит 22.0.0.21), в которой исправят указанные недостатки. За 4 дня камера не зависала и вела себя крайне стабильно. На мобильном 3G проблем с просмотром видео нет.

Полезные ссылки:
Товар на сайте производителя

(c) 2017 Источник материала

Пролистать наверх