Подключение IP-камер

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm
Благодарил (а): 32 раза
Поблагодарили: 42 раза

Re: Подключение IP-камер

Сообщение Kod.Begemot » Пт фев 03, 2017 8:45 pm

Сам думаю над этим.. спасибо за идею насчет сервера... Прописал в своей Beward как сервер - "10.10.0.222/megad2.php", в megad2.php включил debug, теперь в x-ray вижу "13:13:36 0.14472900 megad: /megad2.php?Alarm159 (10.10.0.62)"... Дело за малым, а так - работает!
С камеры меньше всего ложных срабатываний, по сравнению с PIR датчиком так точно..
Аватара пользователя
Sandr
Сообщения: 126
Зарегистрирован: Пн ноя 16, 2015 5:10 pm
Благодарил (а): 19 раз
Поблагодарили: 29 раз

Re: Подключение IP-камер

Сообщение Sandr » Пт фев 03, 2017 9:00 pm

Kod.Begemot писал(а):Сам думаю над этим.. спасибо за идею насчет сервера... Прописал в своей Beward как сервер - "10.10.0.222/megad2.php", в megad2.php включил debug, теперь в x-ray вижу "13:13:36 0.14472900 megad: /megad2.php?Alarm159 (10.10.0.62)"... Дело за малым, а так - работает!
С камеры меньше всего ложных срабатываний, по сравнению с PIR датчиком так точно..
Выложи свой megad2.php (туплю вечером не по детски:)
Win Home Serv 2011 / Intel Core i3 / 32 GB ram /
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm
Благодарил (а): 32 раза
Поблагодарили: 42 раза

Re: Подключение IP-камер

Сообщение Kod.Begemot » Пт фев 03, 2017 9:04 pm

У меня megad.php от класса (авторства Bagir), не от модуля. Я от модуля отказался так как он не гибок - не позволяет реализовать многие плюшки, вроде реакции на старт меги, обработки множественных нажатий и т.п..
Но - выкладываю:

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

<?
/*
* Автор Казаков Сергей
* на форуме под ником Bagir
* благодарность dimitrystd на примеры
* ver 3.0
*/

 include_once("./config.php");
 include_once("./lib/loader.php");
 $session=new session("prj");
 $db=new mysql(DB_HOST, '', DB_USER, DB_PASSWORD, DB_NAME); // connecting to database
 include_once("./load_settings.php");
 if (!headers_sent()) {
  header ("HTTP/1.0: 200 OK\n");
  header ('Content-Type: text/html; charset=utf-8');
 }

 $reclog = 0; // Писать логи отладки ( 0-нет, 1-только крит, 2-все )

 // Открыть лог если нужно
 if ($reclog) { $log = getLogger(__FILE__); }

 // Собрать все переданные параметры в строку для отправки в лог
 if ($reclog == 2 ) {
      $str = "";
      foreach ($params as $key=>$value) {
           if ($str != "") {$str.=", ";}
           $str .= $key."=".$value;
      }
      $log->trace('Got message from MegaDevice '.$str);
      $str = ""; //свободна
 }
DebMes("megad: ".$_SERVER['REQUEST_URI']. " (".$_SERVER['REMOTE_ADDR'].")");
 $objects = getObjectsByClass('MegaD'); 
 $megaD = null;
 
 // В начале ищем объект Меги по mdid
 if (isset($params['mdid'])) {
      foreach ($objects as $obj) {
           if (trim(getGlobal($obj['TITLE'].'.mdid')) == $params['mdid']) {
                $megaD = $obj;
                break;
           }
      }
 } else {
      if ($reclog) { $log->error('MegaDevice has not transmitted mdid. Try to search on IP'); }
 }
 
 // Если не нашли по mdid, ищем по IP
 if (!isset($megaD)) {
      // Получить IP адрес MegaD
      $ip = $_SERVER['REMOTE_ADDR'];
      if (isset($ip)) {
           foreach ($objects as $obj) {
                if (trim(getGlobal($obj['TITLE'].'.ipAddress')) == $ip) {
                     $megaD = $obj;
                     break;
                }
           }
      } else {
           if ($reclog) { $log->error('Cannot determinate remote IP address of megadevice!'); }
      }
 }

 // Запуск метода incomingMessage с передачей ему параметров,
 // или сообщение "Объект с нужным ID или IP не найден в классе MegaD" при неудаче.
 if (isset($megaD)) {
      callMethod($megaD['TITLE'].'.incomingMessage', $params);
 } else { 
      if ($reclog) { $log->error('Cannot find object of MegaD class with mdid = '. $params['mdid'].' or ip = '.$ip ); }
 }


 $session->save();
 $db->Disconnect(); // closing database connection
?>
Аватара пользователя
Sandr
Сообщения: 126
Зарегистрирован: Пн ноя 16, 2015 5:10 pm
Благодарил (а): 19 раз
Поблагодарили: 29 раз

Re: Подключение IP-камер

Сообщение Sandr » Пт фев 03, 2017 9:13 pm

Kod.Begemot писал(а):Сам думаю над этим.. спасибо за идею насчет сервера... Прописал в своей Beward как сервер - "10.10.0.222/megad2.php", в megad2.php включил debug, теперь в x-ray вижу "13:13:36 0.14472900 megad: /megad2.php?Alarm159 (10.10.0.62)"... Дело за малым, а так - работает!
С камеры меньше всего ложных срабатываний, по сравнению с PIR датчиком так точно..
Действительно туплю :)

Мои ipCam не позволяют прописывать в адресе сервера чтото кроме IP
Win Home Serv 2011 / Intel Core i3 / 32 GB ram /
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm
Благодарил (а): 32 раза
Поблагодарили: 42 раза

Re: Подключение IP-камер

Сообщение Kod.Begemot » Пт фев 03, 2017 9:30 pm

А шлюз - даёт?
Аватара пользователя
Sandr
Сообщения: 126
Зарегистрирован: Пн ноя 16, 2015 5:10 pm
Благодарил (а): 19 раз
Поблагодарили: 29 раз

Re: Подключение IP-камер

Сообщение Sandr » Пт фев 03, 2017 10:01 pm

Kod.Begemot писал(а):А шлюз - даёт?
Даёт ? :oops:

Шлюз какой?
Win Home Serv 2011 / Intel Core i3 / 32 GB ram /
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm
Благодарил (а): 32 раза
Поблагодарили: 42 раза

Re: Подключение IP-камер

Сообщение Kod.Begemot » Пт фев 03, 2017 10:16 pm

:lol: Млин, торможу.... шлюз... :D
Конечно не шлюз а ПОРТ! :)
Если порт даёт указать - можно и правда сделать отдельный хост... только надо отследить - кого он вызывает... чтобы под это подстроиться..
Хотя на мой взглад от этого толка не так много - так как эти запросы нужны системе для записи с детектированием движения, если мы их перенаправим - лишимся возможности писать родным софтом. Хотя можно писать и другими средствами - по команде Алисы, к примеру...
dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am
Благодарил (а): 41 раз
Поблагодарили: 81 раз

Re: Подключение IP-камер

Сообщение dmw » Сб фев 04, 2017 9:19 am

Не лишимся, если принять запись, скопривать её для своей обработки, а оригинал послать дальше на свой порт родного софта.
Аватара пользователя
Sandr
Сообщения: 126
Зарегистрирован: Пн ноя 16, 2015 5:10 pm
Благодарил (а): 19 раз
Поблагодарили: 29 раз

Re: Подключение IP-камер

Сообщение Sandr » Сб фев 04, 2017 2:10 pm

Порт конечно можно прописать!

Я попробовал чрез php поднять сокет и посмотреть что приходит....
onvif.phpПоказать

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

<?php 
error_reporting(E_ALL);

$port_file = "onvif_log.log";

/* Позволяет скрипту ожидать соединения бесконечно. */
set_time_limit(0);

/* Включает скрытое очищение вывода так, что мы получаем данные
 * как только они появляются. */
ob_implicit_flush();

$address = '192.168.1.155';
$port = 8085;
$fp = fopen($port_file, 'w'); 

if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
    $msg = "Не удалось выполнить socket_create(): причина: " . socket_strerror(socket_last_error()) . "\n";
    fwrite($fp, $msg); 
    exit;    
}

if (socket_bind($sock, $address, $port) === false) {
    $msg = "Не удалось выполнить socket_bind(): причина: " . socket_strerror(socket_last_error($sock)) . "\n";
    fwrite($fp, $msg); 
    exit;    
}

if (socket_listen($sock, 5) === false) {
    $msg = "Не удалось выполнить socket_listen(): причина: " . socket_strerror(socket_last_error($sock)) . "\n";
    fwrite($fp, $msg); 
    exit;    
}

    $msg = "Принимаем соединение.\n";
    fwrite($fp, $msg); 

do {
    if (($msgsock = socket_accept($sock)) === false) {
        $msg = "Не удалось выполнить socket_accept(): причина: " . socket_strerror(socket_last_error($sock)) . "\n";
        fwrite($fp, $msg); 
        break;
    }
    $size=socket_recvfrom($socket,$input,65535,0,$ipaddress,$port);
    $msg "Received [$input] ($size bytes) from IP $ipaddress Port $port\n";   //socket_getpeername($sock, $raddr, $rport); 
    //$msg = "Подключение от $raddr:$rport\n"; 
    fwrite($fp, $msg); 

    do {
        if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
            $msg = "Не удалось выполнить socket_read(): причина: " . socket_strerror(socket_last_error($msgsock)) . "\n";
            fwrite($fp, $msg); 
            break 2;
        }
        if (!$buf = trim($buf)) {
            continue;
        }
        if ($buf == 'выход') {
            break;
        }
        if ($buf == 'выключение') {
            socket_close($msgsock);
            break 2;
        }
        $msg = "PHP: прислано '$buf'.\n";
        $msg .= "$buf\n";
        fwrite($fp, $msg); 
    } while (true);
    socket_close($msgsock);
} while (true);

socket_close($sock);
fclose($fp); 
?>
Telnet`ом подключается нормально, в лог переписка идет
Но от камер пока ничего не пришло - чегото не додумал
За это сообщение автора Sandr поблагодарил:
directman66 (Пн фев 20, 2017 1:02 pm)
Рейтинг: 1.16%
Win Home Serv 2011 / Intel Core i3 / 32 GB ram /
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
directman66
Сообщения: 2800
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 695 раз
Контактная информация:

Re: Подключение IP-камер

Сообщение directman66 » Чт фев 09, 2017 6:45 am

Sandr писал(а):Порт конечно можно прописать!

Я попробовал чрез php поднять сокет и посмотреть что приходит....
что пишется в лог? Как открыть сокет на прослушивание порта? Где прописать этот код? Интересно так то, сам бы попробовал, но не хватает опыта.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Ответить