Add documentation, start extending serialization

Temperature sensors are still missing
This commit is contained in:
2022-09-24 21:32:01 +02:00
parent 5109e3b93a
commit 4f6a1dfc4f
5 changed files with 39 additions and 14 deletions

View File

@@ -17,9 +17,13 @@ using json = nlohmann::json;
class Serializer { class Serializer {
public: public:
Serializer(); Serializer();
void Serialize(std::vector<std::shared_ptr<Fan>> fans); void SerializeFans(std::vector<std::shared_ptr<Fan>> fans);
std::vector<std::shared_ptr<Fan>> std::vector<std::shared_ptr<Fan>>
Deserialize(std::vector<std::shared_ptr<Sensor>> availableSensors); DeserializeFans(std::vector<std::shared_ptr<Sensor>> availableSensors);
void SerializeTempSensors(std::vector<std::shared_ptr<Sensor>> senors);
std::vector<std::shared_ptr<Sensor>>
DeserializeTempSensors(std::vector<std::shared_ptr<Sensor>> availableSensors);
private: private:
void WriteJson(json o); void WriteJson(json o);

View File

@@ -18,22 +18,18 @@ Serializer::Serializer() {
} }
} }
void Serializer::Serialize(vector<shared_ptr<Fan>> fans) { void Serializer::SerializeFans(vector<shared_ptr<Fan>> fans) {
json fansArr;
for (auto f : fans) {
fansArr.emplace_back(f->toJson());
}
json obj; json obj;
obj["fans"] = fansArr; for (auto f : fans) {
obj["fans"].push_back(f->toJson());
}
WriteJson(obj); WriteJson(obj);
} }
vector<shared_ptr<Fan>> vector<shared_ptr<Fan>>
Serializer::Deserialize(vector<shared_ptr<Sensor>> availableSensors) { Serializer::DeserializeFans(vector<shared_ptr<Sensor>> availableSensors) {
vector<shared_ptr<Fan>> mapping; vector<shared_ptr<Fan>> mapping;
// Create a for the sensors first, then searching becomes cheaper // Create a for the sensors first, then searching becomes cheaper
@@ -57,11 +53,35 @@ Serializer::Deserialize(vector<shared_ptr<Sensor>> availableSensors) {
} }
void Serializer::WriteJson(json o) { void Serializer::WriteJson(json o) {
json obj;
if (fs::exists(fs::path(SERIALIZATION_DIR) / FANS_JSON_FILENAME)) {
auto obj = ReadJson();
}
for (auto &[key, value] : o.items()) {
obj[key] = value;
}
ofstream ostrm(fs::path(SERIALIZATION_DIR) / FANS_JSON_FILENAME, ios::trunc); ofstream ostrm(fs::path(SERIALIZATION_DIR) / FANS_JSON_FILENAME, ios::trunc);
ostrm << o.dump(2) << "\n"; ostrm << obj.dump(2) << "\n";
} }
json Serializer::ReadJson() { json Serializer::ReadJson() {
ifstream istrm(fs::path(SERIALIZATION_DIR) / FANS_JSON_FILENAME); ifstream istrm(fs::path(SERIALIZATION_DIR) / FANS_JSON_FILENAME);
return json::parse(istrm); return json::parse(istrm);
} }
void Serializer::SerializeTempSensors(vector<shared_ptr<Sensor>> sensors) {
json obj;
for (auto s : sensors) {
obj["tempSensors"].push_back(s->toJson());
}
WriteJson(obj);
}
vector<shared_ptr<Sensor>>
DeserializeTempSensors(vector<shared_ptr<Sensor>> availableSensors) {
return vector<shared_ptr<Sensor>>();
}

View File

@@ -26,10 +26,10 @@ int main() {
std::vector<std::shared_ptr<Fan>> fans; std::vector<std::shared_ptr<Fan>> fans;
if (fs::exists(fs::path(SERIALIZATION_DIR) / FANS_JSON_FILENAME)) { if (fs::exists(fs::path(SERIALIZATION_DIR) / FANS_JSON_FILENAME)) {
fans = s.Deserialize(pwmSensors); fans = s.DeserializeFans(pwmSensors);
} else { } else {
fans = m.createMapping(pwmSensors, controls); fans = m.createMapping(pwmSensors, controls);
s.Serialize(fans); s.SerializeFans(fans);
} }
for (auto f : fans) { for (auto f : fans) {

View File

@@ -0,0 +1 @@
<mxfile host="app.diagrams.net" modified="2022-09-24T19:31:05.408Z" agent="5.0 (X11)" etag="F8WQQZ1xw24pL79IvZh_" version="20.2.2" type="device"><diagram id="bxDzWbPEviacuxaYKsiD" name="Page-1">5VjbctowEP0aZtqHZHwJhjyCQ9JOQ4fJjfRRsRdbrWwRWdzy9V3ZMsYYUichgbYvIB1pJXH2nLVFw3aj+YUg47DPfWANy/DnDfusYVnmqd3CL4UsNGKa7QwJBPU1VgDX9Ak0aGh0Qn1IShMl50zScRn0eByDJ0sYEYLPytNGnJV3HZMAKsC1R1gVHVJfhhnabhoF/gVoEOY7m4YeiUg+WQNJSHw+W4HsXsN2Becya0VzF5hiL+clizvfMro8mIBY1gl4bDnd/sgd3j3IaWfY+za8fXo8Mu1smSlhE/2LB8N+Qy3V1MeWi5wL8JEa3eVChjzgMWG9Au0KPol9UBsa2CvmXHI+RtBE8CdIudB5JhPJEQplxPQozKm8V+HHuH/W/aFXU+2z+WpnkXdiKRb3+Qqqk8Yct5p5v4hLe0Wg31Eawa7HSJJQLwPPKcsPlJGgfvlW2jWU8Inw4BmuHS1fIgKQz+VkKQ60FfAI8MgYJ4ARSaflcxAt72A5r1AANrQIXiAIp6KHhuUwPG7Xp1NsBqp5TmKc404EnkaP4mYrEyrSKYShSJ2FVML1mKR0zbBylEWgjwBCwvx51qss6QDb0fLVdcfODTsrTGzmzgxXDOwY70RsXtBWmO3cXeBS/c69+vz6fb9+W7WbWc9uOmhpuPpui3kMJasZu7Vaq6bV2vu0mln12g1EYxBETgTsVQ2rpXepjD+qofVaOXxA8a2rCGefimjVKb4ljWwuvpWYa4gTLvKBB7E+9cCqt2OUq7fZ2nv1tv4pr669KB3We1L7b7Bqu45VXR6NeYJu+V+MegCvWRvy8haSCKNBjG2Rnb3LyAOwgUoq5Qr3kCkQOKB4pHhvvFybEFHfTx2fT+joFaUyejfBnWkc3KSut4wCudJkWcZuUmVaazXVrKbKOtmQquUFdue5qtbUq4G6e+Ym2Jo340PEbZ6sMWbXFHfzvQjbdll3OZZrzhgcHmmWsW/STupU6vRGW6vEIjWyzFqC3P8ClzPU7PJqM8JH4xqUl5JKycgrwrJUbEpTOZE7yJTVXn/JalYy5WxIlP1upbtZJ1NHOONmImI+GqlWKCAJ1Z96dZ+wKr5P5qrMjAFeFpfWdvz+5A5uG5arnEcSyFogvePPr35wv11VDEZy75qquH/Ti/vpbtyP3eLP03Rs5T9ou/cb</diagram></mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB