From 5aea8b730b921c05f50419811e78214586d2a432 Mon Sep 17 00:00:00 2001
From: Jochen Vothknecht <jochen3120@gmail.com>
Date: Tue, 7 Jun 2022 08:42:53 +0200
Subject: [PATCH] =?UTF-8?q?Polishing=20things=20=F0=9F=8E=87?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 CLC-qthing/CMakeLists.txt                     |   2 +-
 .../SiliconTorch/FxCyanF-configureFromNVS.cpp |  16 +-
 CLC-qthing/SiliconTorch/NVSExplorer.cpp       | 208 +++++++++---------
 CLC-qthing/SiliconTorch/NVSExplorer.hpp       |  84 +++----
 CLC-qthing/SpiderLib/ObjectTypes.hpp          |  10 +
 CLC-qthing/SpiderLib/Types.hpp                |   4 +
 6 files changed, 166 insertions(+), 158 deletions(-)
 create mode 100644 CLC-qthing/SpiderLib/ObjectTypes.hpp
 create mode 100644 CLC-qthing/SpiderLib/Types.hpp

diff --git a/CLC-qthing/CMakeLists.txt b/CLC-qthing/CMakeLists.txt
index 2daa6ed..8449b2a 100644
--- a/CLC-qthing/CMakeLists.txt
+++ b/CLC-qthing/CMakeLists.txt
@@ -3,7 +3,7 @@ idf_component_register(
   "." "SiliconTorch" "SpiderLib"
 
   INCLUDE_DIRS
-  "."
+  "." "SpiderLib"
 
   REQUIRES
   main
diff --git a/CLC-qthing/SiliconTorch/FxCyanF-configureFromNVS.cpp b/CLC-qthing/SiliconTorch/FxCyanF-configureFromNVS.cpp
index 20fa96f..f4c5dd7 100644
--- a/CLC-qthing/SiliconTorch/FxCyanF-configureFromNVS.cpp
+++ b/CLC-qthing/SiliconTorch/FxCyanF-configureFromNVS.cpp
@@ -8,8 +8,6 @@
 // #include <functional>
 
 // ESP32 specific
-#include "nvs.h"
-#include "nvs_flash.h"
 #include "esp_log.h"
 
 // misc
@@ -20,6 +18,7 @@
 // #include <qthing/mqtt_common.hpp>
 
 // project specific
+#include "NVSExplorer.hpp"
 #include "SpiderLib/NumberTypes.hpp"
 // #include "FxVSync.hpp"
 // #include "CyanBus.hpp"
@@ -41,18 +40,13 @@ namespace SiliconTorch {
       }
 
 
-      nvs_flash_init();
-
-      nvs_handle_t nvs;
-      nvs_open(nvsNameSpace, NVS_READONLY, &nvs);
-
+      std::string ns = "fxCyan";
 
       u32 frq = 0;
-      nvs_get_u32(nvs, "frequency", &frq);
-
       u8 res = 0;
-      nvs_get_u8(nvs, "resolution", &res);
 
+      frq = NVSExplorer::NVSExplorer::instance().getUnsignedInt(ns, "frequency", frq);
+      res = NVSExplorer::NVSExplorer::instance().getUnsignedInt(ns, "resolution", res);
 
       if (frq == 0 || res == 0) {
         ESP_LOGW(TAG, "No config for CyanLight found");  // TODO: Log-Level Debug
@@ -69,7 +63,7 @@ namespace SiliconTorch {
         char channel[32];
         snprintf(channel, 32, "ch%d_gpio", ch);
 
-        nvs_get_i8(nvs, channel, &gpio);
+        //nvs_get_i8(nvs, channel, &gpio);
 
         if (gpio >= 0) {
 
diff --git a/CLC-qthing/SiliconTorch/NVSExplorer.cpp b/CLC-qthing/SiliconTorch/NVSExplorer.cpp
index 0f3c3de..65ffb10 100644
--- a/CLC-qthing/SiliconTorch/NVSExplorer.cpp
+++ b/CLC-qthing/SiliconTorch/NVSExplorer.cpp
@@ -16,8 +16,8 @@
 // #include "driver/uart.h"
 
 // project specific
+#include <Types.hpp>
 #include <SpiderLib/Util.hpp>
-#include "SpiderLib/NumberTypes.hpp"
 
 // qthing stuff
 #include <qthing>
@@ -52,12 +52,12 @@ namespace SiliconTorch {
 
       u16 deviceTopicLEN = requestTopic("").length();
 
-      auto wrapMessageHandler = [deviceTopicLEN](std::function<void(std::vector<std::string>&, qthing::multipart_message_t)> handler) {
+      auto wrapMessageHandler = [deviceTopicLEN](std::function<void(std::vector<str>&, qthing::multipart_message_t)> handler) {
         return [handler, deviceTopicLEN](qthing::multipart_message_t msg) {
           if (msg.length == msg.total_length && msg.offset == 0) {
 
-            std::string localTopic(msg.topic.c_str() + deviceTopicLEN);
-            std::vector<std::string> topicParts = SpiderLib::Util::split(localTopic, '/');
+            str localTopic(msg.topic.c_str() + deviceTopicLEN);
+            std::vector<str> topicParts = SpiderLib::Util::split(localTopic, '/');
 
             handler(topicParts, msg);
           } else {
@@ -70,19 +70,19 @@ namespace SiliconTorch {
 
       // TODO: publish error if NS not found…?!
       qthing::add_binary_message_callback(requestTopic("ls/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
         
-        std::string delimiter = " ";
+        str delimiter = " ";
         char* buffer = NULL;
 
         if (msg.length > 0) {
           buffer = new char[msg.length + 1];
           snprintf(buffer, msg.length + 1, "%s", msg.payload);
-          delimiter = std::string(buffer);
+          delimiter = str(buffer);
         }
 
         auto keys = listKeys(topic[1]);
-        std::string msgOut = SpiderLib::Util::join(keys, delimiter);
+        str msgOut = SpiderLib::Util::join(keys, delimiter);
 
         qthing::publish_message(responseTopic(topic[1]), msgOut);
 
@@ -92,19 +92,19 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("ls"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
         
-        std::string delimiter = " ";
+        str delimiter = " ";
         char* buffer = NULL;
 
         if (msg.length > 0) {
           buffer = new char[msg.length + 1];
           snprintf(buffer, msg.length + 1, "%s", msg.payload);
-          delimiter = std::string(buffer);
+          delimiter = str(buffer);
         }
 
         auto nameSpaces = listNamespaces();
-        std::string msgOut = SpiderLib::Util::join(nameSpaces, delimiter);
+        str msgOut = SpiderLib::Util::join(nameSpaces, delimiter);
 
         qthing::publish_message(responseTopic("ls"), msgOut);
 
@@ -114,7 +114,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("rm/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
         this->rmKey(topic[1], topic[2]);
 
         // publish error…?
@@ -123,7 +123,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("get_float/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
         float value = this->getFloat(topic[1], topic[2]);
 
         if (!std::isnan(value)) {
@@ -131,7 +131,7 @@ namespace SiliconTorch {
           char buffer[64];
           snprintf(buffer, 64, "%f", value);
 
-          qthing::publish_message(responseTopic("get_float", topic[1], topic[2]), std::string(buffer));
+          qthing::publish_message(responseTopic("get_float", topic[1], topic[2]), str(buffer));
         } else {
           // publish error…?
 
@@ -142,7 +142,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("get_double/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
         double value = this->getDouble(topic[1], topic[2]);
 
         if (!std::isnan(value)) {
@@ -150,7 +150,7 @@ namespace SiliconTorch {
           char buffer[64];
           snprintf(buffer, 64, "%f", value);
 
-          qthing::publish_message(responseTopic("get_double", topic[1], topic[2]), std::string(buffer));
+          qthing::publish_message(responseTopic("get_double", topic[1], topic[2]), str(buffer));
         } else {
           // publish error…?
 
@@ -161,7 +161,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("set_float/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         char* buffer = new char[msg.length + 1];
         snprintf(buffer, msg.length + 1, "%s", msg.payload);
@@ -178,7 +178,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("set_double/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         char* buffer = new char[msg.length + 1];
         snprintf(buffer, msg.length + 1, "%s", msg.payload);
@@ -195,7 +195,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("get_u8/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         nvs_handle_t nvs;
         if ( nvs_open(topic[1].c_str(), NVS_READONLY, &nvs) == ESP_OK ) {
@@ -205,7 +205,7 @@ namespace SiliconTorch {
 
             char buffer[32];
             snprintf(buffer, 32, "%d", value);
-            qthing::publish_message(responseTopic("get_u8", topic[1], topic[2]), std::string(buffer));
+            qthing::publish_message(responseTopic("get_u8", topic[1], topic[2]), str(buffer));
 
           } else {
             // publish error…?
@@ -218,7 +218,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("get_u16/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         nvs_handle_t nvs;
         if ( nvs_open(topic[1].c_str(), NVS_READONLY, &nvs) == ESP_OK ) {
@@ -228,7 +228,7 @@ namespace SiliconTorch {
 
             char buffer[32];
             snprintf(buffer, 32, "%d", value);
-            qthing::publish_message(responseTopic("get_u16", topic[1], topic[2]), std::string(buffer));
+            qthing::publish_message(responseTopic("get_u16", topic[1], topic[2]), str(buffer));
 
           } else {
             // publish error…?
@@ -241,7 +241,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("get_u32/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         nvs_handle_t nvs;
         if ( nvs_open(topic[1].c_str(), NVS_READONLY, &nvs) == ESP_OK ) {
@@ -251,7 +251,7 @@ namespace SiliconTorch {
 
             char buffer[32];
             snprintf(buffer, 32, "%d", value);
-            qthing::publish_message(responseTopic("get_u32", topic[1], topic[2]), std::string(buffer));
+            qthing::publish_message(responseTopic("get_u32", topic[1], topic[2]), str(buffer));
 
           } else {
             // publish error…?
@@ -264,7 +264,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("get_u64/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         nvs_handle_t nvs;
         if ( nvs_open(topic[1].c_str(), NVS_READONLY, &nvs) == ESP_OK ) {
@@ -274,7 +274,7 @@ namespace SiliconTorch {
 
             char buffer[32];
             snprintf(buffer, 32, "%lld", value);
-            qthing::publish_message(responseTopic("get_u64", topic[1], topic[2]), std::string(buffer));
+            qthing::publish_message(responseTopic("get_u64", topic[1], topic[2]), str(buffer));
 
           } else {
             // publish error…?
@@ -287,7 +287,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("get_i8/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         nvs_handle_t nvs;
         if ( nvs_open(topic[1].c_str(), NVS_READONLY, &nvs) == ESP_OK ) {
@@ -297,7 +297,7 @@ namespace SiliconTorch {
 
             char buffer[32];
             snprintf(buffer, 32, "%d", value);
-            qthing::publish_message(responseTopic("get_i8", topic[1], topic[2]), std::string(buffer));
+            qthing::publish_message(responseTopic("get_i8", topic[1], topic[2]), str(buffer));
 
           } else {
             // publish error…?
@@ -310,7 +310,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("get_i16/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         nvs_handle_t nvs;
         if ( nvs_open(topic[1].c_str(), NVS_READONLY, &nvs) == ESP_OK ) {
@@ -320,7 +320,7 @@ namespace SiliconTorch {
 
             char buffer[32];
             snprintf(buffer, 32, "%d", value);
-            qthing::publish_message(responseTopic("get_i16", topic[1], topic[2]), std::string(buffer));
+            qthing::publish_message(responseTopic("get_i16", topic[1], topic[2]), str(buffer));
 
           } else {
             // publish error…?
@@ -333,7 +333,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("get_i32/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         nvs_handle_t nvs;
         if ( nvs_open(topic[1].c_str(), NVS_READONLY, &nvs) == ESP_OK ) {
@@ -343,7 +343,7 @@ namespace SiliconTorch {
 
             char buffer[32];
             snprintf(buffer, 32, "%d", value);
-            qthing::publish_message(responseTopic("get_i32", topic[1], topic[2]), std::string(buffer));
+            qthing::publish_message(responseTopic("get_i32", topic[1], topic[2]), str(buffer));
 
           } else {
             // publish error…?
@@ -356,7 +356,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("get_i64/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         nvs_handle_t nvs;
         if ( nvs_open(topic[1].c_str(), NVS_READONLY, &nvs) == ESP_OK ) {
@@ -366,7 +366,7 @@ namespace SiliconTorch {
 
             char buffer[32];
             snprintf(buffer, 32, "%lld", value);
-            qthing::publish_message(responseTopic("get_i64", topic[1], topic[2]), std::string(buffer));
+            qthing::publish_message(responseTopic("get_i64", topic[1], topic[2]), str(buffer));
 
           } else {
             // publish error…?
@@ -386,12 +386,12 @@ namespace SiliconTorch {
 
       u16 deviceTopicLEN = requestTopic("").length();
 
-      auto wrapMessageHandler = [deviceTopicLEN](std::function<void(std::vector<std::string>&, qthing::multipart_message_t)> handler) {
+      auto wrapMessageHandler = [deviceTopicLEN](std::function<void(std::vector<str>&, qthing::multipart_message_t)> handler) {
         return [handler, deviceTopicLEN](qthing::multipart_message_t msg) {
           if (msg.length == msg.total_length && msg.offset == 0) {
 
-            std::string localTopic(msg.topic.c_str() + deviceTopicLEN);
-            std::vector<std::string> topicParts = SpiderLib::Util::split(localTopic, '/');
+            str localTopic(msg.topic.c_str() + deviceTopicLEN);
+            std::vector<str> topicParts = SpiderLib::Util::split(localTopic, '/');
 
             handler(topicParts, msg);
           } else {
@@ -403,7 +403,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("set_u8/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         char* buffer = new char[msg.length + 1];
         snprintf(buffer, msg.length + 1, "%s", msg.payload);
@@ -421,7 +421,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("set_u16/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         char* buffer = new char[msg.length + 1];
         snprintf(buffer, msg.length + 1, "%s", msg.payload);
@@ -439,7 +439,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("set_u32/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         char* buffer = new char[msg.length + 1];
         snprintf(buffer, msg.length + 1, "%s", msg.payload);
@@ -457,7 +457,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("set_u64/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         char* buffer = new char[msg.length + 1];
         snprintf(buffer, msg.length + 1, "%s", msg.payload);
@@ -472,7 +472,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("set_i8/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         char* buffer = new char[msg.length + 1];
         snprintf(buffer, msg.length + 1, "%s", msg.payload);
@@ -493,7 +493,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("set_i16/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         char* buffer = new char[msg.length + 1];
         snprintf(buffer, msg.length + 1, "%s", msg.payload);
@@ -514,7 +514,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("set_i32/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         char* buffer = new char[msg.length + 1];
         snprintf(buffer, msg.length + 1, "%s", msg.payload);
@@ -535,7 +535,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("set_i64/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         char* buffer = new char[msg.length + 1];
         snprintf(buffer, msg.length + 1, "%s", msg.payload);
@@ -551,7 +551,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("get_strLen/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         size_t testValue = 1337000;  // way too big for NVS
         size_t length = getStringLength(topic[1], topic[2], testValue);
@@ -561,7 +561,7 @@ namespace SiliconTorch {
           char buffer[32];
           std::snprintf(&buffer[0], 32, "%d", length);
 
-          std::string value(&buffer[0]);
+          str value(&buffer[0]);
           qthing::publish_message(responseTopic("get_strLen", topic[1], topic[2]), value);
         } else {
           // publish error…?
@@ -572,13 +572,13 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("get_str/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         size_t testValue = 1337000;  // way too big for NVS
 
         if ( getStringLength(topic[1], topic[2], testValue) < testValue ) {  // key exists and is of type string
 
-          std::string value = getString(topic[1], topic[2]);
+          str value = getString(topic[1], topic[2]);
 
           qthing::publish_message(responseTopic("get_str", topic[1], topic[2]), value);
         } else {
@@ -590,11 +590,11 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("set_str/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
 
         char* buffer = new char[msg.length + 1];
         snprintf(buffer, msg.length + 1, "%s", msg.payload);
-        std::string value(buffer);
+        str value(buffer);
 
         if ( this->setString(topic[1], topic[2], value) )
              ESP_LOGI(TAG, "Set  namespace[ %s ]  key[ %s ]  to str[ %s ]",             topic[1].c_str(), topic[2].c_str(), value.c_str());  // TODO: do we REALLY wanna log the payloads?!
@@ -604,7 +604,7 @@ namespace SiliconTorch {
 
 
       qthing::add_binary_message_callback(requestTopic("get_type/+/+"), wrapMessageHandler(
-        [&](std::vector<std::string>& topic, qthing::multipart_message_t msg) {
+        [&](std::vector<str>& topic, qthing::multipart_message_t msg) {
         qthing::publish_message(responseTopic("get_type", topic[1], topic[2]), getTypeStr(topic[1], topic[2]));
       } ));
 
@@ -613,7 +613,7 @@ namespace SiliconTorch {
 
 
 
-    u8 NVSExplorer::getU8(const std::string& nameSpace, const std::string& key, u8 defaultValue) {
+    u8 NVSExplorer::getU8(const str& nameSpace, const str& key, u8 defaultValue) {
 
       u8 value = defaultValue;
 
@@ -626,7 +626,7 @@ namespace SiliconTorch {
       return value;
     }
 
-    u16 NVSExplorer::getU16(const std::string& nameSpace, const std::string& key, u16 defaultValue) {
+    u16 NVSExplorer::getU16(const str& nameSpace, const str& key, u16 defaultValue) {
 
       u16 value = defaultValue;
 
@@ -639,7 +639,7 @@ namespace SiliconTorch {
       return value;
     }
 
-    u32 NVSExplorer::getU32(const std::string& nameSpace, const std::string& key, u32 defaultValue) {
+    u32 NVSExplorer::getU32(const str& nameSpace, const str& key, u32 defaultValue) {
 
       u32 value = defaultValue;
 
@@ -652,7 +652,7 @@ namespace SiliconTorch {
       return value;
     }
 
-    u64 NVSExplorer::getU64(const std::string& nameSpace, const std::string& key, u64 defaultValue) {
+    u64 NVSExplorer::getU64(const str& nameSpace, const str& key, u64 defaultValue) {
 
       u64 value = defaultValue;
 
@@ -665,7 +665,7 @@ namespace SiliconTorch {
       return value;
     }
 
-    i8 NVSExplorer::getI8(const std::string& nameSpace, const std::string& key, i8 defaultValue) {
+    i8 NVSExplorer::getI8(const str& nameSpace, const str& key, i8 defaultValue) {
 
       i8 value = defaultValue;
 
@@ -678,7 +678,7 @@ namespace SiliconTorch {
       return value;
     }
 
-    i16 NVSExplorer::getI16(const std::string& nameSpace, const std::string& key, i16 defaultValue) {
+    i16 NVSExplorer::getI16(const str& nameSpace, const str& key, i16 defaultValue) {
 
       i16 value = defaultValue;
 
@@ -691,7 +691,7 @@ namespace SiliconTorch {
       return value;
     }
 
-    i32 NVSExplorer::getI32(const std::string& nameSpace, const std::string& key, i32 defaultValue) {
+    i32 NVSExplorer::getI32(const str& nameSpace, const str& key, i32 defaultValue) {
 
       i32 value = defaultValue;
 
@@ -704,7 +704,7 @@ namespace SiliconTorch {
       return value;
     }
 
-    i64 NVSExplorer::getI64(const std::string& nameSpace, const std::string& key, i64 defaultValue) {
+    i64 NVSExplorer::getI64(const str& nameSpace, const str& key, i64 defaultValue) {
 
       i64 value = defaultValue;
 
@@ -719,7 +719,7 @@ namespace SiliconTorch {
 
 
 
-    bool NVSExplorer::setU8(const std::string& nameSpace, const std::string& key, u8 value) {
+    bool NVSExplorer::setU8(const str& nameSpace, const str& key, u8 value) {
       bool success = true;
 
       nvs_handle_t nvs;
@@ -734,7 +734,7 @@ namespace SiliconTorch {
       }
     }
 
-    bool NVSExplorer::setU16(const std::string& nameSpace, const std::string& key, u16 value) {
+    bool NVSExplorer::setU16(const str& nameSpace, const str& key, u16 value) {
       bool success = true;
 
       nvs_handle_t nvs;
@@ -749,7 +749,7 @@ namespace SiliconTorch {
       }
     }
 
-    bool NVSExplorer::setU32(const std::string& nameSpace, const std::string& key, u32 value) {
+    bool NVSExplorer::setU32(const str& nameSpace, const str& key, u32 value) {
       bool success = true;
 
       nvs_handle_t nvs;
@@ -764,7 +764,7 @@ namespace SiliconTorch {
       }
     }
 
-    bool NVSExplorer::setU64(const std::string& nameSpace, const std::string& key, u64 value) {
+    bool NVSExplorer::setU64(const str& nameSpace, const str& key, u64 value) {
       bool success = true;
 
       nvs_handle_t nvs;
@@ -779,7 +779,7 @@ namespace SiliconTorch {
       }
     }
 
-    bool NVSExplorer::setI8(const std::string& nameSpace, const std::string& key, i8 value) {
+    bool NVSExplorer::setI8(const str& nameSpace, const str& key, i8 value) {
       bool success = true;
 
       nvs_handle_t nvs;
@@ -794,7 +794,7 @@ namespace SiliconTorch {
       }
     }
 
-    bool NVSExplorer::setI16(const std::string& nameSpace, const std::string& key, i16 value) {
+    bool NVSExplorer::setI16(const str& nameSpace, const str& key, i16 value) {
       bool success = true;
 
       nvs_handle_t nvs;
@@ -809,7 +809,7 @@ namespace SiliconTorch {
       }
     }
 
-    bool NVSExplorer::setI32(const std::string& nameSpace, const std::string& key, i32 value) {
+    bool NVSExplorer::setI32(const str& nameSpace, const str& key, i32 value) {
       bool success = true;
 
       nvs_handle_t nvs;
@@ -824,7 +824,7 @@ namespace SiliconTorch {
       }
     }
 
-    bool NVSExplorer::setI64(const std::string& nameSpace, const std::string& key, i64 value) {
+    bool NVSExplorer::setI64(const str& nameSpace, const str& key, i64 value) {
       bool success = true;
 
       nvs_handle_t nvs;
@@ -841,7 +841,7 @@ namespace SiliconTorch {
 
 
 
-    float NVSExplorer::getFloat(const std::string& nameSpace, const std::string& key) {
+    float NVSExplorer::getFloat(const str& nameSpace, const str& key) {
 
       float value  = std::nanf("1337");
       u32*  valptr = reinterpret_cast<u32*>(&value);
@@ -855,7 +855,7 @@ namespace SiliconTorch {
       return value;
     }
 
-    double NVSExplorer::getDouble(const std::string& nameSpace, const std::string& key) {
+    double NVSExplorer::getDouble(const str& nameSpace, const str& key) {
 
       double value  = std::nan("1337");
       u64*   valptr = reinterpret_cast<u64*>(&value);
@@ -870,7 +870,7 @@ namespace SiliconTorch {
     }
 
 
-    bool NVSExplorer::setFloat(const std::string& nameSpace, const std::string& key, float value) {
+    bool NVSExplorer::setFloat(const str& nameSpace, const str& key, float value) {
 
       bool success = true;
       u32  intval  = reinterpret_cast<u32*>(&value)[0];
@@ -887,7 +887,7 @@ namespace SiliconTorch {
       }
     }
 
-    bool NVSExplorer::setDouble(const std::string& nameSpace, const std::string& key, double value) {
+    bool NVSExplorer::setDouble(const str& nameSpace, const str& key, double value) {
 
       bool success = true;
       u64  intval  = reinterpret_cast<u64*>(&value)[0];
@@ -905,7 +905,7 @@ namespace SiliconTorch {
     }
 
 
-    size_t NVSExplorer::getStringLength(const std::string& nameSpace, const std::string& key, size_t defaultValue) {
+    size_t NVSExplorer::getStringLength(const str& nameSpace, const str& key, size_t defaultValue) {
 
       size_t value = defaultValue;
 
@@ -919,7 +919,7 @@ namespace SiliconTorch {
     }
 
 
-    std::string NVSExplorer::getString(const std::string& nameSpace, const std::string& key, const std::string& defaultValue) {
+    str NVSExplorer::getString(const str& nameSpace, const str& key, const str& defaultValue) {
 
       nvs_handle_t nvs;
       if ( nvs_open(nameSpace.c_str(), NVS_READONLY, &nvs) == ESP_OK ) {
@@ -934,7 +934,7 @@ namespace SiliconTorch {
 
           nvs_close(nvs);
 
-          std::string out(&buffer[0]);
+          str out(&buffer[0]);
           return out;
         }
       }
@@ -943,7 +943,7 @@ namespace SiliconTorch {
     }
 
 
-    bool NVSExplorer::setString(const std::string& nameSpace, const std::string& key, const std::string& value) {
+    bool NVSExplorer::setString(const str& nameSpace, const str& key, const str& value) {
 
       bool success = true;
 
@@ -961,7 +961,7 @@ namespace SiliconTorch {
 
 
 
-    void NVSExplorer::rmKey(const std::string& nameSpace, const std::string& key) {
+    void NVSExplorer::rmKey(const str& nameSpace, const str& key) {
       nvs_handle_t _nvs;
       ESP_LOGW(TAG, "rmKey() -> %s / %s", nameSpace.c_str(), key.c_str());
       ESP_LOGW(TAG, "open() -> %s", esp_err_to_name( nvs_open(nameSpace.c_str(), NVS_READWRITE, &_nvs) ));
@@ -970,9 +970,9 @@ namespace SiliconTorch {
       ESP_LOGW(TAG, "erase²() -> %s", esp_err_to_name( nvs_erase_key(_nvs, key.c_str()) ));
     }
 
-    std::set<std::string> NVSExplorer::listKeys(const std::string& nameSpace) {
+    std::set<str> NVSExplorer::listKeys(const str& nameSpace) {
 
-      std::set<std::string> keys;
+      std::set<str> keys;
 
       nvs_iterator_t it = nvs_entry_find("nvs", nameSpace.c_str(), NVS_TYPE_ANY);
 
@@ -989,9 +989,9 @@ namespace SiliconTorch {
       return keys;
     }
 
-    std::set<std::string> NVSExplorer::listNamespaces() {
+    std::set<str> NVSExplorer::listNamespaces() {
 
-      std::set<std::string> namespaces;
+      std::set<str> namespaces;
 
       nvs_iterator_t it = nvs_entry_find("nvs", NULL, NVS_TYPE_ANY);
 
@@ -1009,7 +1009,7 @@ namespace SiliconTorch {
     }
 
 
-    i64 NVSExplorer::getSignedInt(const std::string& nameSpace, const std::string& key, i64 defaultValue) {
+    i64 NVSExplorer::getSignedInt(const str& nameSpace, const str& key, i64 defaultValue) {
 
       // Lets first test & evaluate the other function before duplication………
 
@@ -1017,7 +1017,7 @@ namespace SiliconTorch {
     }
 
 
-    u64 NVSExplorer::getUnsignedInt(const std::string& nameSpace, const std::string& key, u64 defaultValue) {
+    u64 NVSExplorer::getUnsignedInt(const str& nameSpace, const str& key, u64 defaultValue) {
 
       u64 value = defaultValue;
       nvs_type_t entryType = NVS_TYPE_ANY;
@@ -1063,14 +1063,14 @@ namespace SiliconTorch {
     }
 
 
-    bool NVSExplorer::setSignedInt(const std::string& nameSpace, const std::string& key, i64 value, nvs_type_t entryType) {
+    bool NVSExplorer::setSignedInt(const str& nameSpace, const str& key, i64 value, nvs_type_t entryType) {
 
       // TODO: implementation!
 
       return false;
     }
 
-    bool NVSExplorer::setUnsignedInt(const std::string& nameSpace, const std::string& key, u64 value, nvs_type_t entryType) {
+    bool NVSExplorer::setUnsignedInt(const str& nameSpace, const str& key, u64 value, nvs_type_t entryType) {
 
       bool result = false;
 
@@ -1105,7 +1105,7 @@ namespace SiliconTorch {
     /**
       * Converts IDF NVS types to strings
       */
-    std::string NVSExplorer::type2str(nvs_type_t typ) {
+    str NVSExplorer::type2str(nvs_type_t typ) {
       switch (typ) {
         case NVS_TYPE_U8:   return "u8";
         case NVS_TYPE_U16:  return "u16";
@@ -1125,7 +1125,7 @@ namespace SiliconTorch {
     /**
       * Get the type of the entry, NVS_TYPE_ANY if not found
       */
-    nvs_type_t NVSExplorer::getType(const std::string& nameSpace, const std::string& key) {
+    nvs_type_t NVSExplorer::getType(const str& nameSpace, const str& key) {
 
       nvs_type_t entryType = NVS_TYPE_ANY;
 
@@ -1151,7 +1151,7 @@ namespace SiliconTorch {
       * Like getType but converts them to string
       * non-existing keys are converted to `void` instead of `any`
       */
-    std::string NVSExplorer::getTypeStr(const std::string& nameSpace, const std::string& key) {
+    str NVSExplorer::getTypeStr(const str& nameSpace, const str& key) {
 
       bool entryFound = false;
       nvs_type_t entryType = NVS_TYPE_ANY;
@@ -1172,7 +1172,7 @@ namespace SiliconTorch {
         it = nvs_entry_next(it);
       }
 
-      std::string typ;
+      str typ;
 
       if (entryFound) typ = type2str(entryType);
       else            typ = "void";
@@ -1181,34 +1181,34 @@ namespace SiliconTorch {
     }
 
 
-    std::string NVSExplorer::deviceTopic(const std::string& suffix) {
-      return std::string(DEVICE_NAMESPACE + "NVS/") + suffix;
+    str NVSExplorer::deviceTopic(const str& suffix) {
+      return str(DEVICE_NAMESPACE + "NVS/") + suffix;
     }
 
 
-    std::string NVSExplorer::requestTopic(const std::string& cmd) {
-      return deviceTopic( std::string("rq/") + cmd );
+    str NVSExplorer::requestTopic(const str& cmd) {
+      return deviceTopic( str("rq/") + cmd );
     }
 
-    std::string NVSExplorer::requestTopic(const std::string& cmd, const std::string& nameSpace) {
-      return deviceTopic( std::string("rq/") + cmd + std::string("/") + nameSpace );
+    str NVSExplorer::requestTopic(const str& cmd, const str& nameSpace) {
+      return deviceTopic( str("rq/") + cmd + str("/") + nameSpace );
     }
 
-    std::string NVSExplorer::requestTopic(const std::string& cmd, const std::string& nameSpace, const std::string& key) {
-      return deviceTopic( std::string("rq/") + cmd + std::string("/") + nameSpace + std::string("/") + key );
+    str NVSExplorer::requestTopic(const str& cmd, const str& nameSpace, const str& key) {
+      return deviceTopic( str("rq/") + cmd + str("/") + nameSpace + str("/") + key );
     }
 
 
-    std::string NVSExplorer::responseTopic(const std::string& cmd) {
-      return deviceTopic( std::string("rs/") + cmd );
+    str NVSExplorer::responseTopic(const str& cmd) {
+      return deviceTopic( str("rs/") + cmd );
     }
 
-    std::string NVSExplorer::responseTopic(const std::string& cmd, const std::string& nameSpace) {
-      return deviceTopic( std::string("rs/") + cmd + std::string("/") + nameSpace );
+    str NVSExplorer::responseTopic(const str& cmd, const str& nameSpace) {
+      return deviceTopic( str("rs/") + cmd + str("/") + nameSpace );
     }
 
-    std::string NVSExplorer::responseTopic(const std::string& cmd, const std::string& nameSpace, const std::string& key) {
-      return deviceTopic( std::string("rs/") + cmd + std::string("/") + nameSpace + std::string("/") + key );
+    str NVSExplorer::responseTopic(const str& cmd, const str& nameSpace, const str& key) {
+      return deviceTopic( str("rs/") + cmd + str("/") + nameSpace + str("/") + key );
     }
 
   }
diff --git a/CLC-qthing/SiliconTorch/NVSExplorer.hpp b/CLC-qthing/SiliconTorch/NVSExplorer.hpp
index a281f6b..44bf20f 100644
--- a/CLC-qthing/SiliconTorch/NVSExplorer.hpp
+++ b/CLC-qthing/SiliconTorch/NVSExplorer.hpp
@@ -15,7 +15,7 @@
 // #include "driver/uart.h"
 
 // project specific
-#include "SpiderLib/NumberTypes.hpp"
+#include <Types.hpp>
 // #include "SpiderLib/ManagedMutex.hpp"
 
 // qthing stuff
@@ -34,74 +34,74 @@ namespace SiliconTorch {
 
       public:
 
-        std::set<std::string> listNamespaces();
-        std::set<std::string> listKeys(const std::string& nameSpace);
+        std::set<str> listNamespaces();
+        std::set<str> listKeys(const str& nameSpace);
 
-        void rmKey(const std::string& nameSpace, const std::string& key);
+        void rmKey(const str& nameSpace, const str& key);
 
 
-        bool setU8(const  std::string& nameSpace, const std::string& key, u8  value);
-        bool setI8(const  std::string& nameSpace, const std::string& key, i8  value);
+        bool setU8(const  str& nameSpace, const str& key, u8  value);
+        bool setI8(const  str& nameSpace, const str& key, i8  value);
 
-        bool setU16(const std::string& nameSpace, const std::string& key, u16 value);
-        bool setI16(const std::string& nameSpace, const std::string& key, i16 value);
+        bool setU16(const str& nameSpace, const str& key, u16 value);
+        bool setI16(const str& nameSpace, const str& key, i16 value);
 
-        bool setU32(const std::string& nameSpace, const std::string& key, u32 value);
-        bool setI32(const std::string& nameSpace, const std::string& key, i32 value);
+        bool setU32(const str& nameSpace, const str& key, u32 value);
+        bool setI32(const str& nameSpace, const str& key, i32 value);
 
-        bool setU64(const std::string& nameSpace, const std::string& key, u64 value);
-        bool setI64(const std::string& nameSpace, const std::string& key, i64 value);
+        bool setU64(const str& nameSpace, const str& key, u64 value);
+        bool setI64(const str& nameSpace, const str& key, i64 value);
 
 
-        u8  getU8(const  std::string& nameSpace, const std::string& key, u8  defaultValue = 0);
-        i8  getI8(const  std::string& nameSpace, const std::string& key, i8  defaultValue = 0);
+        u8  getU8(const  str& nameSpace, const str& key, u8  defaultValue = 0);
+        i8  getI8(const  str& nameSpace, const str& key, i8  defaultValue = 0);
 
-        u16 getU16(const std::string& nameSpace, const std::string& key, u16 defaultValue = 0);
-        i16 getI16(const std::string& nameSpace, const std::string& key, i16 defaultValue = 0);
+        u16 getU16(const str& nameSpace, const str& key, u16 defaultValue = 0);
+        i16 getI16(const str& nameSpace, const str& key, i16 defaultValue = 0);
 
-        u32 getU32(const std::string& nameSpace, const std::string& key, u32 defaultValue = 0);
-        i32 getI32(const std::string& nameSpace, const std::string& key, i32 defaultValue = 0);
+        u32 getU32(const str& nameSpace, const str& key, u32 defaultValue = 0);
+        i32 getI32(const str& nameSpace, const str& key, i32 defaultValue = 0);
 
-        u64 getU64(const std::string& nameSpace, const std::string& key, u64 defaultValue = 0);
-        i64 getI64(const std::string& nameSpace, const std::string& key, i64 defaultValue = 0);
+        u64 getU64(const str& nameSpace, const str& key, u64 defaultValue = 0);
+        i64 getI64(const str& nameSpace, const str& key, i64 defaultValue = 0);
 
 
-        float  getFloat(const std::string& nameSpace, const std::string& key);
-        double getDouble(const std::string& nameSpace, const std::string& key);
+        float  getFloat(const str& nameSpace, const str& key);
+        double getDouble(const str& nameSpace, const str& key);
 
-        bool setFloat(const std::string& nameSpace, const std::string& key, float value);
-        bool setDouble(const std::string& nameSpace, const std::string& key, double value);
+        bool setFloat(const str& nameSpace, const str& key, float value);
+        bool setDouble(const str& nameSpace, const str& key, double value);
 
         // Gets the key regardless of its type in flash
-        i64  getSignedInt(const std::string& nameSpace, const std::string& key, i64 defaultValue = 0);
-        u64 getUnsignedInt(const std::string& nameSpace, const std::string& key, u64 defaultValue = 0);
+        i64  getSignedInt(const str& nameSpace, const str& key, i64 defaultValue = 0);
+        u64 getUnsignedInt(const str& nameSpace, const str& key, u64 defaultValue = 0);
 
         // TODO: ⮦ Both unimplemented atm ⮧ 
-        bool setSignedInt(const std::string& nameSpace, const std::string& key, i64 value, nvs_type_t entryType = NVS_TYPE_ANY);
-        bool setUnsignedInt(const std::string& nameSpace, const std::string& key, u64 value, nvs_type_t entryType = NVS_TYPE_ANY);
+        bool setSignedInt(const str& nameSpace, const str& key, i64 value, nvs_type_t entryType = NVS_TYPE_ANY);
+        bool setUnsignedInt(const str& nameSpace, const str& key, u64 value, nvs_type_t entryType = NVS_TYPE_ANY);
 
 
-        size_t getStringLength(const std::string& nameSpace, const std::string& key, size_t defaultValue = 0);
-        std::string getString(const std::string& nameSpace, const std::string& key, const std::string& defaultValue = "");
-        // size_t getLongString(const std::string& nameSpace, const std::string& key, char* const buffer);
+        size_t getStringLength(const str& nameSpace, const str& key, size_t defaultValue = 0);
+        str getString(const str& nameSpace, const str& key, const str& defaultValue = "");
+        // size_t getLongString(const str& nameSpace, const str& key, char* const buffer);
 
-        bool setString(const std::string& nameSpace, const std::string& key, const std::string& value);
+        bool setString(const str& nameSpace, const str& key, const str& value);
 
 
-        std::string type2str(nvs_type_t typ);
-        nvs_type_t getType(const std::string& nameSpace, const std::string& key);
-        std::string getTypeStr(const std::string& nameSpace, const std::string& key);
+        str type2str(nvs_type_t typ);
+        nvs_type_t getType(const str& nameSpace, const str& key);
+        str getTypeStr(const str& nameSpace, const str& key);
 
 
-        std::string deviceTopic(const std::string& suffix);
+        str deviceTopic(const str& suffix);
 
-        std::string requestTopic(const std::string& cmd);
-        std::string requestTopic(const std::string& cmd, const std::string& nameSpace);
-        std::string requestTopic(const std::string& cmd, const std::string& nameSpace, const std::string& key);
+        str requestTopic(const str& cmd);
+        str requestTopic(const str& cmd, const str& nameSpace);
+        str requestTopic(const str& cmd, const str& nameSpace, const str& key);
 
-        std::string responseTopic(const std::string& cmd);
-        std::string responseTopic(const std::string& cmd, const std::string& nameSpace);
-        std::string responseTopic(const std::string& cmd, const std::string& nameSpace, const std::string& key);
+        str responseTopic(const str& cmd);
+        str responseTopic(const str& cmd, const str& nameSpace);
+        str responseTopic(const str& cmd, const str& nameSpace, const str& key);
 
         // ⬇⬇ Singleton stuff ⬇⬇
 
diff --git a/CLC-qthing/SpiderLib/ObjectTypes.hpp b/CLC-qthing/SpiderLib/ObjectTypes.hpp
new file mode 100644
index 0000000..a9a2ddb
--- /dev/null
+++ b/CLC-qthing/SpiderLib/ObjectTypes.hpp
@@ -0,0 +1,10 @@
+#pragma once
+
+#include <string>
+
+
+
+using str = std::string;
+
+
+// TODO: more useful types…?
diff --git a/CLC-qthing/SpiderLib/Types.hpp b/CLC-qthing/SpiderLib/Types.hpp
new file mode 100644
index 0000000..f183fbf
--- /dev/null
+++ b/CLC-qthing/SpiderLib/Types.hpp
@@ -0,0 +1,4 @@
+#pragma once
+
+#include <NumberTypes.hpp>
+#include <ObjectTypes.hpp>
-- 
GitLab