| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- /*
- Logic ->
- Contain all Configured Devices
- -> Retrieve Devices from Domotica API
- -> Retrieve Devices from Configuration
- WiFi -> Check for Devices
- Change to Offline
- -> Ping (Internal to WiFi)
- Fail
- -> Update Device to Offline
- Success
- -> NOOP
- Change to Online
- -> Ping (Internal to WiFi)
- Fail
- -> NOOP
- Success
- -> Update Device to Online
- Bluetooth -> Check for Devices
- Change to Offline
- Change to Online
- API -> Poll Devices
- - Who keeps track of the devices?
- Logic?
- Driver?
- //*/
- #include "Logic.h"
- #include <Logging.h>
- #include <json.hpp>
- #include <algorithm>
- #include <iostream>
- #include <sstream>
- namespace PresenceDetection {
- namespace Logic {
- Logic::Logic(const std::string& inventoryURL) :
- m_inventoryURL(inventoryURL)
- {
- }
- Logic::~Logic()
- {
- }
- void Logic::LoadDevicesFromConfiguration()
- {
- }
- void Logic::UpdateDevicesFromInventory()
- {
- try
- {
- Http::HttpRequest request(m_inventoryURL);
- std::string devices = m_httpClient.Open(request);
- nlohmann::json json = nlohmann::json::parse(devices);
- m_dynamicDevices.clear();
- for (auto& element : json)
- {
- int id = std::stoi(element["id"].get<std::string>());
- std::string wifi;
- std::string bluetooth;
- //if (element["wifi"] != "")
- if (element["macaddress"] != "")
- {
- //wifi = element["wifi"];
- wifi = element["macaddress"];
- std::transform(wifi.begin(), wifi.end(), wifi.begin(), ::tolower);
- }
- if (element["bluetooth"] != "")
- {
- bluetooth = element["bluetooth"];
- std::transform(bluetooth.begin(), bluetooth.end(), bluetooth.begin(), ::tolower);
- }
- m_dynamicDevices.push_back(Device::Device(id, wifi, bluetooth));
- }
- }
- catch (const std::exception& e)
- {
- std::stringstream ss;
- ss << "Logic::GetDevicesFromInventory() - Error: " << e.what() << std::endl;
- Logging::Log(Logging::Severity::Error, ss.str());
- }
- }
- void Logic::DumpDevices()
- {
- std::cout << "Static Devices:" << std::endl;
- for (auto& device : m_staticDevices)
- {
- std::cout << "ID: " << device.ID() << std::endl;
- std::cout << "Wifi: " << device.WifiMacAddress() << std::endl;
- std::cout << "Bluetooth: " << device.BluetoothMacAddress() << std::endl;
- std::cout << "Online: " << device.Online() << std::endl;
- std::cout << std::endl;
- }
- std::cout << "Dynamic Devices:" << std::endl;
- for (auto& device : m_dynamicDevices)
- {
- std::cout << "ID: " << device.ID() << std::endl;
- std::cout << "Wifi: " << device.WifiMacAddress() << std::endl;
- std::cout << "Bluetooth: " << device.BluetoothMacAddress() << std::endl;
- std::cout << "Online: " << device.Online() << std::endl;
- std::cout << std::endl;
- }
- }
- } // namespace Logic
- } // namespace PresenceDetection
|