This sample shows how to read and write datapoint values via the device API.
It simulates an application of a basic 2-fold switching actuator. It is helpful when in the KNX installation a push button e.g. weinzierl 420 exists.
#include "Helper.h"
#include <exception>
#include <iostream>
#include <memory>
using namespace wz::baos::ip;
namespace
{
enum Datapoints
{
Ch_A_Switch = 1,
Ch_A_State = 2,
Ch_B_Switch = 3,
Ch_B_State = 4
};
void validateConfiguation(BaosIp4Device& baosDevice)
{
std::cout << "Read datapoint configuration and validate it ... " << std::endl;
DatapointConfig config = configurations.at(Datapoints::Ch_A_Switch);
if (config.size != DatapointSize::BITS_1)
{
throw std::runtime_error("Datapoint Ch_A_Switch: Unexpected datapoint size");
}
if (config.dpt != DPT::DPT_1)
{
throw std::runtime_error("Datapoint Ch_A_Switch: Unexpected datapoint type");
}
config = configurations.at(Datapoints::Ch_A_State);
if (config.size != DatapointSize::BITS_1)
{
throw std::runtime_error("Datapoint Ch_A_State: Unexpected datapoint size");
}
if (config.dpt != DPT::DPT_1)
{
throw std::runtime_error("Datapoint Ch_A_State: Unexpected datapoint type");
}
config = configurations.at(Datapoints::Ch_B_Switch);
if (config.size != DatapointSize::BITS_1)
{
throw std::runtime_error("Datapoint Ch_B_Switch: Unexpected datapoint size");
}
if (config.dpt != DPT::DPT_1)
{
throw std::runtime_error("Datapoint Ch_B_Switch: Unexpected datapoint type");
}
config = configurations.at(Datapoints::Ch_B_State);
if (config.size != DatapointSize::BITS_1)
{
throw std::runtime_error("Datapoint Ch_B_State: Unexpected datapoint size");
}
if (config.dpt != DPT::DPT_1)
{
throw std::runtime_error("Datapoint Ch_B_State: Unexpected datapoint type");
}
}
void setBooleanDatapointValue(BaosIp4Device& baosDevice, std::uint16_t dpId, bool enabled)
{
baosDevice.setDpValue(dpId, buffer, DatapointSetCommand::SetNewValueAndSendOnBus);
}
void onChannelSwitchEvent(BaosIp4Device& baosDevice, std::uint16_t dpIdState,
const DatapointValue& newValue)
{
std::cout << "Received switch -> set state " << std::endl;
baosDevice.setDpValue(dpIdState, newValue, DatapointSetCommand::SetNewValueAndSendOnBus);
}
}
int main(int argc, char* argv[])
{
try
{
std::cout << "******************************************" << std::endl;
std::cout << "07_SwitchingActuator sample" << std::endl;
std::cout << "******************************************" << std::endl;
std::cout << std::endl;
CommandLineOptions options;
options.parse(argc, argv);
if (options.wasHelpdisplayed())
{
return 0;
}
const std::string ipAddress = options.getIpAddress();
std::cout << " Connection requested for " << ipAddress << std::endl;
BaosIp4Device baosDevice(ipAddress);
validateConfiguation(baosDevice);
bool value = false;
setBooleanDatapointValue(baosDevice, Datapoints::Ch_A_State, value);
std::cout << "Channel A: Current state: " << value << std::endl;
setBooleanDatapointValue(baosDevice, Datapoints::Ch_B_State, value);
std::cout << "Channel B: Current state: " << value << std::endl;
baosDevice.registerDPValueCallback(
{
for (const auto& item : values)
{
std::uint16_t id = item.first;
std::cout << "Received datapoint value indication for id " << id << std::endl;
switch (id)
{
case Datapoints::Ch_A_Switch:
onChannelSwitchEvent(baosDevice, Datapoints::Ch_A_State, value);
break;
case Datapoints::Ch_B_Switch:
onChannelSwitchEvent(baosDevice, Datapoints::Ch_B_State, value);
break;
default:
std::cout << "Nothing to do" << std::endl;
}
}
});
std::cout << "Press [Enter] to exit the application ..." << std::endl;
std::getchar();
}
catch (const std::exception& e)
{
std::cerr << "Failed: " << e.what() << std::endl;
return -1;
}
return 0;
}
Specialization for a IP v4 BAOSDevice.
Specialization for a TCP IP v4 BAOSConnection.
Global BAOS protocol defines and types.
Global BAOS SDK function and options.
Groups BAOS binary protocol specific types , defines and classes for Indications, Responses etc.
Definition: Defines.h:32
std::map< std::uint16_t, DatapointValue > DatapointValues
A map with datapoint ids as keys and DatapointValue as values.
Definition: Defines.h:35
wz::baos::Buffer DatapointValue
An type for the DatapointValues.
Definition: Defines.h:33
Global BAOS sdk namespace.
Definition: config.h:62
std::vector< std::uint8_t > Buffer
An alias type for a byte buffer.
Definition: config.h:64
std::map< std::uint16_t, DatapointConfig > DatapointConfigurations
Definition: BaosDeviceDataTypes.h:212
void setBaosLogLevel(wzcpp::LogLevel level)