7#ifndef CORE_PROTOCOL_OPEN62541_OPEN62541_HPP_
8#define CORE_PROTOCOL_OPEN62541_OPEN62541_HPP_
23#pragma message("ifw-core/protocol is deprecated; migrate to uatools (ualib). " \
24 "The protocol/base and protocol/open62541 libraries are kept " \
25 "for compatibility only and will be removed in a future release.")
36#include <log4cplus/logger.h>
37#include <fmt/format.h>
46#if __has_include(<open62541.h>)
49#include <open62541/server.h>
50#include <open62541/plugin/log_stdout.h>
61using namespace std::literals::chrono_literals;
138 return fmt::format(
"OPC UA config: use_anonymous_login={}, username={}, "
139 "secure_channel_lifetime={}, certificate_file={}, private_key_file={}, "
140 "validate_server_certificate={}, timeout={}, session_timeout={}, "
141 "connectivity_check_interval={}, outstanding_publish_requests={}",
159 static constexpr std::chrono::milliseconds NETWORK_TIMEOUT = 2000ms;
168 Open62541(
const std::optional<std::string> opcua_config_file = std::nullopt);
177 virtual void Connect(
const std::string& device,
178 const std::string& address);
208 virtual void Rpc(
const std::string& obj,
209 const std::string& proc,
246 virtual void StartMonitorItems(
const std::vector<std::string>& item_vector)
override;
293 virtual void HandleDataChange(
const std::shared_ptr<MonitoredItem> monitor_item,
294 UA_DataValue* value);
305 void UpdateState(UA_SecureChannelState channel_state,
306 UA_SessionState session_state,
307 UA_StatusCode recovery_status);
324 bool IsConnected(
const std::string& address);
329 void InactivityAcions();
340 UA_StatusCode CreateSubscription(
bool renew_monitor_items =
false);
345 void RemoveSubscription();
353 void GetNodeId(std::string value,
int& ns, std::string& name);
361 static void InactivityCallback(UA_Client* client);
368 static void StateCallback(UA_Client* client,
369 UA_SecureChannelState channelState,
370 UA_SessionState sessionState,
371 UA_StatusCode recoveryStatus);
373 void LoadOpcuaConfig();
379 std::string m_endpoint;
385 inline static std::map<std::string, std::pair<std::string, Open62541*>> m_registration_map;
388 std::string m_device;
391 std::map<std::string, MonitoredItemPtr> m_map_monitor_items;
403 std::string m_opcua_config_file;
407 log4cplus::Logger m_logger;
410 inline static std::mutex m_connection_map_mutex;
412 static std::shared_ptr<OpcuaConnection> GetConnection(
const std::string& address);
Definition dispatcher.hpp:16
The IDataChangeHandler class Defines an entry point for data change notifications.
Definition iDataChangeHandler.hpp:36
bool IsServerReady(UA_Client *client)
Check if server reports ready/running state.
Definition open62541.cpp:950
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:785
virtual void StopMonitorItem(const std::string &item) override
Stop monitoring an attribute.
Definition open62541.cpp:719
void SetEndpoint(const std::string &endpoint)
Set endpoint to the connection.
Definition open62541.cpp:795
virtual void HandleDataChange(const std::shared_ptr< MonitoredItem > monitor_item, UA_DataValue *value)
Handle data changes.
Definition open62541.cpp:807
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:389
virtual void Connect(const std::string &device, const std::string &address)
Establish the connection to the OPCUA server.
Definition open62541.cpp:100
std::string GetEndpoint() const
Get endpoint of the connection.
Definition open62541.cpp:801
virtual void HandleSessionChanges(bool status)
Handle changes in the OPCUA session.
Definition open62541.cpp:825
virtual ~Open62541()
Definition open62541.cpp:62
virtual void Write(const protocol::base::VectorVariant ¶ms) override
Performs a Write operation.
Definition open62541.cpp:310
void UpdateState(UA_SecureChannelState channel_state, UA_SessionState session_state, UA_StatusCode recovery_status)
Update connection state.
Definition open62541.cpp:934
Open62541(const std::optional< std::string > opcua_config_file=std::nullopt)
Constructor.
Definition open62541.cpp:56
virtual void StartMonitorItems(const std::vector< std::string > &item_vector) override
Start monitoring a vector of attributes.
Definition open62541.cpp:650
virtual void Read(protocol::base::VectorVariant ¶ms) override
Performs a Read operation.
Definition open62541.cpp:229
UA_StatusCode ResumeSubscriptions()
Resume subscriptions for all connections.
Definition open62541.cpp:75
virtual void StartMonitorItem(const std::string &item) override
Start monitoring an attribute.
Definition open62541.cpp:589
static std::map< std::string, std::shared_ptr< OpcuaConnection > > m_connection_map
Definition open62541.hpp:317
virtual void Disconnect()
Disconnects from the server.
Definition open62541.cpp:723
std::vector< PairVariant > VectorVariant
Definition iComm.hpp:45
std::variant< bool, int, unsigned int, short, double, std::string, unsigned short, float, int8_t, uint8_t, std::vector< bool >, std::vector< int >, std::vector< unsigned int >, std::vector< short >, std::vector< double >, std::vector< float >, std::vector< std::string > > Variant
Definition iComm.hpp:24
Definition iDataChangeHandler.hpp:27
std::shared_ptr< Subscription > SubscriptionPtr
Definition subscription.hpp:33
Definition open62541.hpp:92
std::string private_key_file
Definition open62541.hpp:109
int session_timeout
Definition open62541.hpp:114
std::string certificate_file
Definition open62541.hpp:108
bool validate_server_certificate
Definition open62541.hpp:110
int outstanding_publish_requests
Definition open62541.hpp:118
int secure_channel_lifetime
Definition open62541.hpp:106
virtual std::string ToString() const
Definition open62541.hpp:137
std::string username
Definition open62541.hpp:99
std::string password
Definition open62541.hpp:100
int timeout
Definition open62541.hpp:112
bool use_anonymous_login
Definition open62541.hpp:98
int connectivity_check_interval
Definition open62541.hpp:116
Connection Struct.
Definition open62541.hpp:73
std::atomic< bool > m_connected
Definition open62541.hpp:75
UA_SecureChannelState m_last_channel_state
Definition open62541.hpp:82
std::atomic< bool > m_lost_connection
Definition open62541.hpp:76
UA_SessionState m_session_state
Definition open62541.hpp:85
UA_Client * m_client
Definition open62541.hpp:74
UA_StatusCode m_last_connect_status
Definition open62541.hpp:86
UA_ExtensionObject m_user_identity_ext_obj
Definition open62541.hpp:79
UA_UserNameIdentityToken * m_user_identity
Definition open62541.hpp:78
UA_SessionState m_last_session_state
Definition open62541.hpp:84
std::mutex m_mutex
Definition open62541.hpp:88
UA_SecureChannelState m_channel_state
Definition open62541.hpp:83
UA_StatusCode m_connect_status
Definition open62541.hpp:87
UA_StatusCode m_last_error
Definition open62541.hpp:81