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

View File

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

View File

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

View File

@@ -38,6 +38,7 @@
#include <time.h>
#include <ArduinoOTA.h>
#ifdef WEBSOCKET_ENABLED
extern AsyncWebSocket ws;
//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() {
ts.add(
SENSORS, 10000, [&](void *) {
SENSORS, 15000, [&](void *) {
String buf = sensorReadingMap;
while (buf.length()) {
String tmp = selectToMarker(buf, ",");
@@ -32,65 +32,10 @@ void sensorsInit() {
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
//==============================================Модуль аналогового сенсора===========================================================================================
//analog-adc;id;anydata;Сенсоры;Аналоговый;order;pin-adc;map[1,1024,1,100];c[1]
//===================================================================================================================================================================
void analogAdc() {
mySensorAnalog = new SensorAnalog();
mySensorAnalog->update();
@@ -100,162 +45,107 @@ void analogAdc() {
sensorReadingMap += key + ",";
jsonWriteStr(configOptionJson, key + "_pin", pin);
jsonWriteStr(configOptionJson, key + "_map", mySensorAnalog->gmap());
jsonWriteStr(configOptionJson, key + "_с", mySensorAnalog->gc());
mySensorAnalog->clear();
}
void analogReading() {
String key = sCmd.order();
String pin = jsonReadStr(configOptionJson, key + "_pin");
mySensorAnalog->SensorAnalogRead(key, pin);
}
#endif
//analog adc 0 Аналоговый#вход,#% Датчики any-data 1 1023 1 100 1
//void analog() {
#ifdef LEVEL_ENABLED
//=========================================Модуль ультрозвукового дальномера==================================================================
//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 pin = 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 analog_start = sCmd.next();
// String analog_end = sCmd.next();
// String analog_start_out = sCmd.next();
// String analog_end_out = sCmd.next();
// String empty_level = sCmd.next();
// String full_level = sCmd.next();
// String page_number = sCmd.next();
// analog_value_names_list += value_name + ",";
// enter_to_analog_counter++;
// jsonWriteStr(configOptionJson, value_name + "_st", analog_start);
// jsonWriteStr(configOptionJson, value_name + "_end", analog_end);
// jsonWriteStr(configOptionJson, value_name + "_st_out", analog_start_out);
// jsonWriteStr(configOptionJson, value_name + "_end_out", analog_end_out);
// 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);
// if (enter_to_analog_counter == 1) {
// sensors_reading_map[1] = 1;
// }
// if (enter_to_analog_counter == 2) {
// sensors_reading_map[2] = 1;
// }
// 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 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() {
long duration_;
int distance_cm;
int level;
static int counter;
int trig = jsonReadInt(configOptionJson, "trig");
int echo = jsonReadInt(configOptionJson, "echo");
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duration_ = pulseIn(echo, HIGH, 30000); // 3000 µs = 50cm // 30000 µs = 5 m
distance_cm = duration_ / 29 / 2;
distance_cm = medianFilter.filtered(distance_cm); //отсечение промахов медианным фильтром
counter++;
if (counter > TANK_LEVEL_SAMPLES) {
counter = 0;
level = map(distance_cm,
jsonReadInt(configOptionJson, "e_lev"),
jsonReadInt(configOptionJson, "f_lev"), 0, 100);
jsonWriteInt(configLiveJson, levelPr_value_name, level);
eventGen(levelPr_value_name, "");
MqttClient::publishStatus(levelPr_value_name, String(level));
Serial.println("[I] sensor '" + levelPr_value_name + "' data: " + String(level));
jsonWriteInt(configLiveJson, ultrasonicCm_value_name, distance_cm);
eventGen(ultrasonicCm_value_name, "");
MqttClient::publishStatus(ultrasonicCm_value_name, String(distance_cm));
Serial.println("[I] sensor '" + ultrasonicCm_value_name + "' data: " + String(distance_cm));
}
// long duration_;
// int distance_cm;
// int level;
// static int counter;
// int trig = jsonReadInt(configOptionJson, "trig");
// int echo = jsonReadInt(configOptionJson, "echo");
// digitalWrite(trig, LOW);
// delayMicroseconds(2);
// digitalWrite(trig, HIGH);
// delayMicroseconds(10);
// digitalWrite(trig, LOW);
// duration_ = pulseIn(echo, HIGH, 30000); // 3000 µs = 50cm // 30000 µs = 5 m
// distance_cm = duration_ / 29 / 2;
// distance_cm = medianFilter.filtered(distance_cm); //отсечение промахов медианным фильтром
// counter++;
// if (counter > TANK_LEVEL_SAMPLES) {
// counter = 0;
// level = map(distance_cm,
// jsonReadInt(configOptionJson, "e_lev"),
// jsonReadInt(configOptionJson, "f_lev"), 0, 100);
//
// jsonWriteInt(configLiveJson, levelPr_value_name, level);
// eventGen(levelPr_value_name, "");
//
// MqttClient::publishStatus(levelPr_value_name, String(level));
//
// Serial.println("[I] sensor '" + levelPr_value_name + "' data: " + String(level));
//
// jsonWriteInt(configLiveJson, ultrasonicCm_value_name, distance_cm);
// eventGen(ultrasonicCm_value_name, "");
//
// MqttClient::publishStatus(ultrasonicCm_value_name, String(distance_cm));
//
// Serial.println("[I] sensor '" + ultrasonicCm_value_name + "' data: " + String(distance_cm));
// }
}
#endif
//=========================================================================================================================================

View File

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