SSDP added

This commit is contained in:
Dmitry Borisenko
2020-08-28 23:18:18 +03:00
parent 3ab75bcea6
commit 21e7297035
9 changed files with 161 additions and 214 deletions

View File

@@ -1 +1 @@
analog-adc;id;anydata;Сенсоры;Аналоговый;order;pin-adc;map[1,100,1,100];c[0] analog-adc;id;anydata;Сенсоры;Аналоговый;order;pin-adc;map[1,1024,1,1024];c[1]

View File

@@ -1,7 +1,5 @@
#pragma once #pragma once
#include <Arduino.h> #include <Arduino.h>
#include "Class/LineParsing.h" #include "Class/LineParsing.h"
#include "Class/SensorConverting.h" #include "Class/SensorConverting.h"
#include "Global.h" #include "Global.h"
@@ -23,16 +21,14 @@ class SensorAnalog : public SensorConverting {
pinInt = pinInt; pinInt = pinInt;
value = analogRead(A0); value = analogRead(A0);
#endif #endif
//float valueFl = this->mapping(value);
// valueFl = this->correction(valueFl);
value = this->mapping(key, value); value = this->mapping(key, value);
float valueFl = this->correction(key, value);
eventGen(key, ""); eventGen(key, "");
jsonWriteFloat(configLiveJson, key, value); jsonWriteStr(configLiveJson, key, String(valueFl));
MqttClient::publishStatus(key, String(value)); MqttClient::publishStatus(key, String(valueFl));
Serial.println("[I] sensor '" + key + "' data: " + String(value)); Serial.println("[I] sensor '" + key + "' data: " + String(valueFl));
return value; return value;
} }
}; };

View File

@@ -12,8 +12,6 @@ class SensorConverting : public LineParsing {
int mapping(String key, int input) { int mapping(String key, int input) {
String map_ = jsonReadStr(configOptionJson, key + "_map"); String map_ = jsonReadStr(configOptionJson, key + "_map");
if (map_ != "") { if (map_ != "") {
map_.replace("map[", "");
map_.replace("]", "");
input = map(input, input = map(input,
selectFromMarkerToMarker(map_, ",", 0).toInt(), selectFromMarkerToMarker(map_, ",", 0).toInt(),
selectFromMarkerToMarker(map_, ",", 1).toInt(), selectFromMarkerToMarker(map_, ",", 1).toInt(),
@@ -24,11 +22,11 @@ class SensorConverting : public LineParsing {
} }
float correction(String key, float input) { float correction(String key, float input) {
_c.replace("c[", ""); String corr = jsonReadStr(configOptionJson, key + "_с");
_c.replace("]", ""); if (corr != "") {
float coef = _c.toFloat(); float coef = corr.toFloat();
input = input * coef; input = input * coef;
}
return input; return input;
} }
}; };
//extern SensorConverting* mySensorConverting;

View File

@@ -24,6 +24,9 @@ extern void textOutSet();
extern void analogAdc(); extern void analogAdc();
extern void analogReading(); extern void analogReading();
extern void ultrasonicCm();
extern void ultrasonicReading();

View File

@@ -38,6 +38,7 @@
#include <time.h> #include <time.h>
#include <ArduinoOTA.h> #include <ArduinoOTA.h>
#ifdef WEBSOCKET_ENABLED #ifdef WEBSOCKET_ENABLED
extern AsyncWebSocket ws; extern AsyncWebSocket ws;
//extern AsyncEventSource events; //extern AsyncEventSource events;

5
include/SSDP.h Normal file
View File

@@ -0,0 +1,5 @@
#pragma once
extern void SsdpInit();
extern String xmlNode(String tags, String data);
extern String decToHex(uint32_t decValue, byte desiredStringLength);

50
src/SSDP.cpp Normal file
View File

@@ -0,0 +1,50 @@
#include <ESP8266SSDP.h>
#include <SSDP.h>
#include "Global.h"
void SsdpInit() {
server.on("/description.xml", HTTP_GET, [](AsyncWebServerRequest* request) {
String ssdpSend = "<root xmlns=\"urn:schemas-upnp-org:device-1-0\">";
String ssdpHeder = xmlNode("major", "1");
ssdpHeder += xmlNode("minor", "0");
ssdpHeder = xmlNode("specVersion", ssdpHeder);
ssdpHeder += xmlNode("URLBase", "http://" + WiFi.localIP().toString());
String ssdpDescription = xmlNode("deviceType", "upnp:rootdevice");
ssdpDescription += xmlNode("friendlyName", jsonReadStr(configSetupJson, "name"));
ssdpDescription += xmlNode("presentationURL", "/");
ssdpDescription += xmlNode("serialNumber", getChipId());
#ifdef ESP8266
ssdpDescription += xmlNode("modelName", "ESP8266");
#endif
#ifdef ESP32
ssdpDescription += xmlNode("modelName", "ESP32");
#endif
ssdpDescription += xmlNode("modelNumber", getChipId());
ssdpDescription += xmlNode("modelURL", "https://github.com/IoTManagerProject/IoTManager/wiki");
ssdpDescription += xmlNode("manufacturer", "Borisenko Dmitry");
ssdpDescription += xmlNode("manufacturerURL", "https://github.com/IoTManagerProject/IoTManager");
ssdpDescription += xmlNode("UDN", "uuid:38323636-4558-4dda-9188-cda0e6" + decToHex(ESP.getChipId(), 6));
ssdpDescription = xmlNode("device", ssdpDescription);
ssdpHeder += ssdpDescription;
ssdpSend += ssdpHeder;
ssdpSend += "</root>";
Serial.println("->!!!SSDP Get request received");
request->send(200, "text/xml", ssdpSend);
});
//Если версия 2.0.0 закаментируйте следующую строчку
SSDP.setDeviceType("upnp:rootdevice");
SSDP.setSchemaURL("description.xml");
SSDP.begin();
}
String xmlNode(String tags, String data) {
String temp = "<" + tags + ">" + data + "</" + tags + ">";
return temp;
}
String decToHex(uint32_t decValue, byte desiredStringLength) {
String hexString = String(decValue, HEX);
while (hexString.length() < desiredStringLength) hexString = "0" + hexString;
return hexString;
}

View File

@@ -21,7 +21,7 @@ void bmp280T_reading();
void sensorsInit() { void sensorsInit() {
ts.add( ts.add(
SENSORS, 10000, [&](void *) { SENSORS, 15000, [&](void *) {
String buf = sensorReadingMap; String buf = sensorReadingMap;
while (buf.length()) { while (buf.length()) {
String tmp = selectToMarker(buf, ","); String tmp = selectToMarker(buf, ",");
@@ -32,65 +32,10 @@ void sensorsInit() {
nullptr, true); nullptr, true);
} }
// static int counter;
// counter++;
//
//#ifdef LEVEL_ENABLED
// if (sensors_reading_map[0] == 1)
// ultrasonic_reading();
//#endif
//
// if (counter > 10) {
// counter = 0;
//
//#ifdef ANALOG_ENABLED
// if (sensors_reading_map[1] == 1)
// //analog_reading1();
// if (sensors_reading_map[2] == 1)
// //analog_reading2();
//#endif
//
//#ifdef DALLAS_ENABLED
// if (sensors_reading_map[3] == 1)
// dallas_reading();
//#endif
//
//#ifdef DHT_ENABLED
// if (sensors_reading_map[4] == 1)
// dhtT_reading();
// if (sensors_reading_map[5] == 1)
// dhtH_reading();
// if (sensors_reading_map[6] == 1)
// dhtP_reading();
// if (sensors_reading_map[7] == 1)
// dhtC_reading();
// if (sensors_reading_map[8] == 1)
// dhtD_reading();
//#endif
//
//#ifdef BMP_ENABLED
// if (sensors_reading_map[9] == 1)
// bmp280T_reading();
// if (sensors_reading_map[10] == 1)
// bmp280P_reading();
//#endif
//
//#ifdef BME_ENABLED
// if (sensors_reading_map[11] == 1)
// bme280T_reading();
// if (sensors_reading_map[12] == 1)
// bme280P_reading();
// if (sensors_reading_map[13] == 1)
// bme280H_reading();
// if (sensors_reading_map[14] == 1)
// bme280A_reading();
//#endif
// }
//==============================================Модуль аналогового сенсора===========================================================================================
//analog-adc;id;anydata;Сенсоры;Аналоговый;order;pin[0];map[1,100,1,100];c[0]
//===================================================================================================================================================================
#ifdef ANALOG_ENABLED #ifdef ANALOG_ENABLED
//==============================================Модуль аналогового сенсора===========================================================================================
//analog-adc;id;anydata;Сенсоры;Аналоговый;order;pin-adc;map[1,1024,1,100];c[1]
//===================================================================================================================================================================
void analogAdc() { void analogAdc() {
mySensorAnalog = new SensorAnalog(); mySensorAnalog = new SensorAnalog();
mySensorAnalog->update(); mySensorAnalog->update();
@@ -100,162 +45,107 @@ void analogAdc() {
sensorReadingMap += key + ","; sensorReadingMap += key + ",";
jsonWriteStr(configOptionJson, key + "_pin", pin); jsonWriteStr(configOptionJson, key + "_pin", pin);
jsonWriteStr(configOptionJson, key + "_map", mySensorAnalog->gmap()); jsonWriteStr(configOptionJson, key + "_map", mySensorAnalog->gmap());
jsonWriteStr(configOptionJson, key + "_с", mySensorAnalog->gc());
mySensorAnalog->clear(); mySensorAnalog->clear();
} }
void analogReading() { void analogReading() {
String key = sCmd.order(); String key = sCmd.order();
String pin = jsonReadStr(configOptionJson, key + "_pin"); String pin = jsonReadStr(configOptionJson, key + "_pin");
mySensorAnalog->SensorAnalogRead(key, pin); mySensorAnalog->SensorAnalogRead(key, pin);
} }
#endif
//analog adc 0 Аналоговый#вход,#% Датчики any-data 1 1023 1 100 1 #ifdef LEVEL_ENABLED
//void analog() { //=========================================Модуль ультрозвукового дальномера==================================================================
//ultrasonic-cm;id;anydata;Сенсоры;Расстояние;order;pin;map[1,100,1,100];c[1]
//=========================================================================================================================================
void ultrasonicCm() {
}
void ultrasonicReading() {
}
void levelPr() {
// String value_name = sCmd.next(); // String value_name = sCmd.next();
// String pin = sCmd.next(); // String trig = sCmd.next();
// String echo = sCmd.next();
// String widget_name = sCmd.next(); // String widget_name = sCmd.next();
// String page_name = sCmd.next(); // String page_name = sCmd.next();
// String type = sCmd.next(); // String type = sCmd.next();
// String analog_start = sCmd.next(); // String empty_level = sCmd.next();
// String analog_end = sCmd.next(); // String full_level = sCmd.next();
// String analog_start_out = sCmd.next();
// String analog_end_out = sCmd.next();
// String page_number = sCmd.next(); // String page_number = sCmd.next();
// analog_value_names_list += value_name + ","; // levelPr_value_name = value_name;
// enter_to_analog_counter++; // jsonWriteStr(configOptionJson, "e_lev", empty_level);
// jsonWriteStr(configOptionJson, value_name + "_st", analog_start); // jsonWriteStr(configOptionJson, "f_lev", full_level);
// jsonWriteStr(configOptionJson, value_name + "_end", analog_end); // jsonWriteStr(configOptionJson, "trig", trig);
// jsonWriteStr(configOptionJson, value_name + "_st_out", analog_start_out); // jsonWriteStr(configOptionJson, "echo", echo);
// jsonWriteStr(configOptionJson, value_name + "_end_out", analog_end_out); // pinMode(trig.toInt(), OUTPUT);
// pinMode(echo.toInt(), INPUT);
// createWidgetByType(widget_name, page_name, page_number, type, value_name); // createWidgetByType(widget_name, page_name, page_number, type, value_name);
// if (enter_to_analog_counter == 1) { // sensors_reading_map[0] = 1;
// sensors_reading_map[1] = 1; }
// } ////ultrasonicCm cm 14 12 Дистанция,#см Датчики fillgauge 1
// if (enter_to_analog_counter == 2) { //void ultrasonicCm() {
// sensors_reading_map[2] = 1; // String value_name = sCmd.next();
// } // String trig = sCmd.next();
// String echo = sCmd.next();
// String widget_name = sCmd.next();
// String page_name = sCmd.next();
// String type = sCmd.next();
// String empty_level = sCmd.next();
// String full_level = sCmd.next();
// String page_number = sCmd.next();
// ultrasonicCm_value_name = value_name;
// jsonWriteStr(configOptionJson, "trig", trig);
// jsonWriteStr(configOptionJson, "echo", echo);
// pinMode(trig.toInt(), OUTPUT);
// pinMode(echo.toInt(), INPUT);
// createWidgetByType(widget_name, page_name, page_number, type, value_name);
// sensors_reading_map[0] = 1;
//} //}
// //
//void analog_reading1() {
// String value_name = selectFromMarkerToMarker(analog_value_names_list, ",", 0);
//#ifdef ESP32
// int analog_in = analogRead(34);
//#endif
//#ifdef ESP8266
// int analog_in = analogRead(A0);
//#endif
// int analog = map(analog_in,
// jsonReadInt(configOptionJson, value_name + "_st"),
// jsonReadInt(configOptionJson, value_name + "_end"),
// jsonReadInt(configOptionJson, value_name + "_st_out"),
// jsonReadInt(configOptionJson, value_name + "_end_out"));
// jsonWriteInt(configLiveJson, value_name, analog);
// eventGen(value_name, "");
// MqttClient::publishStatus(value_name, String(analog));
// Serial.println("[I] sensor '" + value_name + "' data: " + String(analog));
//}
//
//void analog_reading2() {
// String value_name = selectFromMarkerToMarker(analog_value_names_list, ",", 1);
//#ifdef ESP32
// int analog_in = analogRead(35);
//#endif
//#ifdef ESP8266
// int analog_in = analogRead(A0);
//#endif
// int analog = map(analog_in,
// jsonReadInt(configOptionJson, value_name + "_st"),
// jsonReadInt(configOptionJson, value_name + "_end"),
// jsonReadInt(configOptionJson, value_name + "_st_out"),
// jsonReadInt(configOptionJson, value_name + "_end_out"));
// jsonWriteInt(configLiveJson, value_name, analog);
// eventGen(value_name, "");
// MqttClient::publishStatus(value_name, String(analog));
// Serial.println("[I] sensor '" + value_name + "' data: " + String(analog));
//}
#endif
//=========================================================================================================================================
//=========================================Модуль измерения уровня в баке==================================================================
#ifdef LEVEL_ENABLED
//levelPr p 14 12 Вода#в#баке,#% Датчики fillgauge 125 20 1
void levelPr() {
String value_name = sCmd.next();
String trig = sCmd.next();
String echo = sCmd.next();
String widget_name = sCmd.next();
String page_name = sCmd.next();
String type = sCmd.next();
String empty_level = sCmd.next();
String full_level = sCmd.next();
String page_number = sCmd.next();
levelPr_value_name = value_name;
jsonWriteStr(configOptionJson, "e_lev", empty_level);
jsonWriteStr(configOptionJson, "f_lev", full_level);
jsonWriteStr(configOptionJson, "trig", trig);
jsonWriteStr(configOptionJson, "echo", echo);
pinMode(trig.toInt(), OUTPUT);
pinMode(echo.toInt(), INPUT);
createWidgetByType(widget_name, page_name, page_number, type, value_name);
sensors_reading_map[0] = 1;
}
//ultrasonicCm cm 14 12 Дистанция,#см Датчики fillgauge 1
void ultrasonicCm() {
String value_name = sCmd.next();
String trig = sCmd.next();
String echo = sCmd.next();
String widget_name = sCmd.next();
String page_name = sCmd.next();
String type = sCmd.next();
String empty_level = sCmd.next();
String full_level = sCmd.next();
String page_number = sCmd.next();
ultrasonicCm_value_name = value_name;
jsonWriteStr(configOptionJson, "trig", trig);
jsonWriteStr(configOptionJson, "echo", echo);
pinMode(trig.toInt(), OUTPUT);
pinMode(echo.toInt(), INPUT);
createWidgetByType(widget_name, page_name, page_number, type, value_name);
sensors_reading_map[0] = 1;
}
void ultrasonic_reading() { void ultrasonic_reading() {
long duration_; // long duration_;
int distance_cm; // int distance_cm;
int level; // int level;
static int counter; // static int counter;
int trig = jsonReadInt(configOptionJson, "trig"); // int trig = jsonReadInt(configOptionJson, "trig");
int echo = jsonReadInt(configOptionJson, "echo"); // int echo = jsonReadInt(configOptionJson, "echo");
digitalWrite(trig, LOW); // digitalWrite(trig, LOW);
delayMicroseconds(2); // delayMicroseconds(2);
digitalWrite(trig, HIGH); // digitalWrite(trig, HIGH);
delayMicroseconds(10); // delayMicroseconds(10);
digitalWrite(trig, LOW); // digitalWrite(trig, LOW);
duration_ = pulseIn(echo, HIGH, 30000); // 3000 µs = 50cm // 30000 µs = 5 m // duration_ = pulseIn(echo, HIGH, 30000); // 3000 µs = 50cm // 30000 µs = 5 m
distance_cm = duration_ / 29 / 2; // distance_cm = duration_ / 29 / 2;
distance_cm = medianFilter.filtered(distance_cm); //отсечение промахов медианным фильтром // distance_cm = medianFilter.filtered(distance_cm); //отсечение промахов медианным фильтром
counter++; // counter++;
if (counter > TANK_LEVEL_SAMPLES) { // if (counter > TANK_LEVEL_SAMPLES) {
counter = 0; // counter = 0;
level = map(distance_cm, // level = map(distance_cm,
jsonReadInt(configOptionJson, "e_lev"), // jsonReadInt(configOptionJson, "e_lev"),
jsonReadInt(configOptionJson, "f_lev"), 0, 100); // jsonReadInt(configOptionJson, "f_lev"), 0, 100);
//
jsonWriteInt(configLiveJson, levelPr_value_name, level); // jsonWriteInt(configLiveJson, levelPr_value_name, level);
eventGen(levelPr_value_name, ""); // eventGen(levelPr_value_name, "");
//
MqttClient::publishStatus(levelPr_value_name, String(level)); // MqttClient::publishStatus(levelPr_value_name, String(level));
//
Serial.println("[I] sensor '" + levelPr_value_name + "' data: " + String(level)); // Serial.println("[I] sensor '" + levelPr_value_name + "' data: " + String(level));
//
jsonWriteInt(configLiveJson, ultrasonicCm_value_name, distance_cm); // jsonWriteInt(configLiveJson, ultrasonicCm_value_name, distance_cm);
eventGen(ultrasonicCm_value_name, ""); // eventGen(ultrasonicCm_value_name, "");
//
MqttClient::publishStatus(ultrasonicCm_value_name, String(distance_cm)); // MqttClient::publishStatus(ultrasonicCm_value_name, String(distance_cm));
//
Serial.println("[I] sensor '" + ultrasonicCm_value_name + "' data: " + String(distance_cm)); // Serial.println("[I] sensor '" + ultrasonicCm_value_name + "' data: " + String(distance_cm));
} // }
} }
#endif #endif
//========================================================================================================================================= //=========================================================================================================================================

View File

@@ -8,6 +8,7 @@
#include "Utils\WebUtils.h" #include "Utils\WebUtils.h"
#include "Init.h" #include "Init.h"
#include "Utils/Timings.h" #include "Utils/Timings.h"
#include <SSDP.h>
void not_async_actions(); void not_async_actions();
@@ -70,6 +71,9 @@ void setup() {
udpInit(); udpInit();
#endif #endif
pm.info("Ssdp Init");
SsdpInit();
ts.add( ts.add(
TEST, 1000 * 60, [&](void*) { TEST, 1000 * 60, [&](void*) {
pm.info(printMemoryStatus()); pm.info(printMemoryStatus());