From f045927b22e045a0efc2f414fe2ac5d3a75932a6 Mon Sep 17 00:00:00 2001 From: Patrykb0802 Date: Thu, 7 Nov 2024 19:28:56 +0100 Subject: [PATCH 1/4] #2152 Can't activate more than 1 Bacnet IP datasource simultaneously fix/#2152_Cant_activate_more_than_1_Bacnet_IP_datasource_simultaneously --- WebContent/WEB-INF/dox/de/bacnetIpDS.htm | 3 ++- WebContent/WEB-INF/dox/en/bacnetIpDS.htm | 3 ++- WebContent/WEB-INF/dox/es/bacnetIpDS.htm | 2 ++ WebContent/WEB-INF/dox/fr/bacnetIpDS.htm | 3 +++ WebContent/WEB-INF/dox/ru/bacnetIpDS.htm | 22 ++++++++++--------- WebContent/WEB-INF/jsp/dataSourceEdit.jsp | 7 +++++- .../bacnet/BACnetIPDataSourceVO.java | 6 +++++ src/org/scada_lts/dao/DAO.java | 22 +++++++++++++++++++ .../mango/service/DataSourceService.java | 4 ++++ webapp-resources/messages_de.properties | 3 ++- webapp-resources/messages_en.properties | 3 ++- webapp-resources/messages_es.properties | 3 ++- webapp-resources/messages_fi.properties | 3 ++- webapp-resources/messages_fr.properties | 3 ++- webapp-resources/messages_lu.properties | 3 ++- webapp-resources/messages_nl.properties | 3 ++- webapp-resources/messages_pl.properties | 3 ++- webapp-resources/messages_pt.properties | 3 ++- webapp-resources/messages_ru.properties | 3 ++- webapp-resources/messages_zh.properties | 3 ++- 20 files changed, 81 insertions(+), 24 deletions(-) diff --git a/WebContent/WEB-INF/dox/de/bacnetIpDS.htm b/WebContent/WEB-INF/dox/de/bacnetIpDS.htm index f482901f85..ef1585aef7 100644 --- a/WebContent/WEB-INF/dox/de/bacnetIpDS.htm +++ b/WebContent/WEB-INF/dox/de/bacnetIpDS.htm @@ -22,7 +22,8 @@

Overview

Configuration

Every data source requires a Name, which can be any description. The Update period determines how often the BACnet equipment is polled for data. Polling is only used if a desired object does not support COV subscriptions. The device is automatically queried for its supported services to make this determination.

The Device ID is the identifier that Mango will provide to other equipment in its IAm message. An IAm message is automatically sent upon startup of the data source to declare its presence to the network, and is also sent in response to appropriate WhoIs requests.

-

The Broadcast address is the IP address for broadcast messages. Your network administrator will provide you with an appropriate value to use. The Port is the port number upon which Mango will listen for incoming messages. Note that Mango supports situations where other equipment within the BACnet network listens on other ports, but broadcases messages will only be sent to the port number that Mango listens on.

+

The Broadcast address is the IP address for broadcast messages. Your network administrator will provide you with an appropriate value to use. The Port is the port number upon which Mango will listen for incoming messages. Note that Mango supports situations where other equipment within the BACnet network listens on other ports, but broadcast messages will only be sent to the port number that Mango listens on.

+

By default, the port is set to 47808 (commonly represented as 0xBAC0), which is the standard port for BACnet communication. However, in some cases, it may be necessary to set the port to 0. Setting the port to 0 allows Mango to automatically detect the port used by devices in the network, which can be useful when the devices are configured to communicate on non-standard ports. This behavior can help resolve issues related to port mismatches in certain network configurations.

The Timeout, Segment timeout, Segment window, and Retries values are BACnet messaging attributes. In most cases the given default values should be appropriate. Consult the BACnet I/P documentation or your network administrator to determine if other values should be used for your network.

The COV lease time is the number of minutes that Mango will request to hold a COV lease. Mango will automatically attempt to refresh its COV subscriptions after half of the given time has elapsed. So, if the least time is 60 minutes, Mango will request the device honour the lease for 60 minutes, and will resubscribe after 30.

Where COV subscriptions are not available, polling at the given rate is used instead. Devices are polled individually. Devices that support ReadPropertyMultiple requests are sent this message, partitioned to contain no more than 200 properties in a single request if necessary. Otherwise, individual ReadProperty requests are sent.

diff --git a/WebContent/WEB-INF/dox/en/bacnetIpDS.htm b/WebContent/WEB-INF/dox/en/bacnetIpDS.htm index f482901f85..ef1585aef7 100644 --- a/WebContent/WEB-INF/dox/en/bacnetIpDS.htm +++ b/WebContent/WEB-INF/dox/en/bacnetIpDS.htm @@ -22,7 +22,8 @@

Overview

Configuration

Every data source requires a Name, which can be any description. The Update period determines how often the BACnet equipment is polled for data. Polling is only used if a desired object does not support COV subscriptions. The device is automatically queried for its supported services to make this determination.

The Device ID is the identifier that Mango will provide to other equipment in its IAm message. An IAm message is automatically sent upon startup of the data source to declare its presence to the network, and is also sent in response to appropriate WhoIs requests.

-

The Broadcast address is the IP address for broadcast messages. Your network administrator will provide you with an appropriate value to use. The Port is the port number upon which Mango will listen for incoming messages. Note that Mango supports situations where other equipment within the BACnet network listens on other ports, but broadcases messages will only be sent to the port number that Mango listens on.

+

The Broadcast address is the IP address for broadcast messages. Your network administrator will provide you with an appropriate value to use. The Port is the port number upon which Mango will listen for incoming messages. Note that Mango supports situations where other equipment within the BACnet network listens on other ports, but broadcast messages will only be sent to the port number that Mango listens on.

+

By default, the port is set to 47808 (commonly represented as 0xBAC0), which is the standard port for BACnet communication. However, in some cases, it may be necessary to set the port to 0. Setting the port to 0 allows Mango to automatically detect the port used by devices in the network, which can be useful when the devices are configured to communicate on non-standard ports. This behavior can help resolve issues related to port mismatches in certain network configurations.

The Timeout, Segment timeout, Segment window, and Retries values are BACnet messaging attributes. In most cases the given default values should be appropriate. Consult the BACnet I/P documentation or your network administrator to determine if other values should be used for your network.

The COV lease time is the number of minutes that Mango will request to hold a COV lease. Mango will automatically attempt to refresh its COV subscriptions after half of the given time has elapsed. So, if the least time is 60 minutes, Mango will request the device honour the lease for 60 minutes, and will resubscribe after 30.

Where COV subscriptions are not available, polling at the given rate is used instead. Devices are polled individually. Devices that support ReadPropertyMultiple requests are sent this message, partitioned to contain no more than 200 properties in a single request if necessary. Otherwise, individual ReadProperty requests are sent.

diff --git a/WebContent/WEB-INF/dox/es/bacnetIpDS.htm b/WebContent/WEB-INF/dox/es/bacnetIpDS.htm index c79c367b37..8a5a631d86 100644 --- a/WebContent/WEB-INF/dox/es/bacnetIpDS.htm +++ b/WebContent/WEB-INF/dox/es/bacnetIpDS.htm @@ -14,6 +14,8 @@

Visión general

Configuración

Cada fuente de datos requiere un Nombre, que puede ser cualquier descripción. El Período de Actualización determina la frecuencia con la que el equipo de BACnet es encuestado para obtener datos. El sondeo sólo se usa si el objeto deseado no soporta suscripciones de COV. El dispositivo es consultado automáticamente por los servicios que soporta para hacer esta determinación.

El ID del dispositivo es el identificador que Mango proporcionará a otros dispositivos en su mensaje IAm. Se envía automáticamente un mensaje de IAm cuando la fuente de datos se pone en marcha para declarar su presencia en la red, y también se envía en respuesta a las solicitudes apropiadas del WhoIs.

+

La dirección de difusión (Broadcast address) es la dirección IP para los mensajes de difusión. Su administrador de red le proporcionará un valor adecuado para usar. El Puerto es el número de puerto en el que Mango escuchará los mensajes entrantes. Tenga en cuenta que Mango admite situaciones en las que otros equipos dentro de la red BACnet escuchan en otros puertos, pero los mensajes de difusión solo se enviarán al número de puerto en el que Mango escucha.

+

Por defecto, el puerto está configurado en 47808 (comúnmente representado como 0xBAC0), que es el puerto estándar para la comunicación BACnet. Sin embargo, en algunos casos, puede ser necesario configurar el puerto en 0. Configurar el puerto en 0 permite que Mango detecte automáticamente el puerto utilizado por los dispositivos en la red, lo cual puede ser útil cuando los dispositivos están configurados para comunicarse en puertos no estándar. Este comportamiento puede ayudar a resolver problemas relacionados con desajustes de puertos en ciertas configuraciones de red.

La Dirección de emisión es la dirección IP de los mensajes de emisión. El administrador de la red le proporcionará un valor apropiado para utilizarlo. El Puerto es el número de puerto en el que Mango escuchará los mensajes entrantes. Tengan en cuenta que Mango admite situaciones en las que otros equipos de la red BACnet están escuchando en otros puertos, pero los mensajes de difusión sólo se enviarán al número de puerto en el que Mango está escuchando.

Los valores Tiempo de espera, Tempo de inactividade do segmento, Segmento de ventana, y Reintentos son atributos de mensajería de BACnet. En la mayoría de los casos, los valores predeterminados dados deben ser apropiados. Consulte la documentación de BACnet I/P o su administrador de red para determinar si se deben utilizar otros valores para su red..

El Tiempo de alquiler del COV es el número de minutos que le tomará a Mango mantener un contrato de arrendamiento de VOC. Mango intentará renovar automáticamente sus suscripciones a los COV después de la mitad del tiempo dado. Por ejemplo, si el tiempo más corto es de 60 minutos, Mango pedirá al aparato que cumpla el contrato de arrendamiento durante 60 minutos, y se volverá a suscribir después de 30 minutos.

diff --git a/WebContent/WEB-INF/dox/fr/bacnetIpDS.htm b/WebContent/WEB-INF/dox/fr/bacnetIpDS.htm index be241021df..9a95a6cb78 100644 --- a/WebContent/WEB-INF/dox/fr/bacnetIpDS.htm +++ b/WebContent/WEB-INF/dox/fr/bacnetIpDS.htm @@ -22,6 +22,9 @@

Vue d'ensemble

Configuration

Chaque source de données nécessite un Nom, qui peut être n'importe quelle description. La période de mise à jour détermine la fréquence à laquelle l'équipement BACnet est interrogé pour obtenir des données. L'interrogation n'est utilisée que si un objet souhaité ne prend pas en charge les abonnements COV. L'appareil est automatiquement interrogé sur les services qu'il prend en charge pour faire cette détermination.

Le ID de l'appareil est l'identifiant que Mango fournira aux autres équipements dans son message IAm. Un message IAm est automatiquement envoyé au démarrage de la source de données pour déclarer sa présence sur le réseau, et est également envoyé en réponse aux demandes WhoIs appropriées.

+

L'adresse de diffusion (Broadcast address) est l'adresse IP pour les messages de diffusion. Votre administrateur réseau vous fournira une valeur appropriée à utiliser. Le port est le numéro de port sur lequel Mango écoutera les messages entrants. Notez que Mango prend en charge les situations où d'autres équipements au sein du réseau BACnet écoutent sur d'autres ports, mais les messages de diffusion ne seront envoyés qu'au numéro de port sur lequel Mango écoute.

+

Par défaut, le port est réglé sur 47808 (souvent représenté sous la forme 0xBAC0), qui est le port standard pour la communication BACnet. Cependant, dans certains cas, il peut être nécessaire de régler le port sur 0. Régler le port sur 0 permet à Mango de détecter automatiquement le port utilisé par les appareils dans le réseau, ce qui peut être utile lorsque les appareils sont configurés pour communiquer sur des ports non standard. Ce comportement peut aider à résoudre les problèmes liés aux incompatibilités de ports dans certaines configurations de réseau.

+

Le Adresse de diffusion est l'adresse IP des messages diffusés. Votre administrateur réseau vous fournira une valeur appropriée à utiliser. Le Port est le numéro de port sur lequel Mango écoutera les messages entrants. Notez que Mango prend en charge les situations où d'autres équipements du réseau BACnet écoutent sur d'autres ports, mais les messages de diffusion ne seront envoyés qu'au numéro de port sur lequel Mango écoute.

Les valeurs Timeout, Segment timeout, Segment window, et Retries sont des attributs de messagerie BACnet. Dans la plupart des cas, les valeurs par défaut données devraient être appropriées. Consultez la documentation de BACnet I/P ou votre administrateur de réseau pour déterminer si d'autres valeurs doivent être utilisées pour votre réseau.

Le COV lease time est le nombre de minutes que Mango demandera pour détenir un COV lease. Mango tentera automatiquement de renouveler ses abonnements au COV après que la moitié du temps donné se soit écoulée. Ainsi, si le temps le plus court est de 60 minutes, Mango demandera au dispositif d'honorer la location pendant 60 minutes, et se réabonnera après 30.

diff --git a/WebContent/WEB-INF/dox/ru/bacnetIpDS.htm b/WebContent/WEB-INF/dox/ru/bacnetIpDS.htm index 48c34b3001..6e6e17614c 100644 --- a/WebContent/WEB-INF/dox/ru/bacnetIpDS.htm +++ b/WebContent/WEB-INF/dox/ru/bacnetIpDS.htm @@ -16,16 +16,18 @@ You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. --> +

Обзор

-

Источник данных BACnet I/P используется для сбора данных с устройств, совместимых с BACnet I/P и доступных через IP-сеть. Устройства могут быть подключены к локальной сети или к Интранет-сети, а также могут находиться где угодно в сети Интернет. Для получения информации данный источник использует как режим опроса, так и режим подписки на получение COV (Изменение значения).

+

Источник данных BACnet I/P используется для сбора данных от устройств, совместимых с BACnet I/P, которые доступны по IP-сети. Оборудование может находиться в локальной сети, внутри локальной сети (интранет) или даже в интернете. Этот источник данных использует оба опроса и подписки на изменения (COV - Change Of Value) для обновления, если это применимо.

Конфигурация

-

Каждый источник данных должен иметь произвольно заданное Имя. Значение поля Период обновления задает частоту опроса устройств сети BACnet. Режим опроса применяется только в тех случаях, если нужный объект не поддерживает подписки на получение COV. Устройству автоматически направляется запрос для определения, какой из способов сбора данных будет использоваться.

-

Идентификатор устройства – это значение идентификатора, которое данное устройство отправляет другому устройству в начальном стартовом сообщении IAm. Начальное стартовое сообщение отправляется автоматически при включении источника данных для подтверждения присутствия устройства в сети, а также отправляется в ответ на соответствующий запрос «Кто есть кто» (WHOIS).

-

Широковещательный адрес – это IP-адрес для широковещательной рассылки сообщений. Ваш администратор сообщит Вам, какое значение следует установить.

-

Порт – это номер порта, который прослушивает Scada-LTS. Необходимо отметить, что Scada-LTS поддерживает ситуации, когда некоторые устройства в сети BACnet имеют возможность прослушивать сообщения с других портов. Но широковещательные сообщения будут рассылаться только через порт, который прослушивает Scada-LTS.

-

Значения полей Время ожидания, Время ожидания сегмента, Окно сегмента и Повторы являются атрибутами сообщений в сети BACnet. В большинстве случаев подходят значения, заданные по умолчанию. Если в Вашей сети необходимо использовать другие значения этих атрибутов, пожалуйста, обратитесь к администратору сети или проверьте техническую документацию сети BACnet I/P.

-

Срок аренды COV – это количество минут, в течение которых Mango будет использовать COV. Система автоматически начнет пытаться обновить COV-подписки по прошествии половины заданного времени. Таким образом, если минимальное время составляет 60 минут, Mango отправит в устройство запрос об установлении аренды в течение 60 минут, а через 30 минут повторно запустит подписку.

-

Если режим подписки на получение COV не доступен, используется опрос с заданной периодичностью. Каждое устройства опрашивается индивидуально. Если устройство поддерживает сервис чтения групп свойств (ReadPropertyMultiple), ему направляется сообщение-запрос, разбитое на части таким образом, чтобы в одном запросе содержалось не более 200 свойств. В противном случае направляются единичные запросы чтения свойства (ReadProperty).

-

Обнаружение устройств сети BACnet I/P

-

Обнаружение сети BACnet I/P происходит автоматически при широковещательной рассылке сигнала WhoIs. Устройства сети должны направлять в ответ начальное стартовое сообщение IAm, в котором содержится основная информация об устройстве. Чтобы проверить настройки конфигурации и найти доступные устройства, введите номер Порта для передачи широковещательного сигнала и нажмите кнопку «Отправить WhoIs». (Если нет номера порта, берется значение из конфигурации). В этом случае будет разослан сигнал WhoIs и немедленно начнется прослушивание ответных сигналов IAm (нажатие кнопки «Отмена» остановит прием сообщений). После получения сигнала IAm, информация об устройстве будет отображена в таблице, расположенной под кнопкой. Эта информация будет использоваться для создания объектов.

+

Каждому источнику данных необходимо задать Имя, которое может быть любым описанием. Период обновления определяет, как часто оборудование BACnet будет опрашиваться для получения данных. Опрос применяется только в случае, если желаемый объект не поддерживает подписки COV. Устройство автоматически опрашивается на предмет поддержки ими необходимых сервисов для принятия решения.

+

Идентификатор устройства (Device ID) является идентификатором, который Mango предоставит другим устройствам в сообщении IAm. Сообщение IAm автоматически отправляется при запуске источника данных для объявления о своём наличии в сети и также отправляется в ответ на запросы WhoIs.

+

Адрес широковещательной отправки (Broadcast address) является IP-адресом для широковещательных сообщений. Ваш администратор сети предоставит вам необходимое значение для использования. Порт - это номер порта, на котором Mango будет слушать входящие сообщения. Обратите внимание, что Mango поддерживает ситуации, в которых другое оборудование в сети BACnet слушает на других портах, но широковещательные сообщения будут отправляться только на порт, на котором Mango слушает.

+

По умолчанию, порт установлен на 47808 (часто обозначаемый как 0xBAC0), что является стандартным портом для BACnet. Однако, в некоторых случаях может понадобиться установить порт на 0. Установка порта на 0 позволяет Mango автоматически определять порт, используемый устройствами в сети, что может быть полезно, когда устройства настроены на работу на нестандартных портах. Это поведение может помочь решить проблемы, связанные с несоответствием портов в определенных конфигурациях сети.

+

Таймаут (Timeout), Таймаут сегмента (Segment timeout), Окно сегмента (Segment window) и Повторы (Retries) являются параметрами сообщений BACnet. В большинстве случаев данные параметры по умолчанию должны быть подходящими. Обратитесь к документации BACnet I/P или к вашему администратору сети, чтобы определить, если для вашей сети должны быть использованы другие значения.

+

Время действия подписки COV (COV lease time) — это количество минут, на которое Mango будет запрашивать сохранение аренды COV. Mango автоматически попытается обновить свои подписки COV после того, как пройдёт половина заданного времени. Так что, если время аренды равно 60 минут, Mango запросит у устройства продление аренды на 60 минут, а переоформит подписку через 30 минут.

+

Когда подписки COV не доступны, вместо этого используется опрос с указанной частотой. Устройства опрашиваются поотдельно. Устройства, которые поддерживают запросы ReadPropertyMultiple, отправляют это сообщение, разделенное на не более чем 200 свойств в один запрос при необходимости. В противном случае отправляются отдельные запросы ReadProperty.

+ +

Обнаружение BACnet I/P

+

Сети BACnet I/P могут быть обнаружены автоматически с помощью отправки сообщений WhoIs. Устройства обязаны ответить сообщением IAm, которое содержит некоторую основную информацию об устройстве. Чтобы проверить настройки конфигурации и определить, какие устройства доступны для точек, введите номер порта, на котором будет выполняться широковещательная отправка, и нажмите кнопку «Отправить WhoIs». (Если номер порта не указан, используется значение из конфигурации.) Одно сообщение WhoIs будет отправлено, и после этого устройство будет слушать сообщения IAm бесконечно. (Нажатие «Отмена» остановит слушатель.) По мере получения сообщений IAm информация о устройствах будет отображаться в таблице ниже кнопки. Эта информация может быть использована для создания точек.

diff --git a/WebContent/WEB-INF/jsp/dataSourceEdit.jsp b/WebContent/WEB-INF/jsp/dataSourceEdit.jsp index a264d7f80c..154a8c0746 100644 --- a/WebContent/WEB-INF/jsp/dataSourceEdit.jsp +++ b/WebContent/WEB-INF/jsp/dataSourceEdit.jsp @@ -141,7 +141,12 @@ function toggleDataSourceCB(result) { var imgNode = $("dsStatusImg"); stopImageFader(imgNode); - setDataSourceStatusImg(result.enabled, imgNode); + + if (result.error) { + return; + } + + setDataSourceStatusImg(result.enabled, imgNode); getAlarms(); } diff --git a/src/com/serotonin/mango/vo/dataSource/bacnet/BACnetIPDataSourceVO.java b/src/com/serotonin/mango/vo/dataSource/bacnet/BACnetIPDataSourceVO.java index 323f697d0d..44215048a5 100644 --- a/src/com/serotonin/mango/vo/dataSource/bacnet/BACnetIPDataSourceVO.java +++ b/src/com/serotonin/mango/vo/dataSource/bacnet/BACnetIPDataSourceVO.java @@ -42,6 +42,7 @@ import com.serotonin.util.SerializationHelper; import com.serotonin.web.dwr.DwrResponseI18n; import com.serotonin.web.i18n.LocalizableMessage; +import org.scada_lts.mango.service.DataSourceService; /** * @author Matthew Lohbihler @@ -248,6 +249,11 @@ public void validate(DwrResponseI18n response) { response.addContextualMessage("broadcastAddress", "common.default", e.getMessage()); } + DataSourceService dataSourceService = new DataSourceService(); + if(getPort()!=0 && dataSourceService.isBacNetDataSourcePortUsed(getId(), getPort())){ + response.addContextualMessage("port", "Bacnet.invalid.port"); + } + try { new InetSocketAddress(broadcastAddress, port); } diff --git a/src/org/scada_lts/dao/DAO.java b/src/org/scada_lts/dao/DAO.java index a98526802a..217f1bee54 100644 --- a/src/org/scada_lts/dao/DAO.java +++ b/src/org/scada_lts/dao/DAO.java @@ -17,12 +17,16 @@ */ package org.scada_lts.dao; +import java.io.ByteArrayInputStream; +import java.io.ObjectInputStream; import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.Random; import javax.sql.DataSource; +import com.serotonin.mango.vo.dataSource.bacnet.BACnetIPDataSourceVO; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.scada_lts.web.beans.ApplicationBeans; @@ -169,5 +173,23 @@ public boolean isTest() { public void setTest(boolean test) { this.test = test; } + + public boolean isBacNetDataSourcePortUsed(int excludeId, int port) { + String sql = "SELECT data FROM dataSources WHERE dataSourceType = 10 AND id <> ?"; + + List results = DAO.getInstance().getJdbcTemp().queryForList(sql, new Object[] { excludeId }, byte[].class); + + for (byte[] data : results) { + try (ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data))) { + BACnetIPDataSourceVO dataSource = (BACnetIPDataSourceVO) ois.readObject(); + if (dataSource.getPort() == port) { + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return false; + } } diff --git a/src/org/scada_lts/mango/service/DataSourceService.java b/src/org/scada_lts/mango/service/DataSourceService.java index 46b71b7abb..23e1ab9ca9 100644 --- a/src/org/scada_lts/mango/service/DataSourceService.java +++ b/src/org/scada_lts/mango/service/DataSourceService.java @@ -284,4 +284,8 @@ private boolean toggleDataSource(DataSourceVO vo) { Common.ctx.getRuntimeManager().saveDataSource(vo); return vo.isEnabled(); } + + public boolean isBacNetDataSourcePortUsed(int excludeId, int port) { + return DAO.getInstance().isBacNetDataSourcePortUsed(excludeId, port); + } } diff --git a/webapp-resources/messages_de.properties b/webapp-resources/messages_de.properties index 235952effe..9eeeb5119a 100644 --- a/webapp-resources/messages_de.properties +++ b/webapp-resources/messages_de.properties @@ -3365,4 +3365,5 @@ header.imageSets=Image sets header.dynamicImages=Dynamic images systemSettings.customCssSaved=Custom Css has been saved systemSettings.invalidCustomCss=Invalid custom CSS -systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports \ No newline at end of file +systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports +Bacnet.invalid.port=Port already in use: cannot bind \ No newline at end of file diff --git a/webapp-resources/messages_en.properties b/webapp-resources/messages_en.properties index 2a13f6304c..05716d1fba 100644 --- a/webapp-resources/messages_en.properties +++ b/webapp-resources/messages_en.properties @@ -3368,4 +3368,5 @@ header.imageSets=Image sets header.dynamicImages=Dynamic images systemSettings.customCssSaved=Custom Css has been saved systemSettings.invalidCustomCss=Invalid custom CSS -systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports \ No newline at end of file +systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports +Bacnet.invalid.port=Port already in use: cannot bind \ No newline at end of file diff --git a/webapp-resources/messages_es.properties b/webapp-resources/messages_es.properties index a9c35c5ed5..d1182d0530 100644 --- a/webapp-resources/messages_es.properties +++ b/webapp-resources/messages_es.properties @@ -3408,4 +3408,5 @@ header.imageSets=Image sets header.dynamicImages=Dynamic images systemSettings.customCssSaved=Custom Css has been saved systemSettings.invalidCustomCss=Invalid custom CSS -systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports \ No newline at end of file +systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports +Bacnet.invalid.port=Port already in use: cannot bind \ No newline at end of file diff --git a/webapp-resources/messages_fi.properties b/webapp-resources/messages_fi.properties index 1c154600f7..e02c2c731f 100644 --- a/webapp-resources/messages_fi.properties +++ b/webapp-resources/messages_fi.properties @@ -3493,4 +3493,5 @@ header.imageSets=Image sets header.dynamicImages=Dynamic images systemSettings.customCssSaved=Custom Css has been saved systemSettings.invalidCustomCss=Invalid custom CSS -systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports \ No newline at end of file +systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports +Bacnet.invalid.port=Port already in use: cannot bind diff --git a/webapp-resources/messages_fr.properties b/webapp-resources/messages_fr.properties index 72791d0350..c553a0f440 100644 --- a/webapp-resources/messages_fr.properties +++ b/webapp-resources/messages_fr.properties @@ -3362,4 +3362,5 @@ header.imageSets=Image sets header.dynamicImages=Dynamic images systemSettings.customCssSaved=Custom Css has been saved systemSettings.invalidCustomCss=Invalid custom CSS -systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports \ No newline at end of file +systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports +Bacnet.invalid.port=Port already in use: cannot bind \ No newline at end of file diff --git a/webapp-resources/messages_lu.properties b/webapp-resources/messages_lu.properties index b7270b37f0..d0979c2da4 100644 --- a/webapp-resources/messages_lu.properties +++ b/webapp-resources/messages_lu.properties @@ -3381,4 +3381,5 @@ header.imageSets=Image sets header.dynamicImages=Dynamic images systemSettings.customCssSaved=Custom Css has been saved systemSettings.invalidCustomCss=Invalid custom CSS -systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports \ No newline at end of file +systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports +Bacnet.invalid.port=Port already in use: cannot bind \ No newline at end of file diff --git a/webapp-resources/messages_nl.properties b/webapp-resources/messages_nl.properties index da0796fe12..7f080ee0b7 100644 --- a/webapp-resources/messages_nl.properties +++ b/webapp-resources/messages_nl.properties @@ -3483,4 +3483,5 @@ header.imageSets=Image sets header.dynamicImages=Dynamic images systemSettings.customCssSaved=Custom Css has been saved systemSettings.invalidCustomCss=Invalid custom CSS -systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports \ No newline at end of file +systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports +Bacnet.invalid.port=Port already in use: cannot bind \ No newline at end of file diff --git a/webapp-resources/messages_pl.properties b/webapp-resources/messages_pl.properties index a4f944d4a2..b24bfc3b2d 100644 --- a/webapp-resources/messages_pl.properties +++ b/webapp-resources/messages_pl.properties @@ -3505,4 +3505,5 @@ header.imageSets=Image sets header.dynamicImages=Dynamic images systemSettings.customCssSaved=Custom Css has been saved systemSettings.invalidCustomCss=Invalid custom CSS -systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports \ No newline at end of file +systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports +Bacnet.invalid.port=Port already in use: cannot bind \ No newline at end of file diff --git a/webapp-resources/messages_pt.properties b/webapp-resources/messages_pt.properties index bba9a40469..c0656acb36 100644 --- a/webapp-resources/messages_pt.properties +++ b/webapp-resources/messages_pt.properties @@ -3520,4 +3520,5 @@ header.imageSets=Image sets header.dynamicImages=Dynamic images systemSettings.customCssSaved=Custom Css has been saved systemSettings.invalidCustomCss=Invalid custom CSS -systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports \ No newline at end of file +systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports +Bacnet.invalid.port=Port already in use: cannot bind \ No newline at end of file diff --git a/webapp-resources/messages_ru.properties b/webapp-resources/messages_ru.properties index 5dd6fc1bc4..deb85e30ef 100644 --- a/webapp-resources/messages_ru.properties +++ b/webapp-resources/messages_ru.properties @@ -3516,4 +3516,5 @@ header.imageSets=Image sets header.dynamicImages=Dynamic images systemSettings.customCssSaved=Custom Css has been saved systemSettings.invalidCustomCss=Invalid custom CSS -systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports \ No newline at end of file +systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports +Bacnet.invalid.port=Port already in use: cannot bind \ No newline at end of file diff --git a/webapp-resources/messages_zh.properties b/webapp-resources/messages_zh.properties index 5607c549d7..913e907816 100644 --- a/webapp-resources/messages_zh.properties +++ b/webapp-resources/messages_zh.properties @@ -3468,4 +3468,5 @@ header.imageSets=Image sets header.dynamicImages=Dynamic images systemSettings.customCssSaved=Custom CSS has been saved systemSettings.invalidCustomCss=Invalid custom CSS -systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports \ No newline at end of file +systemsettings.reports.dataPointExtendedNameLengthLimit=Point name length limit in reports +Bacnet.invalid.port=Port already in use: cannot bind \ No newline at end of file From 6303a69746aa338757b10a342538910f44f5755e Mon Sep 17 00:00:00 2001 From: patrykb0802 Date: Tue, 12 Nov 2024 10:32:52 +0100 Subject: [PATCH 2/4] #2152 Can't activate more than 1 Bacnet IP datasource simultaneously --- WebContent/WEB-INF/dox/de/bacnetIpDS.htm | 2 +- WebContent/WEB-INF/dox/en/bacnetIpDS.htm | 2 +- WebContent/WEB-INF/dox/ru/bacnetIpDS.htm | 21 ++++++++++----------- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/WebContent/WEB-INF/dox/de/bacnetIpDS.htm b/WebContent/WEB-INF/dox/de/bacnetIpDS.htm index ef1585aef7..13c3b00134 100644 --- a/WebContent/WEB-INF/dox/de/bacnetIpDS.htm +++ b/WebContent/WEB-INF/dox/de/bacnetIpDS.htm @@ -22,7 +22,7 @@

Overview

Configuration

Every data source requires a Name, which can be any description. The Update period determines how often the BACnet equipment is polled for data. Polling is only used if a desired object does not support COV subscriptions. The device is automatically queried for its supported services to make this determination.

The Device ID is the identifier that Mango will provide to other equipment in its IAm message. An IAm message is automatically sent upon startup of the data source to declare its presence to the network, and is also sent in response to appropriate WhoIs requests.

-

The Broadcast address is the IP address for broadcast messages. Your network administrator will provide you with an appropriate value to use. The Port is the port number upon which Mango will listen for incoming messages. Note that Mango supports situations where other equipment within the BACnet network listens on other ports, but broadcast messages will only be sent to the port number that Mango listens on.

+

The Broadcast address is the IP address for broadcast messages. Your network administrator will provide you with an appropriate value to use. The Port is the port number upon which Mango will listen for incoming messages. Note that Mango supports situations where other equipment within the BACnet network listens on other ports, but broadcases messages will only be sent to the port number that Mango listens on.

By default, the port is set to 47808 (commonly represented as 0xBAC0), which is the standard port for BACnet communication. However, in some cases, it may be necessary to set the port to 0. Setting the port to 0 allows Mango to automatically detect the port used by devices in the network, which can be useful when the devices are configured to communicate on non-standard ports. This behavior can help resolve issues related to port mismatches in certain network configurations.

The Timeout, Segment timeout, Segment window, and Retries values are BACnet messaging attributes. In most cases the given default values should be appropriate. Consult the BACnet I/P documentation or your network administrator to determine if other values should be used for your network.

The COV lease time is the number of minutes that Mango will request to hold a COV lease. Mango will automatically attempt to refresh its COV subscriptions after half of the given time has elapsed. So, if the least time is 60 minutes, Mango will request the device honour the lease for 60 minutes, and will resubscribe after 30.

diff --git a/WebContent/WEB-INF/dox/en/bacnetIpDS.htm b/WebContent/WEB-INF/dox/en/bacnetIpDS.htm index ef1585aef7..13c3b00134 100644 --- a/WebContent/WEB-INF/dox/en/bacnetIpDS.htm +++ b/WebContent/WEB-INF/dox/en/bacnetIpDS.htm @@ -22,7 +22,7 @@

Overview

Configuration

Every data source requires a Name, which can be any description. The Update period determines how often the BACnet equipment is polled for data. Polling is only used if a desired object does not support COV subscriptions. The device is automatically queried for its supported services to make this determination.

The Device ID is the identifier that Mango will provide to other equipment in its IAm message. An IAm message is automatically sent upon startup of the data source to declare its presence to the network, and is also sent in response to appropriate WhoIs requests.

-

The Broadcast address is the IP address for broadcast messages. Your network administrator will provide you with an appropriate value to use. The Port is the port number upon which Mango will listen for incoming messages. Note that Mango supports situations where other equipment within the BACnet network listens on other ports, but broadcast messages will only be sent to the port number that Mango listens on.

+

The Broadcast address is the IP address for broadcast messages. Your network administrator will provide you with an appropriate value to use. The Port is the port number upon which Mango will listen for incoming messages. Note that Mango supports situations where other equipment within the BACnet network listens on other ports, but broadcases messages will only be sent to the port number that Mango listens on.

By default, the port is set to 47808 (commonly represented as 0xBAC0), which is the standard port for BACnet communication. However, in some cases, it may be necessary to set the port to 0. Setting the port to 0 allows Mango to automatically detect the port used by devices in the network, which can be useful when the devices are configured to communicate on non-standard ports. This behavior can help resolve issues related to port mismatches in certain network configurations.

The Timeout, Segment timeout, Segment window, and Retries values are BACnet messaging attributes. In most cases the given default values should be appropriate. Consult the BACnet I/P documentation or your network administrator to determine if other values should be used for your network.

The COV lease time is the number of minutes that Mango will request to hold a COV lease. Mango will automatically attempt to refresh its COV subscriptions after half of the given time has elapsed. So, if the least time is 60 minutes, Mango will request the device honour the lease for 60 minutes, and will resubscribe after 30.

diff --git a/WebContent/WEB-INF/dox/ru/bacnetIpDS.htm b/WebContent/WEB-INF/dox/ru/bacnetIpDS.htm index 6e6e17614c..1e2cdbf913 100644 --- a/WebContent/WEB-INF/dox/ru/bacnetIpDS.htm +++ b/WebContent/WEB-INF/dox/ru/bacnetIpDS.htm @@ -18,16 +18,15 @@ -->

Обзор

-

Источник данных BACnet I/P используется для сбора данных от устройств, совместимых с BACnet I/P, которые доступны по IP-сети. Оборудование может находиться в локальной сети, внутри локальной сети (интранет) или даже в интернете. Этот источник данных использует оба опроса и подписки на изменения (COV - Change Of Value) для обновления, если это применимо.

+

Источник данных BACnet I/P используется для сбора данных с устройств, совместимых с BACnet I/P и доступных через IP-сеть. Устройства могут быть подключены к локальной сети или к Интранет-сети, а также могут находиться где угодно в сети Интернет. Для получения информации данный источник использует как режим опроса, так и режим подписки на получение COV (Изменение значения).

Конфигурация

-

Каждому источнику данных необходимо задать Имя, которое может быть любым описанием. Период обновления определяет, как часто оборудование BACnet будет опрашиваться для получения данных. Опрос применяется только в случае, если желаемый объект не поддерживает подписки COV. Устройство автоматически опрашивается на предмет поддержки ими необходимых сервисов для принятия решения.

-

Идентификатор устройства (Device ID) является идентификатором, который Mango предоставит другим устройствам в сообщении IAm. Сообщение IAm автоматически отправляется при запуске источника данных для объявления о своём наличии в сети и также отправляется в ответ на запросы WhoIs.

-

Адрес широковещательной отправки (Broadcast address) является IP-адресом для широковещательных сообщений. Ваш администратор сети предоставит вам необходимое значение для использования. Порт - это номер порта, на котором Mango будет слушать входящие сообщения. Обратите внимание, что Mango поддерживает ситуации, в которых другое оборудование в сети BACnet слушает на других портах, но широковещательные сообщения будут отправляться только на порт, на котором Mango слушает.

-

По умолчанию, порт установлен на 47808 (часто обозначаемый как 0xBAC0), что является стандартным портом для BACnet. Однако, в некоторых случаях может понадобиться установить порт на 0. Установка порта на 0 позволяет Mango автоматически определять порт, используемый устройствами в сети, что может быть полезно, когда устройства настроены на работу на нестандартных портах. Это поведение может помочь решить проблемы, связанные с несоответствием портов в определенных конфигурациях сети.

-

Таймаут (Timeout), Таймаут сегмента (Segment timeout), Окно сегмента (Segment window) и Повторы (Retries) являются параметрами сообщений BACnet. В большинстве случаев данные параметры по умолчанию должны быть подходящими. Обратитесь к документации BACnet I/P или к вашему администратору сети, чтобы определить, если для вашей сети должны быть использованы другие значения.

-

Время действия подписки COV (COV lease time) — это количество минут, на которое Mango будет запрашивать сохранение аренды COV. Mango автоматически попытается обновить свои подписки COV после того, как пройдёт половина заданного времени. Так что, если время аренды равно 60 минут, Mango запросит у устройства продление аренды на 60 минут, а переоформит подписку через 30 минут.

-

Когда подписки COV не доступны, вместо этого используется опрос с указанной частотой. Устройства опрашиваются поотдельно. Устройства, которые поддерживают запросы ReadPropertyMultiple, отправляют это сообщение, разделенное на не более чем 200 свойств в один запрос при необходимости. В противном случае отправляются отдельные запросы ReadProperty.

- -

Обнаружение BACnet I/P

-

Сети BACnet I/P могут быть обнаружены автоматически с помощью отправки сообщений WhoIs. Устройства обязаны ответить сообщением IAm, которое содержит некоторую основную информацию об устройстве. Чтобы проверить настройки конфигурации и определить, какие устройства доступны для точек, введите номер порта, на котором будет выполняться широковещательная отправка, и нажмите кнопку «Отправить WhoIs». (Если номер порта не указан, используется значение из конфигурации.) Одно сообщение WhoIs будет отправлено, и после этого устройство будет слушать сообщения IAm бесконечно. (Нажатие «Отмена» остановит слушатель.) По мере получения сообщений IAm информация о устройствах будет отображаться в таблице ниже кнопки. Эта информация может быть использована для создания точек.

+

Каждый источник данных должен иметь произвольно заданное Имя. Значение поля Период обновления задает частоту опроса устройств сети BACnet. Режим опроса применяется только в тех случаях, если нужный объект не поддерживает подписки на получение COV. Устройству автоматически направляется запрос для определения, какой из способов сбора данных будет использоваться.

+

Идентификатор устройства – это значение идентификатора, которое данное устройство отправляет другому устройству в начальном стартовом сообщении IAm. Начальное стартовое сообщение отправляется автоматически при включении источника данных для подтверждения присутствия устройства в сети, а также отправляется в ответ на соответствующий запрос «Кто есть кто» (WHOIS).

+

Широковещательный адрес – это IP-адрес для широковещательной рассылки сообщений. Ваш администратор сообщит Вам, какое значение следует установить.

+

Порт – это номер порта, который прослушивает Scada-LTS. Необходимо отметить, что Scada-LTS поддерживает ситуации, когда некоторые устройства в сети BACnet имеют возможность прослушивать сообщения с других портов. Но широковещательные сообщения будут рассылаться только через порт, который прослушивает Scada-LTS.

+

Значения полей Время ожидания, Время ожидания сегмента, Окно сегмента и Повторы являются атрибутами сообщений в сети BACnet. В большинстве случаев подходят значения, заданные по умолчанию. Если в Вашей сети необходимо использовать другие значения этих атрибутов, пожалуйста, обратитесь к администратору сети или проверьте техническую документацию сети BACnet I/P.

+

Срок аренды COV – это количество минут, в течение которых Mango будет использовать COV. Система автоматически начнет пытаться обновить COV-подписки по прошествии половины заданного времени. Таким образом, если минимальное время составляет 60 минут, Mango отправит в устройство запрос об установлении аренды в течение 60 минут, а через 30 минут повторно запустит подписку.

+

Если режим подписки на получение COV не доступен, используется опрос с заданной периодичностью. Каждое устройства опрашивается индивидуально. Если устройство поддерживает сервис чтения групп свойств (ReadPropertyMultiple), ему направляется сообщение-запрос, разбитое на части таким образом, чтобы в одном запросе содержалось не более 200 свойств. В противном случае направляются единичные запросы чтения свойства (ReadProperty).

+

Обнаружение устройств сети BACnet I/P

+

Обнаружение сети BACnet I/P происходит автоматически при широковещательной рассылке сигнала WhoIs. Устройства сети должны направлять в ответ начальное стартовое сообщение IAm, в котором содержится основная информация об устройстве. Чтобы проверить настройки конфигурации и найти доступные устройства, введите номер Порта для передачи широковещательного сигнала и нажмите кнопку «Отправить WhoIs». (Если нет номера порта, берется значение из конфигурации). В этом случае будет разослан сигнал WhoIs и немедленно начнется прослушивание ответных сигналов IAm (нажатие кнопки «Отмена» остановит прием сообщений). После получения сигнала IAm, информация об устройстве будет отображена в таблице, расположенной под кнопкой. Эта информация будет использоваться для создания объектов.

From 9ed1f5ed5842c3b5b46e74ca2029bc060f82a94c Mon Sep 17 00:00:00 2001 From: patrykb0802 Date: Tue, 12 Nov 2024 10:33:27 +0100 Subject: [PATCH 3/4] #2152 Can't activate more than 1 Bacnet IP datasource simultaneously --- WebContent/WEB-INF/dox/ru/bacnetIpDS.htm | 1 - 1 file changed, 1 deletion(-) diff --git a/WebContent/WEB-INF/dox/ru/bacnetIpDS.htm b/WebContent/WEB-INF/dox/ru/bacnetIpDS.htm index 1e2cdbf913..48c34b3001 100644 --- a/WebContent/WEB-INF/dox/ru/bacnetIpDS.htm +++ b/WebContent/WEB-INF/dox/ru/bacnetIpDS.htm @@ -16,7 +16,6 @@ You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/. --> -

Обзор

Источник данных BACnet I/P используется для сбора данных с устройств, совместимых с BACnet I/P и доступных через IP-сеть. Устройства могут быть подключены к локальной сети или к Интранет-сети, а также могут находиться где угодно в сети Интернет. Для получения информации данный источник использует как режим опроса, так и режим подписки на получение COV (Изменение значения).

From 40265e11d7cadf9956137184e565e32d095e5c64 Mon Sep 17 00:00:00 2001 From: patrykb0802 Date: Tue, 12 Nov 2024 16:01:48 +0100 Subject: [PATCH 4/4] #2152 Can't activate more than 1 Bacnet IP datasource simultaneously --- WebContent/WEB-INF/jsp/dataSourceEdit.jsp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WebContent/WEB-INF/jsp/dataSourceEdit.jsp b/WebContent/WEB-INF/jsp/dataSourceEdit.jsp index 154a8c0746..d6bf6aee30 100644 --- a/WebContent/WEB-INF/jsp/dataSourceEdit.jsp +++ b/WebContent/WEB-INF/jsp/dataSourceEdit.jsp @@ -142,11 +142,11 @@ var imgNode = $("dsStatusImg"); stopImageFader(imgNode); - if (result.error) { - return; - } + if (result.error) { + return; + } - setDataSourceStatusImg(result.enabled, imgNode); + setDataSourceStatusImg(result.enabled, imgNode); getAlarms(); }