Прослушивание TCP/IP
Модератор: immortal
- Lerych
- Сообщения: 191
- Зарегистрирован: Чт дек 14, 2017 8:46 pm
- Откуда: Московская область, Серпухов
- Благодарил (а): 79 раз
- Поблагодарили: 24 раза
Прослушивание TCP/IP
Господа нужна Ваша поддержка (знания)!
Есть промышленный контроллер (PLC-8830), который по TCP/IP может отдавать данные о замкнутых (разомкнутых) "сухих" контактах. Сейчас на этом PLC есть ПО, которое по замыканию/размыканию контакта выдает в TCP/IP сообщение о номере контакта (их там 128) и его состоянии (0/1).
Хочу прикрутить его к МД. Есть ли какой-нибудь Модуль, чтобы это сделать или подскажите в какую сторону "копать".
МД стоит на ББ под Linux с установленным mosquitto, наверное, можно как-то от имени PLC публиковать данные, но нужна "прослойка" PLC-МД.
Или модуль для прослушки TPC/IP и "привызки" приходящих от PLC сообщений к значениям свойств Объекта.
Какие мысли? Спасибо!
Есть промышленный контроллер (PLC-8830), который по TCP/IP может отдавать данные о замкнутых (разомкнутых) "сухих" контактах. Сейчас на этом PLC есть ПО, которое по замыканию/размыканию контакта выдает в TCP/IP сообщение о номере контакта (их там 128) и его состоянии (0/1).
Хочу прикрутить его к МД. Есть ли какой-нибудь Модуль, чтобы это сделать или подскажите в какую сторону "копать".
МД стоит на ББ под Linux с установленным mosquitto, наверное, можно как-то от имени PLC публиковать данные, но нужна "прослойка" PLC-МД.
Или модуль для прослушки TPC/IP и "привызки" приходящих от PLC сообщений к значениям свойств Объекта.
Какие мысли? Спасибо!
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1753 раза
- Контактная информация:
Re: Прослушивание TCP/IP
Вот этот попробуй http://majordomo.smartliving.ru/forum/v ... f=5&t=2973
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
- Lerych
- Сообщения: 191
- Зарегистрирован: Чт дек 14, 2017 8:46 pm
- Откуда: Московская область, Серпухов
- Благодарил (а): 79 раз
- Поблагодарили: 24 раза
Re: Прослушивание TCP/IP
Я читал. Смысл понятен, но надо наоборот не выдавать команды, а получать формализованные сообщения.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
Автор данного модуля канул в лету: Последнее посещение:30 июл 2016, 15:14skysilver писал(а): ↑Пн ноя 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
Установил модуль 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
Копаю дальше.
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
Ругается на этот файл
Чего в нём не так?
СпойлерПоказать
Код: Выделить всё
<?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==
*
*/
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: Прослушивание TCP/IP
А случайно 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
Пока создал в модуле запись
Вроде как встал на прослушку
Создал, что слушать
Я правильно понимаю, что для каждого моего объекта надо две записи заводить, т.е. одна на ВКЛ, другая на ВЫКЛ?
Т.е. в моём примере, если сервер/клиент пришлет запись CN0_TRUE, то в свойство status объекта mdp1_1q1 попадет 1 (единица), а если сервер пришлет CN0_FALSE, то в свойства попадет - 0.
Поправьте, если это не так.
Вроде как встал на прослушку
Создал, что слушать
Я правильно понимаю, что для каждого моего объекта надо две записи заводить, т.е. одна на ВКЛ, другая на ВЫКЛ?
Т.е. в моём примере, если сервер/клиент пришлет запись CN0_TRUE, то в свойство status объекта mdp1_1q1 попадет 1 (единица), а если сервер пришлет CN0_FALSE, то в свойства попадет - 0.
Поправьте, если это не так.
- Вложения
-
- 00007.png (44.02 КБ) 4054 просмотра
-
- 00006.png (22.08 КБ) 4054 просмотра
Последний раз редактировалось Lerych Пн ноя 26, 2018 9:36 pm, всего редактировалось 2 раза.
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1753 раза
- Контактная информация:
Re: Прослушивание TCP/IP
Что конкретно требуется?
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1753 раза
- Контактная информация:
Re: Прослушивание TCP/IP
Строку 244 нужно заменить на function dbInstall($data = '')
- Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram