BACnetRP

BACWrite.cpp

image0

BACnet (Building Automation and Control Networks) — это стандартный протокол связи, разработанный для обеспечения взаимодействия между системами автоматизации зданий. BACnet был создан для облегчения коммуникации между различными устройствами и системами, такими как системы управления климатом, освещением, безопасностью и энергопотреблением в зданиях.

BACnet RP (BACnet Read-Write Property) — это часть стандарта BACnet, которая определяет методы чтения и записи свойств объектов в устройствах BACnet. Это позволяет управлять и настраивать параметры устройств, такие как температура, влажность, уровень освещенности и другие.

В BACnet устройства представлены в виде объектов, каждый из которых имеет определенные свойства. >Например, объект “Термостат” может иметь свойства “Текущая температура” и “Установленная температура”.

Он позволяет читать значения свойств объектов (например, текущую температуру) и записывать новые значения.

BACnet RP поддерживает многоадресную передачу, что позволяет одному запросу достигать нескольких устройств одновременно.


Узел опроса отдельных свойств устройств в сети BACnet.

image1

Входные значения

  • BACRegisterRP:

    • iface - сетевой интерфейс, через который устройство взаимодействует в сети, берётся значение передаваемого ip str

    • ip - идентификация устройства в системе Bacnet str

    • port - идентификация службы на устройстве str

    • cmd - str

    • period - период сбора информации int в cекундах.

    • block - указывает на размер блока передаваемой информации

    • device-instance - адрес bacnet сервера

    • device-name - str

    • object-type - тип устройства int

    • object-instance - int

    • property-name - str

    • property - читаемое свойство str

    • description - текстовое описание str

    • source - str

RegistersCSV - количество строк в файле csv, переменная. Из класса BACRegisterRP собирается вектор RPDevices, содержащий информацию об устройствах. Данный вектор будет отправлен после того, как полностью соберется. При возникновении ошибок хотя бы в одном элементе вектор отправлен не будет.

  • host - значение хоста для Redis

  • REDIS-Port - порт для Redis. По умолчанию - 6379.

Redis собирает информацию, полученную за какой-то выбранный период времени и отправляет запрос к Bacnet.

Пример входного файла CSV:

Table

ip

port

cmd

period

block

device-instance

device-name

object-type

object-instance

property

property-name

description

source

172.18.0.3

47808

rp

550

50

0

bacs_demo

2

1

area1

85

Активация ДУ-1

МФК/ARK-5/Активация ДУ-1

172.18.0.3

47808

rp

550

50

0

bacs_demo

2

2

area2

85

Активация ДУ-2

МФК/ARK-5/Активация ДУ-2

CSV

ip;port;cmd;period;block;device-instance;device-name;object-type;object-instance;property-name;property;description;source
172.18.0.4;47808;rp;3;50;0;bacnet_test;2;1;area1;85;Активация ДУ-1;МФК/ARK-5/Активация ДУ-1
172.18.0.4;47808;rp;3;50;0;enp0s3;2;2;area2;85;Активация ДУ-2;МФК/ARK-5/Активация ДУ-2

Возвращаемые значения

  • connection_status

  • time - int64

  • values:[

    • property-name - str

    • property - имя считываемого свойства str

    • description - текстовое описание свойства str

    • source - источник данных str

    • value - значение свойства с устройства str

    • timer - считается время выполнения запроса double ]

Пример Json

{
  "time": 1672531200000,
  "values": [
    {
      "property-name": "area1",
      "description": "Активация ДУ-1",
      "source": "МФК/ARK-5/Активация ДУ-1",
      "value": "22",
      "timer": 0.1
    },
    {
      "property-name": "area2",
      "description": "Активация ДУ-2",
      "source": "МФК/ARK-5/Активация ДУ-2",
      "value": "45",
      "timer": 0.15
    }
  ]
}

Пример использования

Добавим в наш compose.yaml контейнер для тестирования bacnet.

bacnet:
  container_name: bacnet_emul
  restart: on-failure
  build:
    dockerfile: ./test_server/bac_eml.Dockerfile
  ports:
    - 47808:47808

Далее собираем наш проект и смотрим ip нашего контейнера, на который мы должны отправлять запросы.

docker inspect bacnet_emul

image2

Для использования Bacnet в узле нам потребуется создать файл .csv, и поместить в него нашу конфигурацию.

image3

Соберем простенькую цепочку

image4

Выберем наш Json-файл в проводнике

image5

Сохраняем цепочку и смотрим

image6