From f734cb21798d4dd8cdce8b4b5b31e58abdbe65e1 Mon Sep 17 00:00:00 2001 From: Gunnar Skjold Date: Sat, 18 Nov 2023 08:39:33 +0100 Subject: [PATCH] SSDP --- lib/SvelteUi/include/AmsWebServer.h | 3 +++ lib/SvelteUi/src/AmsWebServer.cpp | 6 ++++++ platformio.ini | 4 ++-- scripts/mkzip.sh | 2 ++ src/AmsToMqttBridge.cpp | 29 +++++++++++++++++++++++++++++ src/AmsToMqttBridge.h | 4 +++- 6 files changed, 45 insertions(+), 3 deletions(-) diff --git a/lib/SvelteUi/include/AmsWebServer.h b/lib/SvelteUi/include/AmsWebServer.h index a38e250f..8a0744ab 100644 --- a/lib/SvelteUi/include/AmsWebServer.h +++ b/lib/SvelteUi/include/AmsWebServer.h @@ -18,11 +18,13 @@ #include #include #include + #include #elif defined(ESP32) // ARDUINO_ARCH_ESP32 #include #include #include #include + #include #else #warning "Unsupported board type" #endif @@ -120,6 +122,7 @@ private: void notFound(); void redirectToMain(); void robotstxt(); + void ssdpSchema(); }; #endif diff --git a/lib/SvelteUi/src/AmsWebServer.cpp b/lib/SvelteUi/src/AmsWebServer.cpp index a82b50ce..a7b7abb1 100644 --- a/lib/SvelteUi/src/AmsWebServer.cpp +++ b/lib/SvelteUi/src/AmsWebServer.cpp @@ -115,6 +115,8 @@ void AmsWebServer::setup(AmsConfiguration* config, GpioConfig* gpioConfig, Meter server.on(F("/library/test/success.html"), HTTP_GET, std::bind(&AmsWebServer::redirectToMain, this)); // Apple connectivity check: http://www.apple.com/library/test/success.html */ + server.on("/ssdp/schema.xml", HTTP_GET, std::bind(&AmsWebServer::ssdpSchema, this)); + server.onNotFound(std::bind(&AmsWebServer::notFound, this)); server.begin(); // Web server start @@ -2329,4 +2331,8 @@ void AmsWebServer::configFileUpload() { void AmsWebServer::redirectToMain() { server.sendHeader(HEADER_LOCATION,F("/")); server.send(302); +} + +void AmsWebServer::ssdpSchema() { + SSDP.schema(server.client()); } \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index ae1f0bb9..fb865acd 100755 --- a/platformio.ini +++ b/platformio.ini @@ -17,7 +17,7 @@ build_flags = -fexceptions [esp32] -lib_deps = WiFi, ESPmDNS, WiFiClientSecure, HTTPClient, FS, Update, HTTPUpdate, WebServer, ${common.lib_deps} +lib_deps = WiFi, ESPmDNS, WiFiClientSecure, HTTPClient, FS, Update, HTTPUpdate, WebServer, ESP32 Async UDP, ESP32SSDP, ${common.lib_deps} [env:esp8266] platform = espressif8266@4.2.0 @@ -27,7 +27,7 @@ board_build.ldscript = eagle.flash.4m2m.ld build_flags = ${common.build_flags} lib_ldf_mode = off lib_compat_mode = off -lib_deps = ESP8266WiFi, ESP8266mDNS, ESP8266WebServer, ESP8266HTTPClient, ESP8266httpUpdate, ${common.lib_deps} +lib_deps = ESP8266WiFi, ESP8266mDNS, ESP8266WebServer, ESP8266HTTPClient, ESP8266httpUpdate, ESP8266SSDP, ${common.lib_deps} lib_ignore = ${common.lib_ignore} extra_scripts = ${common.extra_scripts} diff --git a/scripts/mkzip.sh b/scripts/mkzip.sh index 440e1bf4..20bf40f3 100644 --- a/scripts/mkzip.sh +++ b/scripts/mkzip.sh @@ -3,6 +3,8 @@ find -name firmware.bin | while read firmware;do dir=`dirname $firmware` env=`basename $dir` + echo "Found firmware in $dir, using env '$env'" + if [ -f scripts/$env/mkzip.sh ];then echo "Building zip for env '$env'" chmod +x scripts/$env/mkzip.sh diff --git a/src/AmsToMqttBridge.cpp b/src/AmsToMqttBridge.cpp index 247281d2..4ede33b8 100644 --- a/src/AmsToMqttBridge.cpp +++ b/src/AmsToMqttBridge.cpp @@ -1710,6 +1710,35 @@ void WiFi_post_connect() { mqttEnabled = strlen(mqttConfig.host) > 0; ws.setMqttEnabled(mqttEnabled); } + + sprintf_P((char*) commonBuffer, PSTR("AMS reader %s"), wifi.hostname); + + SSDP.setSchemaURL("ssdp/schema.xml"); + SSDP.setHTTPPort(80); + SSDP.setName((char*) commonBuffer); + //SSDP.setSerialNumber("0"); + SSDP.setURL("/"); + SSDP.setModelName("AMS reader"); + //SSDP.setModelNumber("929000226503"); + SSDP.setModelURL("https://amsleser.no"); + SSDP.setManufacturer("Utilitech AS"); + SSDP.setManufacturerURL("http://amsleser.no"); + SSDP.setDeviceType("rootdevice"); + sprintf_P((char*) commonBuffer, PSTR("amsreader/%s"), FirmwareVersion::VersionString); + #if defined(ESP32) + SSDP.setModelDescription("Device to read data from electric smart meters"); + SSDP.setServerName((char*) commonBuffer); + //SSDP.setUUID(""); + SSDP.setIcons( "" + "image/svg+xml" + "48" + "48" + "24" + "favicon.svg" + ""); + #endif + SSDP.setInterval(300); + SSDP.begin(); } int16_t unwrapData(uint8_t *buf, DataParserContext &context) { diff --git a/src/AmsToMqttBridge.h b/src/AmsToMqttBridge.h index 34f41b7b..1602c6e1 100644 --- a/src/AmsToMqttBridge.h +++ b/src/AmsToMqttBridge.h @@ -27,11 +27,13 @@ #if defined(ESP8266) #include #include +#include #elif defined(ESP32) #include #include #include -#include "Update.h" +#include +#include #endif #include "LittleFS.h"