/* 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 #include #include #include #include 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 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