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

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

Модератор: immortal

Аватара пользователя
Sandr
Сообщения: 126
Зарегистрирован: Пн ноя 16, 2015 5:10 pm

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

Сообщение Sandr »

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

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

Сообщение Kod.Begemot »

У меня 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

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

Сообщение Sandr »

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

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

Сообщение Kod.Begemot »

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

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

Сообщение Sandr »

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

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

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

Сообщение Kod.Begemot »

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

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

Сообщение dmw »

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

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

Сообщение Sandr »

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

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

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

<?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`ом подключается нормально, в лог переписка идет
Но от камер пока ничего не пришло - чегото не додумал
Win Home Serv 2011 / Intel Core i3 / 32 GB ram /
Сцена погода (вертикальная)
mySensor скетчи ( 4х канальный димер | Оптимизация скетчей )
Ну и конечно моя маленькая фабрика - 3D печать / фрезеровка / литье
directman66
Сообщения: 2799
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Контактная информация:

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

Сообщение directman66 »

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

Я попробовал чрез php поднять сокет и посмотреть что приходит....
что пишется в лог? Как открыть сокет на прослушивание порта? Где прописать этот код? Интересно так то, сам бы попробовал, но не хватает опыта.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2799
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Контактная информация:

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

Сообщение directman66 »

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

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


?>
[/code][/spoiler]

Telnet`ом подключается нормально, в лог переписка идет
Но от камер пока ничего не пришло - чегото не додумал
подскажите, как запустить сокет параллельно работающему серверу MD?
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Ответить