BeeeOn Gateway  v2020.3.1-2-g6f737dc
Platform to interconnect the IoT world
Public Member Functions | Protected Member Functions
BeeeOn::VirtualDeviceManager Class Reference

#include <VirtualDeviceManager.h>

Inheritance diagram for BeeeOn::VirtualDeviceManager:
BeeeOn::DeviceManager BeeeOn::CommandHandler BeeeOn::CommandSender BeeeOn::DeviceStatusHandler BeeeOn::Loggable BeeeOn::StoppableRunnable

Public Member Functions

void setDevicePoller (DevicePoller::Ptr poller)
 
void run () override
 
void stop () override
 
void setConfigFile (const std::string &path)
 
void installVirtualDevices ()
 
void registerDevice (const VirtualDevice::Ptr virtualDevice)
 
void dispatchNewDevice (VirtualDevice::Ptr device)
 
VirtualDevice::Ptr parseDevice (Poco::AutoPtr< Poco::Util::AbstractConfiguration > cfg)
 
VirtualModule::Ptr parseModule (Poco::AutoPtr< Poco::Util::AbstractConfiguration > cfg, const ModuleID &moduleID)
 
void scheduleAllEntries ()
 
void logDeviceParsed (VirtualDevice::Ptr device)
 
void handleRemoteStatus (const DevicePrefix &prefix, const std::set< DeviceID > &devices, const DeviceStatusHandler::DeviceValues &values) override
 Reschedule virtual devices after updating the remote status.
 
- Public Member Functions inherited from BeeeOn::DeviceManager
 DeviceManager (const DevicePrefix &prefix, const std::initializer_list< std::type_index > &acceptable={})
 
DevicePrefix prefix () const override
 
void setDeviceCache (DeviceCache::Ptr cache)
 
void setDistributor (Poco::SharedPtr< Distributor > distributor)
 
bool accept (const Command::Ptr cmd) override
 
void handle (Command::Ptr cmd, Answer::Ptr answer) override
 
- Public Member Functions inherited from BeeeOn::CommandSender
void setCommandDispatcher (CommandDispatcher *dispatcher)
 
void dispatch (Poco::AutoPtr< Command > cmd, Poco::AutoPtr< Answer > answer)
 
void dispatch (Poco::AutoPtr< Command > cmd)
 
AnswerQueueanswerQueue ()
 

Protected Member Functions

void handleGeneric (const Command::Ptr cmd, Result::Ptr result) override
 
void doListenCommand (const GatewayListenCommand::Ptr)
 
void doDeviceAcceptCommand (const DeviceAcceptCommand::Ptr cmd)
 
void doSetValueCommand (const DeviceSetValueCommand::Ptr cmd)
 
void doUnpairCommand (const DeviceUnpairCommand::Ptr cmd)
 
- Protected Member Functions inherited from BeeeOn::DeviceManager
std::set< DeviceIDwaitRemoteStatus (const Poco::Timespan &timeout)
 Wait until the remote status is delivered or timeout exceeds. DO NOT USE this method, it is intended as a transition mechanism from calling of the deprecated method deviceList(). More...
 
virtual void handleAccept (const DeviceAcceptCommand::Ptr)
 Generic handler of the DeviceAcceptCommand. It might be helpful to override this method in case we need to make some technology-specific check of the device to be accepted. The default implementation simply marks the given device as paired.
 
virtual AsyncWork::Ptr startDiscovery (const Poco::Timespan &timeout)
 Starts device discovery process in a technology-specific way. This method is always called inside a critical section and so its implementation does not have to be thread-safe nor reentrant (unless it cooperates with other threads itself). More...
 
void handleListen (const GatewayListenCommand::Ptr cmd)
 Implements handling of the listen command in a generic way. The method ensures that only 1 thread can execute the discovery process at a time. More...
 
virtual AsyncWork::Ptr startSearch (const Poco::Timespan &timeout, const Poco::Net::IPAddress &address)
 Start searching a device by IP address in a technology-specific way. This method is always called inside a critical section and so its implementation does not have to be thread-safe nor reentrant (unless it cooperates with other threads itself). More...
 
virtual AsyncWork::Ptr startSearch (const Poco::Timespan &timeout, const MACAddress &address)
 Start searching a device by MAC address in a technology-specific way. This method is always called inside a critical section and so its implementation does not have to be thread-safe nor reentrant (unless it cooperates with other threads itself). More...
 
virtual AsyncWork::Ptr startSearch (const Poco::Timespan &timeout, const uint64_t serialNumber)
 Start searching a device by serial number in a technology-specific way. This method is always called inside a critical section and so its implementation does not have to be thread-safe nor reentrant (unless it cooperates with other threads itself). More...
 
void handleSearch (const DeviceSearchCommand::Ptr cmd)
 Implements handling of the search command in a generic way. The method ensures that only 1 thread can exactly the search process at a time. It is also mutual exclusive to the discovery process.
 
virtual AsyncWork< std::set
< DeviceID > >::Ptr 
startUnpair (const DeviceID &id, const Poco::Timespan &timeout)
 Starts device unpair process in a technology-specific way. This method is always called inside a critical section and so its implementation does not have to be thread-safe nor reentrant (unless it cooperates with other threads itself). More...
 
std::set< DeviceIDhandleUnpair (const DeviceUnpairCommand::Ptr cmd)
 Implements handling of the unpair command in a generic way. The method ensures that only 1 thread can execute the unpair process at a time. More...
 
virtual AsyncWork< double >::Ptr startSetValue (const DeviceID &id, const ModuleID &module, const double value, const Poco::Timespan &timeout)
 Starts set-value operation in a technology specific way. The method is always called inside a critical section and so its implementation does not have to be thread-save nor reentrant (unless it cooperates with other threads itself). More...
 
AsyncWork< double >::Ptr startSetValueByMode (const DeviceID &id, const ModuleID &module, const double value, const OpMode &mode, const Poco::Timespan &timeout)
 Call an implementation of startSetValue() based on the given operation mode.
 
virtual AsyncWork< double >::Ptr startSetValueTryHarder (const DeviceID &id, const ModuleID &module, const double value, const Poco::Timespan &timeout)
 Default implementation just calls startSetValue().
 
virtual AsyncWork< double >::Ptr startSetValueRepeatOnFail (const DeviceID &id, const ModuleID &module, const double value, const Poco::Timespan &timeout)
 Default implementation calls startSetValue() again if a Poco::IOException is thrown until timeout exceeds. However, due to asynchronous behaviour, this way of repeating on fail might be inappropriate.
 
void handleSetValue (const DeviceSetValueCommand::Ptr cmd)
 Implements handling of the set-value command in a generic way. The method ensures that only 1 thread can execute set-value process at a time. If the set-value operation succeeds, it ships the set value. More...
 
void ship (const SensorData &sensorData)
 
DeviceCache::Ptr deviceCache () const
 
CancellableSetcancellable ()
 
Poco::Timespan checkDelayedOperation (const std::string &opname, const Poco::Clock &started, const Poco::Timespan &duration) const
 When starting an asynchronous operation, it might happen we sleep too long on a lock because the previous operation did not finished yet. This method performs such checks and also tests for global stop request. If everything is in order it just fixes the duration by the time elapsed by waiting. Otherwise, it throws an exception. More...
 
bool manageUntilFinished (const std::string &opname, AnyAsyncWork::Ptr work, const Poco::Timespan &timeout)
 Manage an AsyncWork after it is started. If it does not finish in the given timeout, it is cancelled explicitly. More...
 
- Protected Member Functions inherited from BeeeOn::Loggable
void setupLogger (Poco::Logger *logger=0) const
 
Poco::Logger & logger () const
 
 Loggable (const ClassInfo &info)
 
 Loggable (const std::type_info &info)
 

Additional Inherited Members

- Public Types inherited from BeeeOn::DeviceManager
typedef Poco::SharedPtr
< DeviceManager
Ptr
 
- Public Types inherited from BeeeOn::DeviceStatusHandler
typedef Poco::SharedPtr
< DeviceStatusHandler
Ptr
 
typedef std::map< DeviceID,
std::map< ModuleID, double > > 
DeviceValues
 
- Public Types inherited from BeeeOn::StoppableRunnable
typedef Poco::SharedPtr
< StoppableRunnable
Ptr
 
- Protected Types inherited from BeeeOn::StoppableRunnable
typedef Poco::SharedPtr
< StoppableRunnable
Ptr
 
- Static Protected Member Functions inherited from BeeeOn::Loggable
static Poco::Logger & forMethod (const char *name)
 
static Poco::Logger & forClass (const ClassInfo &info)
 
static Poco::Logger & forClass (const std::type_info &info)
 
template<typename T >
static Poco::Logger & forInstance (const T *i)
 
static void configureSimple (Poco::Logger &logger, const std::string &level)
 
static void logException (Poco::Logger &logger, const Poco::Message::Priority priority, const Poco::Exception &e, const char *file, size_t line)
 
- Protected Attributes inherited from BeeeOn::DeviceManager
StopControl m_stopControl
 

Detailed Description

Ensures configuration of virtual devices from configuration file virtual-devices.ini and it is able to send NewDeviceCommand to CommandDispatcher when device attempts to pair.

It can send values from modules of registered devices.

It also ensures reaction to commands sent from server:

Member Function Documentation

void BeeeOn::VirtualDeviceManager::dispatchNewDevice ( VirtualDevice::Ptr  device)

Ensures sending of NewDeviceCommand to CommandDispatcher.

void BeeeOn::VirtualDeviceManager::doDeviceAcceptCommand ( const DeviceAcceptCommand::Ptr  cmd)
protected

Reacts to DeviceAcceptCommand. Device has to be stored in map of virtual devices and it has to be unpaired. If these conditions are fulfilled, method inserts device into a calendar, it sets device as paired and it plans next activation (data generation) of this device.

void BeeeOn::VirtualDeviceManager::doListenCommand ( const GatewayListenCommand::Ptr  )
protected

Reacts to GatewayListenCommand. It sends NewDeviceCommand if device is not paired.

void BeeeOn::VirtualDeviceManager::doSetValueCommand ( const DeviceSetValueCommand::Ptr  cmd)
protected

Reacts to DeviceSetValueCommand. Device has to be in map of virtual devices, it has to be sensor and reaction has to be set to success.

void BeeeOn::VirtualDeviceManager::doUnpairCommand ( const DeviceUnpairCommand::Ptr  cmd)
protected

Reacts to DeviceUnpairCommand. Device has to be in map of virtual devices and it has to be paired.

void BeeeOn::VirtualDeviceManager::handleGeneric ( const Command::Ptr  cmd,
Result::Ptr  result 
)
overrideprotectedvirtual

Generic implementation of the handle(). If any device manager needs to override the handle() method, it is more desirable to override handleGeneric().

Reimplemented from BeeeOn::DeviceManager.

void BeeeOn::VirtualDeviceManager::installVirtualDevices ( )

Loads setting of virtual devices from configuration file and stores this information.

void BeeeOn::VirtualDeviceManager::logDeviceParsed ( VirtualDevice::Ptr  device)

Logs information about loaded virtual devices and modules. Detail of information can be selected from possibilities: information, debug, trace.

VirtualDevice::Ptr BeeeOn::VirtualDeviceManager::parseDevice ( Poco::AutoPtr< Poco::Util::AbstractConfiguration >  cfg)

Processes information about virtual device loaded from configuration file.

VirtualModule::Ptr BeeeOn::VirtualDeviceManager::parseModule ( Poco::AutoPtr< Poco::Util::AbstractConfiguration >  cfg,
const ModuleID moduleID 
)

Processes information about virtual module loaded from configuration file.

void BeeeOn::VirtualDeviceManager::registerDevice ( const VirtualDevice::Ptr  virtualDevice)

Inserts item to map of virtual devices if there is no virtual device with given identifier.

void BeeeOn::VirtualDeviceManager::scheduleAllEntries ( )

Plans devices that are in a map of virtual devices and are paired.

void BeeeOn::VirtualDeviceManager::setConfigFile ( const std::string &  path)

Sets path to configuration file.

void BeeeOn::VirtualDeviceManager::stop ( )
overridevirtual

A generic stop implementation to be used by most DeviceManager implementations.

Reimplemented from BeeeOn::DeviceManager.


The documentation for this class was generated from the following files: