8#ifndef CORE_PROTOCOL_OPEN62541_OPEN62541_HPP_
9#define CORE_PROTOCOL_OPEN62541_OPEN62541_HPP_
20#include <log4cplus/logger.h>
21#include <fmt/format.h>
30#if __has_include(<open62541.h>)
33#include <open62541/server.h>
34#include <open62541/plugin/log_stdout.h>
45using namespace std::literals::chrono_literals;
48class IDataChangeHandler;
122 return fmt::format(
"OPC UA config: use_anonymous_login={}, username={}, "
123 "secure_channel_lifetime={}, certificate_file={}, private_key_file={}, "
124 "validate_server_certificate={}, timeout={}, session_timeout={}, "
125 "connectivity_check_interval={}, outstanding_publish_requests={}",
143 static constexpr std::chrono::milliseconds NETWORK_TIMEOUT = 2000ms;
152 Open62541(
const std::optional<std::string> opcua_config_file = std::nullopt);
161 virtual void Connect(
const std::string& device,
162 const std::string& address);
192 virtual void Rpc(
const std::string& obj,
193 const std::string& proc,
230 virtual void StartMonitorItems(
const std::vector<std::string>& item_vector)
override;
277 virtual void HandleDataChange(
const std::shared_ptr<MonitoredItem> monitor_item,
278 UA_DataValue* value);
289 void UpdateState(UA_SecureChannelState channel_state,
290 UA_SessionState session_state,
291 UA_StatusCode recovery_status);
303 bool IsConnected(
const std::string& address);
308 void InactivityAcions();
319 UA_StatusCode CreateSubscription(
bool renew_monitor_items =
false);
324 void RemoveSubscription();
332 void GetNodeId(std::string value,
int& ns, std::string& name);
340 static void InactivityCallback(UA_Client* client);
347 static void StateCallback(UA_Client* client,
348 UA_SecureChannelState channelState,
349 UA_SessionState sessionState,
350 UA_StatusCode recoveryStatus);
352 void LoadOpcuaConfig();
358 std::string m_endpoint;
364 inline static std::map<std::string, std::pair<std::string, Open62541*>> m_registration_map;
367 std::string m_device;
370 std::map<std::string, MonitoredItemPtr> m_map_monitor_items;
382 std::string m_opcua_config_file;
386 log4cplus::Logger m_logger;
Definition dispatcher.hpp:17
The IDataChangeHandler class Defines an entry point for data change notifications.
Definition iDataChangeHandler.hpp:37
The Open62541 class.
Definition open62541.hpp:141
virtual void RegisterCB(protocol::base::Dispatcher< protocol::base::VectorVariant & > &dispatcher, protocol::base::Dispatcher<> &failure, protocol::base::Dispatcher<> &normal)
Registers internal and external callbacks.
Definition open62541.cpp:915
virtual void StopMonitorItem(const std::string &item) override
Stop monitoring an attribute.
Definition open62541.cpp:849
void SetEndpoint(const std::string &endpoint)
Set endpoint to the connection.
Definition open62541.cpp:925
virtual void HandleDataChange(const std::shared_ptr< MonitoredItem > monitor_item, UA_DataValue *value)
Handle data changes.
Definition open62541.cpp:937
virtual void Rpc(const std::string &obj, const std::string &proc, const protocol::base::VectorVariant ¶ms, protocol::base::Variant &result) override
Executes a RPC.
Definition open62541.cpp:517
virtual void Connect(const std::string &device, const std::string &address)
Establish the connection to the OPCUA server.
Definition open62541.cpp:235
std::string GetEndpoint() const
Get endpoint of the connection.
Definition open62541.cpp:931
virtual void HandleSessionChanges(bool status)
Handle changes in the OPCUA session.
Definition open62541.cpp:955
virtual ~Open62541()
Definition open62541.cpp:197
virtual void Write(const protocol::base::VectorVariant ¶ms) override
Performs a Write operation.
Definition open62541.cpp:438
void UpdateState(UA_SecureChannelState channel_state, UA_SessionState session_state, UA_StatusCode recovery_status)
Update connection state.
Definition open62541.cpp:1064
Open62541(const std::optional< std::string > opcua_config_file=std::nullopt)
Constructor.
Definition open62541.cpp:191
virtual void StartMonitorItems(const std::vector< std::string > &item_vector) override
Start monitoring a vector of attributes.
Definition open62541.cpp:780
virtual void Read(protocol::base::VectorVariant ¶ms) override
Performs a Read operation.
Definition open62541.cpp:357
UA_StatusCode ResumeSubscriptions()
Resume subscriptions for all connections.
Definition open62541.cpp:210
virtual void StartMonitorItem(const std::string &item) override
Start monitoring an attribute.
Definition open62541.cpp:719
static std::map< std::string, std::shared_ptr< OpcuaConnection > > m_connection_map
Definition open62541.hpp:296
virtual void Disconnect()
Disconnects from the server.
Definition open62541.cpp:853
boost::variant< bool, int, unsigned int, short, double, std::string, unsigned short, float, int8_t, uint8_t > Variant
Definition iComm.hpp:24
std::vector< PairVariant > VectorVariant
Definition iComm.hpp:56
taskPoll class header file.
Definition iDataChangeHandler.hpp:28
std::shared_ptr< Subscription > SubscriptionPtr
Definition subscription.hpp:34
Definition open62541.hpp:76
std::string private_key_file
Definition open62541.hpp:93
int session_timeout
Definition open62541.hpp:98
std::string certificate_file
Definition open62541.hpp:92
bool validate_server_certificate
Definition open62541.hpp:94
int outstanding_publish_requests
Definition open62541.hpp:102
int secure_channel_lifetime
Definition open62541.hpp:90
virtual std::string ToString() const
Definition open62541.hpp:121
std::string username
Definition open62541.hpp:83
std::string password
Definition open62541.hpp:84
int timeout
Definition open62541.hpp:96
bool use_anonymous_login
Definition open62541.hpp:82
int connectivity_check_interval
Definition open62541.hpp:100
Connection Struct.
Definition open62541.hpp:57
std::atomic< bool > m_connected
Definition open62541.hpp:59
UA_SecureChannelState m_last_channel_state
Definition open62541.hpp:66
std::atomic< bool > m_lost_connection
Definition open62541.hpp:60
UA_SessionState m_session_state
Definition open62541.hpp:69
UA_Client * m_client
Definition open62541.hpp:58
UA_StatusCode m_last_connect_status
Definition open62541.hpp:70
UA_ExtensionObject m_user_identity_ext_obj
Definition open62541.hpp:63
UA_UserNameIdentityToken * m_user_identity
Definition open62541.hpp:62
UA_SessionState m_last_session_state
Definition open62541.hpp:68
std::mutex m_mutex
Definition open62541.hpp:72
UA_SecureChannelState m_channel_state
Definition open62541.hpp:67
UA_StatusCode m_connect_status
Definition open62541.hpp:71
UA_StatusCode m_last_error
Definition open62541.hpp:65