LightHub 4.6.0
Open-source smart home controller firmware
Loading...
Searching...
No Matches
out_modbus.h
Go to the documentation of this file.
1#pragma once
2#include "options.h"
3#ifndef MBUS_DISABLE
4#include <abstractout.h>
5#include <item.h>
6#include "itemCmd.h"
7#include <utils.h>
8
9
10
18class mbPersistent : public chPersistent {
19
20public:
21
22 int baud;
25 uint32_t timestamp;
26 aJsonObject * pollingRegisters;
27 aJsonObject * pollingIrs;
28 aJsonObject * pollingCoils;
29 aJsonObject * poolingDiscreteIns;
30 aJsonObject * parameters;
31};
32
33//execObj subtype
34#define MB_NEED_SEND 8
35#define MB_SEND_ERROR 4
36#define MB_SEND_ATTEMPTS 3
37
38//lastMeasusement subtype
39#define LM_VALUE_OUTDATED 1
40#define LM_VALUE_EMPTY 2
41
42
65class out_Modbus : public abstractOut {
66public:
67 //out_Modbus(Item * _item):abstractOut(_item){store = (mbPersistent *) item->getPersistent();};
69 out_Modbus():store(NULL){};
71 void link(Item * _item){abstractOut::link(_item); if (_item) {store = (mbPersistent *) item->getPersistent(); } else store = NULL;};
72
74 int Setup() override;
76 int Poll(short cause) override;
78 int Stop() override;
80 int getChanType() override;
82 int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
83 //int getDefaultStorageType(){return ST_INT32;};
84 //int Ctrl(short cmd, short n=0, int * Parameters=NULL, int suffixCode=0, char* subItem=NULL) override;
85
86protected:
88 bool getConfig();
89 itemCmd findRegister(uint16_t registerNum, uint16_t posInBuffer, uint8_t regType, uint16_t registerFrom, uint16_t registerTo, bool doExecution = true, bool * submitParam = NULL);
90 void pollModbus(aJsonObject * reg, int regType);
91 void initLine();
92 int sendModbus(char * paramName, aJsonObject * outValue);
93 int sendItemCmd(aJsonObject *templateParamObj, itemCmd cmd);
94 int createLastMeasured(char * name);
95 int createLastMeasured(aJsonObject * execObj);
96 aJsonObject * getLastMeasured(char * name);
97 aJsonObject * getLastMeasured(aJsonObject * execObj);
98 void setLastMeasured(aJsonObject * execObj, int val);
99};
100#endif
A single LightHub item (virtual channel).
Definition item.h:232
chPersistent * getPersistent()
Definition item.cpp:641
abstractOut()
Definition abstractout.h:22
virtual void link(Item *_item)
Definition abstractout.h:24
Item * item
Item currently linked to this driver.
Definition abstractout.h:55
Placeholder for driver-persistent data attached to an item (I_EXT field).
Definition abstractout.h:8
Command + value container passed between items, drivers and MQTT.
Definition itemCmd.h:306
Persistent per-item state of a Modbus channel, stored in the config tree.
Definition out_modbus.h:18
aJsonObject * pollingCoils
Definition out_modbus.h:28
aJsonObject * parameters
Definition out_modbus.h:30
aJsonObject * poolingDiscreteIns
Definition out_modbus.h:29
uint32_t timestamp
Definition out_modbus.h:25
serialParamType serialParam
Definition out_modbus.h:23
aJsonObject * pollingRegisters
Definition out_modbus.h:26
aJsonObject * pollingIrs
Definition out_modbus.h:27
uint16_t pollingInterval
Definition out_modbus.h:24
int baud
Definition out_modbus.h:22
int Ctrl(itemCmd cmd, char *subItem=NULL, bool toExecute=true, bool authorized=false) override
Queues a command for a template parameter (by subitem name or by suffix id), see class doc.
Definition out_modbus.cpp:1196
int getChanType() override
Returns CH_MBUS (14).
Definition out_modbus.cpp:1059
out_Modbus()
Default constructor; binds nothing until link() is called.
Definition out_modbus.h:69
void setLastMeasured(aJsonObject *execObj, int val)
Definition out_modbus.cpp:319
mbPersistent * store
Definition out_modbus.h:87
void pollModbus(aJsonObject *reg, int regType)
Опрос Modbus-устройства по списку регистров.
Definition out_modbus.cpp:719
void link(Item *_item)
Links the channel item and attaches persistent storage.
Definition out_modbus.h:71
int Stop() override
Releases the persistent storage.
Definition out_modbus.cpp:365
int createLastMeasured(char *name)
Создаёт поле для хранения последнего измеренного значения по имени параметра.
Definition out_modbus.cpp:257
int sendItemCmd(aJsonObject *templateParamObj, itemCmd cmd)
Отправляет команду itemCmd в Modbus по шаблону параметра.
Definition out_modbus.cpp:1070
itemCmd findRegister(uint16_t registerNum, uint16_t posInBuffer, uint8_t regType, uint16_t registerFrom, uint16_t registerTo, bool doExecution=true, bool *submitParam=NULL)
Находит и обрабатывает регистр Modbus, выполняет сопоставление и действия.
Definition out_modbus.cpp:424
int Setup() override
Creates persistent storage, loads the template config and prepares the @S marks.
Definition out_modbus.cpp:337
int sendModbus(char *paramName, aJsonObject *outValue)
Отправляет значение в Modbus-устройство.
Definition out_modbus.cpp:784
bool getConfig()
Загружает и применяет конфигурацию Modbus.
Definition out_modbus.cpp:139
int Poll(short cause) override
Sends queued (MB_NEED_SEND) parameter values, then polls the configured register lists and executes m...
Definition out_modbus.cpp:925
aJsonObject * getLastMeasured(char *name)
Получает объект последнего измеренного значения по имени параметра.
Definition out_modbus.cpp:298
void initLine()
Инициализирует линию связи Modbus.
Definition out_modbus.cpp:760
Item (virtual channel) system of LightHub.
Utility helpers of LightHub.
#define serialParamType
Type for a serial parameter (uint32 on ESP32, uint16 elsewhere).
Definition utils.h:65