feature/InfluxDB-Connection-Update #1
8
firmware/config.h
Executable file → Normal file
|
@ -24,6 +24,13 @@
|
|||
#define POWERSAVING_SLEEP_S 600
|
||||
#define EMERGENCY_SLEEP_S 172800 // Sleep for 2 days to recover
|
||||
#define ENERGY_SAVING_ITERATIONS 30
|
||||
#define WIFI_MINIMUM_SIGNAL_QUALITY 10 // percent
|
||||
#define RESET_ESP_TIME_INTERVAL_MS 3600000
|
||||
|
||||
#define ROTOR_LENGTH_KM 0.000105
|
||||
#define WIND_SENSOR_MEAS_TIME_S 5.0
|
||||
klaute marked this conversation as resolved
Outdated
|
||||
#define SEC_TO_HOUR_FACTOR (60.0 * 60.0)
|
||||
#define COUNT_TO_KMH ((TWO_PI * ROTOR_LENGTH_KM / WIND_SENSOR_MEAS_TIME_S) * SEC_TO_HOUR_FACTOR)
|
||||
|
||||
#define BAT_LOW_VOLTAGE 3.6
|
||||
f marked this conversation as resolved
Outdated
f
commented
Ist dass der Faktor, der sich aus der Messung mit deinem gekauften Windmessgerät gergeben hat? Ich erinnere mich dunkel, dass du was von 10x geschrieben hattest. Ist dass der Faktor, der sich aus der Messung mit deinem gekauften Windmessgerät gergeben hat? Ich erinnere mich dunkel, dass du was von 10x geschrieben hattest.
klaute
commented
Ja richtig das sind die Faktoren und Divisoren die man braucht um v=u * 2 * pi * r / t_meas * Korrekturfaktor zu berechnen. Vorher stand im Code die Zahl 2.4 ohne einen Kommentar. Prinzipiell würde ich gerne die user config so umbauen das man dort nur noch sein eigenes wlan konfiguriert. Der Rest der dort drin ist unterscheidet sich nicht deutlich von dem was in der config.h enthalten ist. Die Trennung zwischen user und der generellen config ist da sehr verweichlicht. Zudem sind in der config.h Konstanten enthalten deren Werte zum Beispiel Array Indizes entsprechen und somit nie angepasst werden. Ich bin generell für ein Refactoring. Auch von den verschachtelten loop-Funktionen. Ja richtig das sind die Faktoren und Divisoren die man braucht um v=u * 2 * pi * r / t_meas * Korrekturfaktor zu berechnen. Vorher stand im Code die Zahl 2.4 ohne einen Kommentar.
Prinzipiell würde ich gerne die user config so umbauen das man dort nur noch sein eigenes wlan konfiguriert.
Der Rest der dort drin ist unterscheidet sich nicht deutlich von dem was in der config.h enthalten ist. Die Trennung zwischen user und der generellen config ist da sehr verweichlicht. Zudem sind in der config.h Konstanten enthalten deren Werte zum Beispiel Array Indizes entsprechen und somit nie angepasst werden.
Ich bin generell für ein Refactoring. Auch von den verschachtelten loop-Funktionen.
f
commented
Ja bin ich auch voll dafür! Ja bin ich auch voll dafür!
|
||||
#define BAT_EMERGENCY_DEEPSLEEP_VOLTAGE 3.5
|
||||
|
@ -48,5 +55,6 @@
|
|||
#define BME_ADDRESS 0x76
|
||||
|
||||
#define INITIAL_WEBSERVER_TIME 20
|
||||
#define WEB_UPDATER_HTTP_PORT 8080
|
||||
|
||||
#endif
|
||||
|
|
|
@ -26,14 +26,15 @@ WiFiManager wifiManager;
|
|||
|
||||
//*************************************************************************//
|
||||
|
||||
void debug(String x) {
|
||||
void debug(String x)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
Serial.println(x);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void setup() {
|
||||
void setup()
|
||||
{
|
||||
|
||||
#if defined(DEBUG) || defined(SERIAL_FEATURE)
|
||||
Serial.begin(115200);
|
||||
|
@ -60,16 +61,29 @@ void setup() {
|
|||
// Establish WiFi connection
|
||||
String wifiName = "oko-weather-" + DEVICE_NAME;
|
||||
|
||||
wifiManager.setMinimumSignalQuality(16);
|
||||
wifiManager.setConnectTimeout(WIFI_AUTOCONNECT_TIMEOUT_S); // the time in seconds to wait for the known wifi connection
|
||||
wifiManager.setTimeout(WIFI_CONFIG_PORTAL_TIMEOUT_S); // the time in seconds to wait for the user to configure the device
|
||||
wifiManager.setMinimumSignalQuality(WIFI_MINIMUM_SIGNAL_QUALITY);
|
||||
// the time in seconds to wait for the known wifi connection
|
||||
wifiManager.setConnectTimeout(WIFI_AUTOCONNECT_TIMEOUT_S);
|
||||
// the time in seconds to wait for the user to configure the device
|
||||
wifiManager.setTimeout(WIFI_CONFIG_PORTAL_TIMEOUT_S);
|
||||
|
||||
while (!wifiManager.autoConnect(wifiName.c_str(), "DEADBEEF"))
|
||||
#ifdef SLEEP_IF_NO_WLAN_CONNECTION
|
||||
while
|
||||
#endif
|
||||
#ifndef SLEEP_IF_NO_WLAN_CONNECTION
|
||||
if
|
||||
#endif
|
||||
(!wifiManager.autoConnect(wifiName.c_str(), "DEADBEEF"))
|
||||
{
|
||||
debug("WiFi connection failed, try again in 5 seconds...");
|
||||
// If autoconnect to WLAN failed and no client connected, go to deep sleep
|
||||
//ESP.deepSleep(POWERSAVING_SLEEP_S * 1000000, WAKE_RF_DEFAULT);
|
||||
#ifdef SLEEP_IF_NO_WLAN_CONNECTION
|
||||
klaute marked this conversation as resolved
Outdated
f
commented
Das ist ziemlich dirty gelöst und meine Arduino-IDE weigert sich sogar, das zu compilieren. Auch wenn es ein paar bytes verschenkt ist, wäre es schöner, einfach immer was Das ist ziemlich dirty gelöst und meine Arduino-IDE weigert sich sogar, das zu compilieren. Auch wenn es ein paar bytes verschenkt ist, wäre es schöner, einfach immer was ```while``` stehen zu lassen und dann ein ```#ifdef`` in der schleife rein.
|
||||
ESP.deepSleep(POWERSAVING_SLEEP_S * 1000000, WAKE_RF_DEFAULT);
|
||||
delay(100);
|
||||
#endif
|
||||
#ifndef SLEEP_IF_NO_WLAN_CONNECTION
|
||||
delay(5000);
|
||||
#endif
|
||||
}
|
||||
|
||||
debug("Connected!");
|
||||
|
@ -125,6 +139,15 @@ void setup() {
|
|||
//It's magic! leave in
|
||||
delay(100);
|
||||
|
||||
#ifdef RESET_ESP_TIMEINTERVAL
|
||||
// if millis() reached interval (1h) restart ESP
|
||||
if (millis() >= RESET_ESP_TIME_INTERVAL_MS)
|
||||
{
|
||||
// TODO test
|
||||
ESP.restart();
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef BATTERY_POWERED
|
||||
debug("battery powered");
|
||||
_loop();
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
|
||||
// Port des Web Servers auf 80 setzen
|
||||
|
||||
#ifdef HOMEBRIDGE_WEBSTAT
|
||||
|
||||
WiFiServer hb_webstat_server(80);
|
||||
|
||||
const char *hb_ws_msg_start = "{\"temperature\": ";
|
||||
const char *hb_ws_msg_mid = "\"humidity\": ";
|
||||
const char *hb_ws_msg_end = "}";
|
||||
|
||||
void hb_webstat_setup()
|
||||
{
|
||||
hb_webstat_server.begin()
|
||||
}
|
||||
|
||||
void hb_webstat_send(floar currentSensorDfloar currentSensorData[]ata[])
|
||||
{
|
||||
WiFiClient client = server.available();
|
||||
|
||||
if (client.available()) {
|
||||
client.print(hb_ws_msg_start);
|
||||
client.print(String(currentSensorData[0],2));
|
||||
client.print(hb_ws_msg_mid);
|
||||
client.print(hb_ws_msg_end);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -1,7 +1,9 @@
|
|||
#include <InfluxDbClient.h> // from bib manager
|
||||
klaute marked this conversation as resolved
Outdated
f
commented
Die wird für version 1 gebraucht. Die wird für version 1 gebraucht.
klaute
commented
Erledigt Erledigt
|
||||
|
||||
#include "config_user.h"
|
||||
|
||||
// Data point
|
||||
Point sensor("weatherstation");
|
||||
Point sensor(DEVICE_NAME);
|
||||
|
||||
// Init variables to influxdb config - doesn't talk to database
|
||||
InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN);
|
||||
|
|
15
firmware/sensor_wind.ino
Executable file → Normal file
|
@ -1,9 +1,11 @@
|
|||
|
||||
#include "config_user.h"
|
||||
#include "config.h"
|
||||
|
||||
int anemometerRotations = 0;
|
||||
unsigned long currentTime = 0;
|
||||
unsigned int anemometerRotations = 0;
|
||||
|
||||
ICACHE_RAM_ATTR void _anemometerInterrupt() {
|
||||
ICACHE_RAM_ATTR void _anemometerInterrupt()
|
||||
{
|
||||
anemometerRotations++;
|
||||
#ifdef DEBUG
|
||||
Serial.print("*");
|
||||
|
@ -12,12 +14,13 @@ ICACHE_RAM_ATTR void _anemometerInterrupt() {
|
|||
|
||||
float wind_speed() {
|
||||
anemometerRotations = 0;
|
||||
currentTime = millis();
|
||||
|
||||
int interruptNumber = digitalPinToInterrupt(ANEMOMETER_PIN);
|
||||
|
||||
attachInterrupt(interruptNumber, _anemometerInterrupt, RISING);
|
||||
delay(1000 * 5);
|
||||
delay(1000 * WIND_SENSOR_MEAS_TIME_S); // time to measure
|
||||
detachInterrupt(interruptNumber);
|
||||
|
||||
return (float)anemometerRotations / 5.0 * 2.4;
|
||||
return (float)anemometerRotations * COUNT_TO_KMH;
|
||||
|
||||
}
|
||||
|
|
|
@ -13,13 +13,23 @@
|
|||
#include <WiFiClient.h>
|
||||
#include <WiFiManager.h> // WiFiManager from bib manager
|
||||
|
||||
ESP8266WebServer httpServer(8080);
|
||||
#include "config.h"
|
||||
#include "config_user.h"
|
||||
|
||||
ESP8266WebServer httpServer(WEB_UPDATER_HTTP_PORT);
|
||||
ESP8266HTTPUpdateServer httpUpdater;
|
||||
|
||||
String _webUpdater_ip = "127.0.0.1";
|
||||
String _webUpdater_dev = "unknown";
|
||||
float _webUpdater_sensValues[VALUES];
|
||||
|
||||
String hb_ws_msg_start = "{";
|
||||
String hb_ws_msg_temp = "\"temperature\": ";
|
||||
String hb_ws_msg_humi = "\"humidity\": ";
|
||||
String hb_ws_msg_light = "\"light\": ";
|
||||
String hb_ws_msg_windspeed = "\"windspeed\": ";
|
||||
String hb_ws_msg_end = "}";
|
||||
|
||||
void setupWebUpdater(String device, String ip)
|
||||
{
|
||||
debug("Starting WebUpdater... " + ip);
|
||||
|
@ -30,6 +40,9 @@ void setupWebUpdater(String device, String ip)
|
|||
|
||||
httpServer.on("/", showHTMLMain);
|
||||
httpServer.on("/resetWifiManager", resetWifiManager);
|
||||
#ifdef HOMEBRIDGE_WEBSTAT
|
||||
httpServer.on("/hbWebstat", hb_webstat_send);
|
||||
#endif
|
||||
|
||||
klaute marked this conversation as resolved
f
commented
Ein Prometheus Endpunkt wäre noch der Oberhammer :) Ein Prometheus Endpunkt wäre noch der Oberhammer :)
Ich denke das bau ich dann ein, wenn der PR gemerged ist.
klaute
commented
Das wäre super wenn wir noch mehrere andere Plattformen unterstützen könnten! Das wäre super wenn wir noch mehrere andere Plattformen unterstützen könnten!
|
||||
httpServer.begin();
|
||||
|
||||
|
@ -42,13 +55,15 @@ void doWebUpdater(void)
|
|||
httpServer.handleClient();
|
||||
}
|
||||
|
||||
void setSensorData(float sensorValues[]) {
|
||||
void setSensorData(float sensorValues[])
|
||||
{
|
||||
for (uint8_t i = 0; i < VALUES; i++) {
|
||||
_webUpdater_sensValues[i] = sensorValues[i];
|
||||
}
|
||||
}
|
||||
|
||||
void showHTMLMain(void) {
|
||||
void showHTMLMain(void)
|
||||
{
|
||||
String message = "<html><head><title>OKO Weatherstation - " + String(_webUpdater_dev) + "</title>"
|
||||
"<meta http-equiv=\"refresh\" content=\"20\">"
|
||||
"</head><body>"
|
||||
|
@ -66,6 +81,20 @@ void showHTMLMain(void) {
|
|||
httpServer.send(200, "text/html", message);
|
||||
}
|
||||
|
||||
void hb_webstat_send(void)
|
||||
{
|
||||
httpServer.send(200, "text/html", hb_ws_msg_start +
|
||||
hb_ws_msg_temp +
|
||||
String(_webUpdater_sensValues[SENSOR_TEMPERATURE], 2) +
|
||||
hb_ws_msg_humi +
|
||||
String(_webUpdater_sensValues[SENSOR_HUMIDITY], 2) +
|
||||
hb_ws_msg_light +
|
||||
String(_webUpdater_sensValues[SENSOR_LIGHT], 2) +
|
||||
hb_ws_msg_windspeed +
|
||||
String(_webUpdater_sensValues[SENSOR_WINDSPEED], 2) +
|
||||
hb_ws_msg_end);
|
||||
}
|
||||
|
||||
void resetWifiManager()
|
||||
{
|
||||
|
||||
|
@ -79,9 +108,11 @@ void resetWifiManager()
|
|||
httpServer.send(200, "text/html", message);
|
||||
|
||||
// Erase WiFi Credentials, enable, compile, flash, disable and reflash.
|
||||
WiFiManager.resetSettings();
|
||||
WiFiManager wifiManager;
|
||||
wifiManager.resetSettings();
|
||||
|
||||
delay(5000);
|
||||
|
||||
// manual reset after restart is required
|
||||
ESP.restart();
|
||||
}
|
||||
|
|
Für welchen Windsensor sind diese Bemaßungen? Ist das von einem Eigenbau oder von dem welchen wir von Aliexpress gekauft hatten?
Das Feature hat bereits ein gleichnamiges #define in der user config mit dem man es aktivieren kann.