Files
IoTManager/include/items/SensorModbusClass.h

83 lines
2.8 KiB
C
Raw Normal View History

2020-09-18 02:26:34 +03:00
#pragma once
#include <Arduino.h>
#include <ModbusMaster.h>
#include <SoftwareSerial.h>
#include "Class/LineParsing.h"
#include "Global.h"
#include "items/SensorConvertingClass.h"
ModbusMaster modbus1;
2020-09-18 03:44:03 +03:00
SoftwareSerial uart(13, 12); // RX, TX
2020-09-18 02:26:34 +03:00
class SensorModbusClass : public SensorConvertingClass {
public:
SensorModbusClass() : SensorConvertingClass(){};
void SensorModbusInit() {
2020-09-18 03:44:03 +03:00
uart.begin(9600);
2020-09-18 02:26:34 +03:00
jsonWriteStr(configOptionJson, _key + "_map", _map);
jsonWriteStr(configOptionJson, _key + "_с", _c);
2020-09-18 03:44:03 +03:00
sensorReadingMap += _key + " " + _addr + " " + _reg + ",";
Serial.println(sensorReadingMap);
2020-09-18 02:26:34 +03:00
}
void SensorModbusRead(String key, uint8_t slaveAddress, uint16_t regAddress) {
2020-09-18 03:44:03 +03:00
int value;
2020-09-18 02:26:34 +03:00
modbus1.begin(slaveAddress, uart);
uint16_t reqisterValue = modbus1.readHoldingRegisters(regAddress, 1);
if (getResultMsg(&modbus1, reqisterValue)) {
reqisterValue = modbus1.getResponseBuffer(0);
2020-09-18 03:44:03 +03:00
value = reqisterValue;
2020-09-18 02:26:34 +03:00
} else {
2020-09-18 03:44:03 +03:00
value = NULL;
2020-09-18 02:26:34 +03:00
}
2020-09-18 03:44:03 +03:00
int valueFl = this->correction(key, value);
2020-09-18 02:26:34 +03:00
eventGen(key, "");
jsonWriteStr(configLiveJson, key, String(valueFl));
MqttClient::publishStatus(key, String(valueFl));
2020-09-18 03:44:03 +03:00
Serial.println("I sensor '" + key + "' data: " + String(valueFl) + ", Slave dev addr: " + String(slaveAddress) + ", Register: " + String(regAddress));
2020-09-18 02:26:34 +03:00
}
bool getResultMsg(ModbusMaster* modbus1, uint16_t result) {
String tmpstr;
switch (result) {
case modbus1->ku8MBSuccess:
return true;
tmpstr += "Ok";
break;
case modbus1->ku8MBIllegalFunction:
tmpstr += "Illegal Function";
break;
case modbus1->ku8MBIllegalDataAddress:
tmpstr += "Illegal Data Address";
break;
case modbus1->ku8MBIllegalDataValue:
tmpstr += "Illegal Data Value";
break;
case modbus1->ku8MBSlaveDeviceFailure:
tmpstr += "Slave Device Failure";
break;
case modbus1->ku8MBInvalidSlaveID:
tmpstr += "Invalid Slave ID";
break;
case modbus1->ku8MBInvalidFunction:
tmpstr += "Invalid Function";
break;
case modbus1->ku8MBResponseTimedOut:
tmpstr += "Response Timed Out";
break;
case modbus1->ku8MBInvalidCRC:
tmpstr += "Invalid CRC";
break;
default:
tmpstr += "Unknown error: " + String(result);
break;
}
SerialPrint("I", "Modbus", tmpstr);
return false;
}
};
extern SensorModbusClass mySensorModbus;