Страница 19 из 38

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

Добавлено: Пт фев 03, 2017 9:00 pm
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 (туплю вечером не по детски:)

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

Добавлено: Пт фев 03, 2017 9:04 pm
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
?>

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

Добавлено: Пт фев 03, 2017 9:13 pm
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

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

Добавлено: Пт фев 03, 2017 9:30 pm
Kod.Begemot
А шлюз - даёт?

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

Добавлено: Пт фев 03, 2017 10:01 pm
Sandr
Kod.Begemot писал(а):А шлюз - даёт?
Даёт ? :oops:

Шлюз какой?

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

Добавлено: Пт фев 03, 2017 10:16 pm
Kod.Begemot
:lol: Млин, торможу.... шлюз... :D
Конечно не шлюз а ПОРТ! :)
Если порт даёт указать - можно и правда сделать отдельный хост... только надо отследить - кого он вызывает... чтобы под это подстроиться..
Хотя на мой взглад от этого толка не так много - так как эти запросы нужны системе для записи с детектированием движения, если мы их перенаправим - лишимся возможности писать родным софтом. Хотя можно писать и другими средствами - по команде Алисы, к примеру...

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

Добавлено: Сб фев 04, 2017 9:19 am
dmw
Не лишимся, если принять запись, скопривать её для своей обработки, а оригинал послать дальше на свой порт родного софта.

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

Добавлено: Сб фев 04, 2017 2:10 pm
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`ом подключается нормально, в лог переписка идет
Но от камер пока ничего не пришло - чегото не додумал

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

Добавлено: Чт фев 09, 2017 6:45 am
directman66
Sandr писал(а):Порт конечно можно прописать!

Я попробовал чрез php поднять сокет и посмотреть что приходит....
что пишется в лог? Как открыть сокет на прослушивание порта? Где прописать этот код? Интересно так то, сам бы попробовал, но не хватает опыта.

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

Добавлено: Пн фев 20, 2017 1:03 pm
directman66
Sandr писал(а):Порт конечно можно прописать!

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


?>
[/code][/spoiler]

Telnet`ом подключается нормально, в лог переписка идет
Но от камер пока ничего не пришло - чегото не додумал
подскажите, как запустить сокет параллельно работающему серверу MD?