remove test fuck that

This commit is contained in:
2025-12-14 15:14:12 +01:00
parent 787dc8f1ae
commit e5e123f6f8
2 changed files with 0 additions and 339 deletions

View File

@@ -1,162 +0,0 @@
#include <cstdint>
#include <fstream>
#include <iostream>
#include <string>
struct GpuMetricsHeader_t {
uint16_t structure_size;
uint8_t format_revision;
uint8_t content_revision;
};
struct GpuMetrics_v1_1_t {
uint16_t temperature_edge;
uint16_t temperature_hotspot;
uint16_t temperature_mem;
uint16_t temperature_vrgfx;
uint16_t temperature_vrsoc;
uint16_t temperature_vrmem;
uint16_t average_gfx_activity;
uint16_t average_umc_activity;
uint16_t average_mm_activity;
uint16_t average_socket_power;
uint64_t energy_accumulator;
uint64_t system_clock_counter;
uint16_t average_gfxclk_frequency;
uint16_t average_socclk_frequency;
uint16_t average_uclk_frequency;
uint16_t average_vclk0_frequency;
uint16_t average_dclk0_frequency;
uint16_t average_vclk1_frequency;
uint16_t average_dclk1_frequency;
uint16_t current_gfxclk;
uint16_t current_socclk;
uint16_t current_uclk;
uint16_t current_vclk0;
uint16_t current_dclk0;
uint16_t current_vclk1;
uint16_t current_dclk1;
uint32_t throttle_status;
uint16_t current_fan_speed;
uint16_t pcie_link_width;
uint16_t pcie_link_speed;
uint16_t padding;
uint32_t gfx_activity_acc;
uint32_t mem_activity_acc;
uint16_t temperature_hbm;
};
struct GpuMetrics_v1_3_t {
uint16_t temperature_edge;
uint16_t temperature_hotspot;
uint16_t temperature_mem;
uint16_t temperature_vrgfx;
uint16_t temperature_vrsoc;
uint16_t temperature_vrmem;
uint16_t average_gfx_activity;
uint16_t average_umc_activity;
uint16_t average_mm_activity;
uint16_t average_socket_power;
uint64_t energy_accumulator;
uint64_t system_clock_counter;
uint16_t average_gfxclk_frequency;
uint16_t average_socclk_frequency;
uint16_t average_uclk_frequency;
uint16_t average_vclk0_frequency;
uint16_t average_dclk0_frequency;
uint16_t average_vclk1_frequency;
uint16_t average_dclk1_frequency;
uint16_t current_gfxclk;
uint16_t current_socclk;
uint16_t current_uclk;
uint16_t current_vclk0;
uint16_t current_dclk0;
uint16_t current_vclk1;
uint16_t current_dclk1;
uint32_t throttle_status;
uint16_t current_fan_speed;
uint16_t pcie_link_width;
uint16_t pcie_link_speed;
uint16_t padding;
uint32_t gfx_activity_acc;
uint32_t mem_activity_acc;
uint16_t temperature_hbm;
uint64_t firmware_timestamp;
uint16_t voltage_soc;
uint16_t voltage_gfx;
uint16_t voltage_mem;
uint8_t padding1;
};
GpuMetricsHeader_t getGpuMetricsRev(std::string path) {
GpuMetricsHeader_t header;
std::ifstream f(path, std::ios::binary);
if (f.good()) {
f.read(reinterpret_cast<char *>(&header), sizeof(header));
std::cout << "[GpuMetrics] Read GpuMetrics format v" << std::to_string(header.format_revision) << "_" << std::to_string(header.content_revision) << std::endl;
} else {
std::cerr << "[GpuMetrics] Error reading gpu metrics header" << std::endl;
header.structure_size = 0;
}
return header;
}
auto getGpuMetrics(GpuMetricsHeader_t h, std::string path) {
GpuMetrics_v1_3_t gpu;
if (h.format_revision == 1 && h.content_revision == 3) {
std::ifstream f(path, std::ios::binary);
if (f.good()) {
f.ignore(sizeof(h)); // skip header
f.read(reinterpret_cast<char *>(&gpu), sizeof(gpu));
}
} else {
std::cout << "[GpuMetrics] read failed, unsupported format" << std::endl;
}
return gpu;
}
int main(int argc, char *argv[]) {
std::string m = "/sys/devices/pci0000:00/0000:00:03.1/0000:08:00.0/0000:09:00.0/0000:0a:00.0/gpu_metrics";
GpuMetricsHeader_t h = getGpuMetricsRev(m);
auto gpu = getGpuMetrics(h, m);
std::cout << "temperature_edge: " << std::to_string(gpu.temperature_edge) << std::endl;
std::cout << "temperature_hotspot: " << std::to_string(gpu.temperature_hotspot) << std::endl;
std::cout << "temperature_mem: " << std::to_string(gpu.temperature_mem) << std::endl;
std::cout << "temperature_vrgfx: " << std::to_string(gpu.temperature_vrgfx) << std::endl;
std::cout << "temperature_vrsoc: " << std::to_string(gpu.temperature_vrsoc) << std::endl;
std::cout << "temperature_vrmem: " << std::to_string(gpu.temperature_vrmem) << std::endl;
std::cout << "average_gfx_activity: " << std::to_string(gpu.average_gfx_activity) << std::endl;
std::cout << "average_umc_activity: " << std::to_string(gpu.average_umc_activity) << std::endl;
std::cout << "average_mm_activity: " << std::to_string(gpu.average_mm_activity) << std::endl;
std::cout << "average_socket_power: " << std::to_string(gpu.average_socket_power) << std::endl;
std::cout << "energy_accumulator: " << std::to_string(gpu.energy_accumulator) << std::endl;
std::cout << "system_clock_counter: " << std::to_string(gpu.system_clock_counter) << std::endl;
std::cout << "average_gfxclk_frequency: " << std::to_string(gpu.average_gfxclk_frequency) << std::endl;
std::cout << "average_socclk_frequency: " << std::to_string(gpu.average_socclk_frequency) << std::endl;
std::cout << "average_uclk_frequency: " << std::to_string(gpu.average_uclk_frequency) << std::endl;
std::cout << "average_vclk0_frequency: " << std::to_string(gpu.average_vclk0_frequency) << std::endl;
std::cout << "average_dclk0_frequency: " << std::to_string(gpu.average_dclk0_frequency) << std::endl;
std::cout << "average_vclk1_frequency: " << std::to_string(gpu.average_vclk1_frequency) << std::endl;
std::cout << "average_dclk1_frequency: " << std::to_string(gpu.average_dclk1_frequency) << std::endl;
std::cout << "current_gfxclk: " << std::to_string(gpu.current_gfxclk) << std::endl;
std::cout << "current_socclk: " << std::to_string(gpu.current_socclk) << std::endl;
std::cout << "current_uclk: " << std::to_string(gpu.current_uclk) << std::endl;
std::cout << "current_vclk0: " << std::to_string(gpu.current_vclk0) << std::endl;
std::cout << "current_dclk0: " << std::to_string(gpu.current_dclk0) << std::endl;
std::cout << "current_vclk1: " << std::to_string(gpu.current_vclk1) << std::endl;
std::cout << "current_dclk1: " << std::to_string(gpu.current_dclk1) << std::endl;
std::cout << "throttle_status: " << std::to_string(gpu.throttle_status) << std::endl;
std::cout << "current_fan_speed: " << std::to_string(gpu.current_fan_speed) << std::endl;
std::cout << "pcie_link_width: " << std::to_string(gpu.pcie_link_width) << std::endl;
std::cout << "pcie_link_speed: " << std::to_string(gpu.pcie_link_speed) << std::endl;
std::cout << "gfx_activity_acc: " << std::to_string(gpu.gfx_activity_acc) << std::endl;
std::cout << "mem_activity_acc: " << std::to_string(gpu.mem_activity_acc) << std::endl;
std::cout << "temperature_hbm: " << std::to_string(gpu.temperature_hbm) << std::endl;
std::cout << "firmware_timestamp: " << std::to_string(gpu.firmware_timestamp) << std::endl;
std::cout << "voltage_soc: " << std::to_string(gpu.voltage_soc) << std::endl;
std::cout << "voltage_gfx: " << std::to_string(gpu.voltage_gfx) << std::endl;
std::cout << "voltage_mem: " << std::to_string(gpu.voltage_mem) << std::endl;
return 0;
}

View File

@@ -1,177 +0,0 @@
#include <libwebsockets.h>
#include <ArduinoJson.hpp>
#include <csignal>
#include <print>
#include <string>
#define HASS_ADDRESS "home.drath.win"
#define HASS_TOKEN "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI0MzUxMTZiY2VjNTg0MTI3OGI4YmU0NTY4ZGQ5MzIyYiIsImlhdCI6MTc1NzQzMDI0MCwiZXhwIjoyMDcyNzkwMjQwfQ.6wKTlxEA0FLWfv-qW35vewUSvTxdVrZWqFwHT5Khu6E"
static bool bExit;
std::string tx;
struct lws_context *context = NULL;
lws *websock = NULL;
uint16_t id = 2;
static int callback(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len);
static const struct lws_protocols protocols[] = {
{"lws-minimal-client", callback, 0, 0, 0, NULL, 0},
LWS_PROTOCOL_LIST_TERM};
static const struct lws_extension extensions[] = {
{"permessage-deflate",
lws_extension_callback_pm_deflate,
"permessage-deflate"
"; client_no_context_takeover"
"; client_max_window_bits"},
{NULL, NULL, NULL}};
static int callback(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) {
ArduinoJson::JsonDocument json;
std::string entity = "sensor.listwa_moc";
switch (reason) {
case LWS_CALLBACK_CLIENT_CONNECTION_ERROR: {
std::println("[HomeAssistant] websocket conn error: {}", in ? (char *)in : "(null)");
return -1;
}
case LWS_CALLBACK_CLIENT_RECEIVE: {
ArduinoJson::deserializeJson(json, (char *)in);
std::string ha_type = json["type"].as<std::string>();
// std::println("[HomeAssistant] got event type: {} ", ha_type);
if (ha_type == "auth_required") {
json.clear();
json["type"] = "auth";
json["access_token"] = HASS_TOKEN;
ArduinoJson::serializeJson(json, tx);
break;
}
if (ha_type == "auth_ok") {
std::println("[HomeAssistant] subscribing to entity \"{}\"", entity);
json.clear();
json["id"] = id++;
json["type"] = "subscribe_entities";
json["entity_ids"][0] = entity;
ArduinoJson::serializeJson(json, tx);
break;
}
if (ha_type == "result") {
if (json["success"].as<std::string>() == "false")
std::println("[HomeAssistant] api said success was \"false\" on message id {}", id - 1);
break;
}
if (ha_type == "event") {
float state = json["event"]["c"][entity]["+"]["s"].as<float>();
std::println("{}", state);
break;
}
std::println("[HomeAssistant] unhandled event: {}", (char *)in);
break;
}
case LWS_CALLBACK_CLIENT_ESTABLISHED: {
std::println("[HomeAssistant] Websocket connected");
break;
}
case LWS_CALLBACK_CLIENT_CLOSED: {
std::println("[HomeAssistant] Websocket closed");
return -1;
}
case LWS_CALLBACK_CLIENT_WRITEABLE: {
/* skip whole callback if there's no tx to send */
if (tx.size() > 0) {
// std::println("[HomeAssistant] sending {}", tx);
size_t msgLen = LWS_PRE + tx.size();
unsigned char *buf = (unsigned char *)malloc(msgLen);
if (buf) {
memcpy(&buf[LWS_PRE], tx.c_str(), tx.size());
if(!lws_write(wsi, &buf[LWS_PRE], tx.size(), LWS_WRITE_TEXT));
tx = "";
free(buf);
}
}
break;
}
default:
break;
}
return 0;
}
static void handle_sigint(int sig) {
bExit = true;
}
int hass_connect() {
struct lws_client_connect_info i;
struct lws_context_creation_info info;
lws_set_log_level(LLL_ERR | LLL_WARN, lwsl_emit_syslog);
memset(&i, 0, sizeof(i));
memset(&info, 0, sizeof info);
info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT;
info.port = CONTEXT_PORT_NO_LISTEN;
info.protocols = protocols;
info.fd_limit_per_thread = 1 + 1 + 1;
info.extensions = extensions;
context = lws_create_context(&info);
if (!context) {
std::println("[HomeAssistant] error creating context");
return -1;
}
i.context = context;
i.port = 443;
i.address = HASS_ADDRESS;
i.path = "/api/websocket";
i.host = i.address;
i.origin = i.address;
i.ssl_connection = LCCSCF_USE_SSL | LCCSCF_PRIORITIZE_READS;
i.protocol = NULL;
i.local_protocol_name = "lws-minimal-client";
websock = lws_client_connect_via_info(&i);
if (!websock) {
std::println("[HomeAssistant] error creating lws client");
return -1;
}
return 0;
}
void hass_poll() {
lws_service(context, 0);
lws_callback_on_writable(websock);
}
void hass_disconnect() {
lws_context_destroy(context);
}
int main(int argc, const char **argv) {
signal(SIGINT, handle_sigint);
hass_connect();
while (!bExit)
hass_poll();
hass_disconnect();
return 0;
}