Прослушивание TCP/IP

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

Модератор: immortal

Аватара пользователя
Lerych
Сообщения: 191
Зарегистрирован: Чт дек 14, 2017 8:46 pm
Откуда: Московская область, Серпухов
Благодарил (а): 79 раз
Поблагодарили: 24 раза

Прослушивание TCP/IP

Сообщение Lerych » Пн ноя 26, 2018 1:26 pm

Господа нужна Ваша поддержка (знания)!
Есть промышленный контроллер (PLC-8830), который по TCP/IP может отдавать данные о замкнутых (разомкнутых) "сухих" контактах.
i8830.png
i8830.png (69.27 КБ) 4101 просмотр
Сейчас на этом PLC есть ПО, которое по замыканию/размыканию контакта выдает в TCP/IP сообщение о номере контакта (их там 128) и его состоянии (0/1).
Хочу прикрутить его к МД. Есть ли какой-нибудь Модуль, чтобы это сделать или подскажите в какую сторону "копать".
МД стоит на ББ под Linux с установленным mosquitto, наверное, можно как-то от имени PLC публиковать данные, но нужна "прослойка" PLC-МД.
Или модуль для прослушки TPC/IP и "привызки" приходящих от PLC сообщений к значениям свойств Объекта.
Какие мысли? Спасибо!
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Прослушивание TCP/IP

Сообщение skysilver » Пн ноя 26, 2018 1:47 pm

MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
Lerych
Сообщения: 191
Зарегистрирован: Чт дек 14, 2017 8:46 pm
Откуда: Московская область, Серпухов
Благодарил (а): 79 раз
Поблагодарили: 24 раза

Re: Прослушивание TCP/IP

Сообщение Lerych » Пн ноя 26, 2018 1:50 pm

skysilver писал(а):
Пн ноя 26, 2018 1:47 pm
Вот этот попробуй http://majordomo.smartliving.ru/forum/v ... f=5&t=2973
Я читал. Смысл понятен, но надо наоборот не выдавать команды, а получать формализованные сообщения.
Аватара пользователя
Lerych
Сообщения: 191
Зарегистрирован: Чт дек 14, 2017 8:46 pm
Откуда: Московская область, Серпухов
Благодарил (а): 79 раз
Поблагодарили: 24 раза

Re: Прослушивание TCP/IP

Сообщение Lerych » Пн ноя 26, 2018 6:04 pm

skysilver писал(а):
Пн ноя 26, 2018 1:47 pm
Вот этот попробуй http://majordomo.smartliving.ru/forum/v ... f=5&t=2973
Автор данного модуля канул в лету: Последнее посещение:30 июл 2016, 15:14
Кто готов помочь? Не безвозмездно
Аватара пользователя
Lerych
Сообщения: 191
Зарегистрирован: Чт дек 14, 2017 8:46 pm
Откуда: Московская область, Серпухов
Благодарил (а): 79 раз
Поблагодарили: 24 раза

Re: Прослушивание TCP/IP

Сообщение Lerych » Пн ноя 26, 2018 9:00 pm

Установил модуль TC/IP, выдает ошибку в Панеле управления:
Warning: Declaration of TCP_socket::dbInstall() should be compatible with module::dbInstall($data) in /var/www/html/modules/TCP_socket/TCP_socket.class.php on line 0
Копаю дальше.
Аватара пользователя
Lerych
Сообщения: 191
Зарегистрирован: Чт дек 14, 2017 8:46 pm
Откуда: Московская область, Серпухов
Благодарил (а): 79 раз
Поблагодарили: 24 раза

Re: Прослушивание TCP/IP

Сообщение Lerych » Пн ноя 26, 2018 9:16 pm

Ругается на этот файл
СпойлерПоказать

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

<?php
/**
* TCP socket 
* @package project
* @author Wizard <sergejey@gmail.com>
* @copyright http://majordomo.smartliving.ru/ (c)
* @version 0.1 (wizard, 09:04:13 [Apr 30, 2016])
*/
//
//
class TCP_socket extends module {
/**
* TCP_socket
*
* Module class constructor
*
* @access private
*/
function TCP_socket() {
  $this->name="TCP_socket";
  $this->title="TCP socket";
  $this->module_category="<#LANG_SECTION_DEVICES#>";
  $this->checkInstalled();
}
/**
* saveParams
*
* Saving module parameters
*
* @access public
*/
function saveParams($data=0) {
 $p=array();
 if (IsSet($this->id)) {
  $p["id"]=$this->id;
 }
 if (IsSet($this->view_mode)) {
  $p["view_mode"]=$this->view_mode;
 }
 if (IsSet($this->edit_mode)) {
  $p["edit_mode"]=$this->edit_mode;
 }
 if (IsSet($this->data_source)) {
  $p["data_source"]=$this->data_source;
 }
 if (IsSet($this->tab)) {
  $p["tab"]=$this->tab;
 }
 return parent::saveParams($p);
}
/**
* getParams
*
* Getting module parameters from query string
*
* @access public
*/
function getParams() {
  global $id;
  global $mode;
  global $view_mode;
  global $edit_mode;
  global $data_source;
  global $tab;
  if (isset($id)) {
   $this->id=$id;
  }
  if (isset($mode)) {
   $this->mode=$mode;
  }
  if (isset($view_mode)) {
   $this->view_mode=$view_mode;
  }
  if (isset($edit_mode)) {
   $this->edit_mode=$edit_mode;
  }
  if (isset($data_source)) {
   $this->data_source=$data_source;
  }
  if (isset($tab)) {
   $this->tab=$tab;
  }
}
/**
* Run
*
* Description
*
* @access public
*/
function run() {
 global $session;
  $out=array();
  if ($this->action=='admin') {
   $this->admin($out);
  } else {
   $this->usual($out);
  }
  if (IsSet($this->owner->action)) {
   $out['PARENT_ACTION']=$this->owner->action;
  }
  if (IsSet($this->owner->name)) {
   $out['PARENT_NAME']=$this->owner->name;
  }
  $out['VIEW_MODE']=$this->view_mode;
  $out['EDIT_MODE']=$this->edit_mode;
  $out['MODE']=$this->mode;
  $out['ACTION']=$this->action;
  $out['DATA_SOURCE']=$this->data_source;
  $out['TAB']=$this->tab;
  $this->data=$out;
  $p=new parser(DIR_TEMPLATES.$this->name."/".$this->name.".html", $this->data, $this);
  $this->result=$p->result;
}
/**
* BackEnd
*
* Module backend
*
* @access public
*/
function admin(&$out) {
 if (isset($this->data_source) && !$_GET['data_source'] && !$_POST['data_source']) {
  $out['SET_DATASOURCE']=1;
 }
 if ($this->data_source=='Sockets' || $this->data_source=='') {
  if ($this->view_mode=='' || $this->view_mode=='search_Sockets') {
   $this->search_Sockets($out);
  }
  if ($this->view_mode=='edit_Sockets') {
   $this->edit_Sockets($out, $this->id);
  }
  if ($this->view_mode=='delete_Sockets') {
   $this->delete_Sockets($this->id);
   $this->redirect("?data_source=Sockets");
  }
 }
 if (isset($this->data_source) && !$_GET['data_source'] && !$_POST['data_source']) {
  $out['SET_DATASOURCE']=1;
 }
 if ($this->data_source=='Channels') {
  if ($this->view_mode=='' || $this->view_mode=='search_Channels') {
   $this->search_Channels($out);
  }
  if ($this->view_mode=='edit_Channels') {
   $this->edit_Channels($out, $this->id);
  }
 }
}
/**
* FrontEnd
*
* Module frontend
*
* @access public
*/
function usual(&$out) {
 $this->admin($out);
}
/**
* Sockets search
*
* @access public
*/
 function search_Sockets(&$out) {
  require(DIR_MODULES.$this->name.'/Sockets_search.inc.php');
 }
/**
* Sockets edit/add
*
* @access public
*/
 function edit_Sockets(&$out, $id) {
  require(DIR_MODULES.$this->name.'/Sockets_edit.inc.php');
 }
/**
* Sockets delete record
*
* @access public
*/
 function delete_Sockets($id) {
  $rec=SQLSelectOne("SELECT * FROM Sockets WHERE ID='$id'");
  // some action for related tables
  SQLExec("DELETE FROM Sockets WHERE ID='".$rec['ID']."'");
 }
/**
* Channels search
*
* @access public
*/
 function search_Channels(&$out) {
  require(DIR_MODULES.$this->name.'/Channels_search.inc.php');
 }
/**
* Channels edit/add
*
* @access public
*/
 function edit_Channels(&$out, $id) {
  require(DIR_MODULES.$this->name.'/Channels_edit.inc.php');
 }
 function propertySetHandle($object, $property, $value) {
   $table='Channels';
   $properties=SQLSelect("SELECT ID FROM $table WHERE LINKED_OBJECT LIKE '".DBSafe($object)."' AND LINKED_PROPERTY LIKE '".DBSafe($property)."'");
   $total=count($properties);
   if ($total) {
    for($i=0;$i<$total;$i++) {
     //to-do
    }
   }
 }
    
 function processCycle() {
 }
/**
* Install
*
* Module installation routine
*
* @access private
*/
 function install($data='') {
  parent::install();
 }
/**
* Uninstall
*
* Module uninstall routine
*
* @access public
*/
 function uninstall() {
  SQLExec('DROP TABLE IF EXISTS Sockets');
  SQLExec('DROP TABLE IF EXISTS Channels');
  parent::uninstall();
 }
/**
* dbInstall
*
* Database installation routine
*
* @access private
*/
 function dbInstall() {
/*
Sockets - 
Channels - 
*/
  $data = <<<EOD
 Sockets: ID int(10) unsigned NOT NULL auto_increment
 Sockets: TITLE varchar(100) NOT NULL DEFAULT ''
 Sockets: IP varchar(255) NOT NULL DEFAULT ''
 Sockets: PORT varchar(255) NOT NULL DEFAULT ''
 Sockets: STATUS int(3) NOT NULL DEFAULT '0'
 Channels: ID int(10) unsigned NOT NULL auto_increment
 Channels: TITLE varchar(100) NOT NULL DEFAULT ''
 Channels: VALUE varchar(255) NOT NULL DEFAULT ''
 Channels: STATUS int(3) NOT NULL DEFAULT '0'
 Channels: DEVICE_ID int(10) NOT NULL DEFAULT '0'
 Channels: LINKED_OBJECT varchar(100) NOT NULL DEFAULT ''
 Channels: LINKED_PROPERTY varchar(100) NOT NULL DEFAULT ''
 Channels: LINKED_METHOD varchar(100) NOT NULL DEFAULT ''
EOD;
  parent::dbInstall($data);
 }
// --------------------------------------------------------------------
}
/*
*
* TW9kdWxlIGNyZWF0ZWQgQXByIDMwLCAyMDE2IHVzaW5nIFNlcmdlIEouIHdpemFyZCAoQWN0aXZlVW5pdCBJbmMgd3d3LmFjdGl2ZXVuaXQuY29tKQ==
*
*/
Чего в нём не так?
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Прослушивание TCP/IP

Сообщение serghei » Пн ноя 26, 2018 9:23 pm

А случайно UDP пакеты этот контроллер не передает ? А то ESP32 умеет их ловить из сети. Так я перехватываю пакеты от сети MySensors.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Аватара пользователя
Lerych
Сообщения: 191
Зарегистрирован: Чт дек 14, 2017 8:46 pm
Откуда: Московская область, Серпухов
Благодарил (а): 79 раз
Поблагодарили: 24 раза

Re: Прослушивание TCP/IP

Сообщение Lerych » Пн ноя 26, 2018 9:30 pm

Пока создал в модуле запись
Вроде как встал на прослушку
Создал, что слушать
Я правильно понимаю, что для каждого моего объекта надо две записи заводить, т.е. одна на ВКЛ, другая на ВЫКЛ?
Т.е. в моём примере, если сервер/клиент пришлет запись CN0_TRUE, то в свойство status объекта mdp1_1q1 попадет 1 (единица), а если сервер пришлет CN0_FALSE, то в свойства попадет - 0.
Поправьте, если это не так.
Вложения
00007.png
00007.png (44.02 КБ) 4054 просмотра
00006.png
00006.png (22.08 КБ) 4054 просмотра
Последний раз редактировалось Lerych Пн ноя 26, 2018 9:36 pm, всего редактировалось 2 раза.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Прослушивание TCP/IP

Сообщение skysilver » Пн ноя 26, 2018 9:30 pm

Lerych писал(а):
Пн ноя 26, 2018 6:04 pm
Кто готов помочь? Не безвозмездно
Что конкретно требуется?
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Прослушивание TCP/IP

Сообщение skysilver » Пн ноя 26, 2018 9:32 pm

Lerych писал(а):
Пн ноя 26, 2018 9:00 pm
Warning: Declaration of TCP_socket::dbInstall() should be compatible with module::dbInstall($data) in /var/www/html/modules/TCP_socket/TCP_socket.class.php on line 0
Строку 244 нужно заменить на function dbInstall($data = '')
За это сообщение автора skysilver поблагодарил:
Lerych (Пн ноя 26, 2018 9:58 pm)
Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Ответить