Skip to content

Commit

Permalink
Clean up Status page item interface
Browse files Browse the repository at this point in the history
  • Loading branch information
mairas committed Oct 5, 2024
1 parent 397c7ee commit da67018
Show file tree
Hide file tree
Showing 7 changed files with 117 additions and 137 deletions.
6 changes: 3 additions & 3 deletions src/sensesp/net/web/base_command_handler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ void add_http_restart_handler(HTTPServer* server) {
void add_http_info_handler(HTTPServer* server) {
HTTPRequestHandler* info_handler =
new HTTPRequestHandler(1 << HTTP_GET, "/api/info", [](httpd_req_t* req) {
auto ui_outputs = UIOutputBase::get_ui_outputs();
auto status_page_items = StatusPageItemBase::get_status_page_items();

JsonDocument json_doc;
JsonArray info_items = json_doc.to<JsonArray>();

for (auto info_item = ui_outputs->begin();
info_item != ui_outputs->end(); ++info_item) {
for (auto info_item = status_page_items->begin();
info_item != status_page_items->end(); ++info_item) {
info_items.add(info_item->second->as_json());
}

Expand Down
7 changes: 7 additions & 0 deletions src/sensesp/ui/status_page_item.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#include "status_page_item.h"

namespace sensesp {

std::map<String, StatusPageItemBase*> StatusPageItemBase::status_page_items_;

} // namespace sensesp
59 changes: 59 additions & 0 deletions src/sensesp/ui/status_page_item.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#ifndef SENSESP_UI_UI_OUTPUT_H
#define SENSESP_UI_UI_OUTPUT_H

#include <ArduinoJson.h>
#include <functional>
#include <map>

#include "Arduino.h"
#include "sensesp/system/observablevalue.h"
#include "sensesp/system/valueconsumer.h"
#include "sensesp/system/valueproducer.h"

namespace sensesp {

constexpr char kUIOutputDefaultGroup[] = "Default";
constexpr int kUIOutputDefaultOrder = 1000;

class StatusPageItemBase {
public:
StatusPageItemBase(String name, String group, int order)
: name_(name), group_(group), order_(order) {}

String& get_name() { return name_; }

virtual JsonDocument as_json() = 0;

static const std::map<String, StatusPageItemBase*>* get_status_page_items() {
return &status_page_items_;
}

protected:
String name_;
String group_ = kUIOutputDefaultGroup;
int order_ = kUIOutputDefaultOrder;
static std::map<String, StatusPageItemBase*> status_page_items_;
};

template <typename T>
class StatusPageItem : public StatusPageItemBase, public ObservableValue<T> {
public:
StatusPageItem(String name, T& value, String group, int order)
: StatusPageItemBase(name, group, order), ObservableValue<T>(value) {
ui_outputs_[name] = this;
}

protected:
virtual JsonDocument as_json() override{
JsonDocument obj;
obj["name"] = name_;
obj["value"] = get();
obj["group"] = group_;
obj["order"] = order_;
return obj;
}
};

} // namespace sensesp

#endif
7 changes: 0 additions & 7 deletions src/sensesp/ui/ui_output.cpp

This file was deleted.

93 changes: 0 additions & 93 deletions src/sensesp/ui/ui_output.h

This file was deleted.

26 changes: 26 additions & 0 deletions src/sensesp_app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,32 @@ void SensESPApp::setup() {
if (button_gpio_pin_ != -1) {
button_handler_ = new ButtonHandler(button_gpio_pin_);
}

// connect status page items
connect_status_page_items();
}

void SensESPApp::connect_status_page_items() {
this->hostname_->connect_to(this->hostname_ui_output_);
this->event_loop_.onRepeat(
4999, [this]() { wifi_ssid_ui_output_->set(WiFi.SSID()); });
this->event_loop_.onRepeat(
4998, [this]() { free_memory_ui_output_->set(ESP.getFreeHeap()); });
this->event_loop_.onRepeat(
4997, [this]() { wifi_rssi_ui_output_->set(WiFi.RSSI()); });
this->event_loop_.onRepeat(4996, [this]() {
sk_server_address_ui_output_->set(ws_client_->get_server_address());
});
this->event_loop_.onRepeat(4995, [this]() {
sk_server_port_ui_output_->set(ws_client_->get_server_port());
});
this->event_loop_.onRepeat(4994, [this]() {
sk_server_connection_ui_output_->set(ws_client_->get_connection_status());
});
ws_client_->get_delta_tx_count_producer().connect_to(
delta_tx_count_ui_output_);
ws_client_->get_delta_rx_count_producer().connect_to(
delta_rx_count_ui_output_);
}

ObservableValue<String>* SensESPApp::get_hostname_observable() {
Expand Down
56 changes: 22 additions & 34 deletions src/sensesp_app.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ class SensESPApp : public SensESPBaseApp {
}

void setup();
void connect_status_page_items();

String ssid_ = "";
String wifi_client_password_ = "";
Expand All @@ -140,40 +141,27 @@ class SensESPApp : public SensESPBaseApp {
"SenseESP version", kSensESPVersion, "Software", 1900);
UIOutput<String>* build_info_ui_output_ = new UIOutput<String>(
"Build date", __DATE__ " " __TIME__, "Software", 2000);
UILambdaOutput<String>* hostname_ui_output_ = new UILambdaOutput<String>(
"Hostname", [this]() { return this->hostname_->get(); }, "Network", 500);
UIOutput<String>* mac_address_ui_output_ =
new UIOutput<String>("MAC Address", WiFi.macAddress(), "Network", 1100);
UILambdaOutput<String>* wifi_ssid_ui_output_ = new UILambdaOutput<String>(
"SSID", [this]() { return WiFi.SSID(); }, "Network", 1200);
UILambdaOutput<String>* free_memory_ui_output_ = new UILambdaOutput<String>(
"Free memory (bytes)", []() { return String(ESP.getFreeHeap()); }, "System",
1250);
UILambdaOutput<int8_t>* wifi_rssi_ui_output_ = new UILambdaOutput<int8_t>(
"WiFi signal strength (dB)", [this]() { return WiFi.RSSI(); }, "Network",
1300);
UILambdaOutput<String>* sk_server_address_ui_output_ =
new UILambdaOutput<String>(
"Signal K server address",
[this]() { return ws_client_->get_server_address(); }, "Signal K",
1400);
UILambdaOutput<uint16_t>* sk_server_port_ui_output_ =
new UILambdaOutput<uint16_t>(
"Signal K server port",
[this]() { return ws_client_->get_server_port(); }, "Signal K", 1500);
UILambdaOutput<String>* sk_server_connection_ui_output_ =
new UILambdaOutput<String>(
"SK connection status",
[this]() { return ws_client_->get_connection_status(); }, "Signal K",
1600);
UILambdaOutput<int>* delta_tx_count_ui_output_ = new UILambdaOutput<int>(
"SK Delta TX count",
[this]() { return ws_client_->get_delta_tx_count_producer().get(); },
"Signal K", 1700);
UILambdaOutput<int>* delta_rx_count_ui_output_ = new UILambdaOutput<int>(
"SK Delta RX count",
[this]() { return ws_client_->get_delta_rx_count_producer().get(); },
"Signal K", 1800);
StatusPageItem<String>* hostname_ui_output_ =
new StatusPageItem<String>("Hostname", "", "Network", 500);
StatusPageItem<String>* mac_address_ui_output_ = new StatusPageItem<String>(
"MAC Address", WiFi.macAddress(), "Network", 1100);
StatusPageItem<String>* wifi_ssid_ui_output_ =
new StatusPageItem<String>("SSID", "", "Network", 1200);
StatusPageItem<int>* free_memory_ui_output_ =
new StatusPageItem<int>("Free memory (bytes)", 0, "System", 1250);
StatusPageItem<int8_t>* wifi_rssi_ui_output_ = new StatusPageItem<int8_t>(
"WiFi signal strength (dB)", -128, "Network", 1300);
StatusPageItem<String>* sk_server_address_ui_output_ =
new StatusPageItem<String>("Signal K server address", "", "Signal K",
1400);
StatusPageItem<uint16_t>* sk_server_port_ui_output_ =
new StatusPageItem<uint16_t>("Signal K server port", 0, "Signal K", 1500);
StatusPageItem<String>* sk_server_connection_ui_output_ =
new StatusPageItem<String>("SK connection status", "", "Signal K", 1600);
StatusPageItem<int>* delta_tx_count_ui_output_ =
new StatusPageItem<int>("SK Delta TX count", 0, "Signal K", 1700);
StatusPageItem<int>* delta_rx_count_ui_output_ =
new StatusPageItem<int>("SK Delta RX count", 0, "Signal K", 1800);

friend class WebServer;
friend class SensESPAppBuilder;
Expand Down

0 comments on commit da67018

Please sign in to comment.