#ifndef CONFIG_H_INCLUDED # define CONFIG_H_INCLUDED /*** _ _ * / \ _ __ ___ _ __ ___| | * / _ \ | '_ ` _ \| '_ \ / _ \ | * / ___ \| | | | | | |_) | __/ | * /_/ __\_\_| |_| |_| .__/_\___|_| * / ___|___ _ __|_/ _(_) __ _ * | | / _ \| '_ \| |_| |/ _` | * | |__| (_) | | | | _| | (_| | * \____\___/|_| |_|_| |_|\__, | * |___/ ***/ // This file is a config template, and can be copied to config.h. // Please don't save any important password in this template. // IMPORTANT: Parameters defined in config.h are only default values, and are applied if: // * the ampel is flashed for the first time // * or 'reset_config' command is called // * or AMPEL_CONFIG_VERSION has been changed. // Once those default values have been applied, uploading the firmware with a modified config.h will not update the ampel configuration! // Every parameter can be modified and saved later via the web-config. // Some of those parameters can also be modified via commands in the Serial monitor : // e.g. 'wifi 0' to turn WiFi off, or 'csv 60' to log data in csv every minute. /*** * AMPEL */ // You can rename the Ampel if you want. // This name will be used for CSV files and the mDNS address. // You'll get a new CSV file after renaming, which can be convenient, e.g. after moving // the ampel to another room. // If left empty, the name will be ESPxxxxxx, where xxxxxx represent the last half of the MAC address. # define AMPEL_NAME "" // This password will be used for Access Point (without username), and for web-server available at http://local_ip with user 'admin', without quotes. // If left empty, the password will have to be set during the first configuration, via access point. // In order to be set successfully, it should have at least 8 characters. # define AMPEL_PASSWORD "" // AMPEL_CONFIG_VERSION should be defined, and have exactly 3 characters. // If you modify this string, every parameter saved on the Ampel will be replaced by the ones in config.h. // AMPEL_CONFIG_VERSION should also be updated if the configuration structure is modified. // The structure of the Ampel configuration has been modified 11 times, so it's called "a11" for now. # define AMPEL_CONFIG_VERSION "a11" /** * SERVICES */ // Define the default for corresponding services. They can be enabled/disabled later in the web-config. # define AMPEL_WIFI true // Should ESP connect to WiFi? Web configuration will not be available when set to false. Use "wifi 1" command to set to true. # define AMPEL_MQTT true // Should data be sent over MQTT? (AMPEL_WIFI should be enabled too) # define AMPEL_CSV true // Should data be logged as CSV, on the ESP flash memory? # define AMPEL_LORAWAN false // Should data be sent over LoRaWAN? (Requires ESP32 + LoRa modem, and "MCCI LoRaWAN LMIC library") /** * WIFI */ // SSID and PASSWORD need to be defined, but can be empty. # define WIFI_SSID "" # define WIFI_PASSWORD "" // How long should the Ampel try to connect to WIFI_SSID? # define WIFI_TIMEOUT 30 // [s] // If the Ampel cannot connect to WIFI_SSID, it will start an Access Point for ACCESS_POINT_TIMEOUT seconds. // If someone connects to this Access Point, the Ampel will stay in this mode until everybody logs out. // If nobody connects to the Access Point before ACCESS_POINT_TIMEOUT seconds, the Ampel will try to connect WIFI_SSID again. # define ACCESS_POINT_TIMEOUT 60 // [s] /** * Sensor */ // How often should measurement be performed, and displayed? //WARNING: On some sensors, measurements become very unreliable when timestep is set to 2s. //NOTE: 10s or longer should be fine in order to get reliable results. //NOTE: SCD30 timer does not seem to be very precise. Time variations may occur. # define MEASUREMENT_TIMESTEP 60 // [s] Value between 2 and 1800 (range for SCD30 sensor) // How often should measurements be appended to CSV ? // Set to 0 if you want to send values after each measurement // WARNING: Writing too often might damage the ESP memory # define CSV_INTERVAL 300 // [s] // Residual heat from CO2 sensor seems to be high enough to change the temperature reading. How much should it be offset? // NOTE: Sign isn't relevant. The returned temperature will always be shifted down. # define TEMPERATURE_OFFSET -3 // [K] // Altitude above sea level // Used for CO2 calibration // here: Stuttgart, Schellingstr. 24. (Source: Google Earth) # define ALTITUDE_ABOVE_SEA_LEVEL 260 // [m] // The reference CO2 concentration has to be within the range 400 ppm ≤ cref(CO2) ≤ 2000 ppm. // Used for CO2 calibration // here : measured concentration in Stuttgart # define ATMOSPHERIC_CO2_CONCENTRATION 425 // [ppm] // Should the sensor try to calibrate itself? // Sensirion recommends 7 days of continuous readings with at least 1 hour a day of 'fresh air' for self-calibration to complete. # define AUTO_CALIBRATE_SENSOR false // [true / false] /** * LEDs */ // LED brightness, which can vary between min and max brightness ("LED breathing") // MAX_BRIGHTNESS must be defined, and should be between 0 and 255. # define MAX_BRIGHTNESS 255 // MIN_BRIGHTNESS, if defined, should be between 0 and MAX_BRIGHTNESS - 1 // If MIN_BRIGHTNESS is set to MAX_BRIGHTNESS, breathing is disabled. # define MIN_BRIGHTNESS 60 // How many LEDs in the ring? 12 and 16 are currently supported. # define LED_COUNT 12 /** * MQTT */ /* * If AMPEL_MQTT is enabled, co2ampel will publish data every MQTT_SENDING_INTERVAL seconds. * An MQTT subscriber can then get the data from the corresponding broker, either encrypted or unencrypted: * * ❯ mosquitto_sub -h 'test.mosquitto.org' -p 8883 -t 'CO2sensors/#' --cafile mosquitto.org.crt -v * CO2sensors/ESPd03cc5 {"time":"2020-12-13 13:14:37+01", "co2":571, "temp":18.9, "rh":50.9} * CO2sensors/ESPd03cc5 {"time":"2020-12-13 13:14:48+01", "co2":573, "temp":18.9, "rh":50.2} * ... * * ❯ mosquitto_sub -h 'test.mosquitto.org' -t 'CO2sensors/#' -v * CO2sensors/ESPd03cc5 {"time":"2020-12-13 13:15:09+01", "co2":568, "temp":18.9, "rh":50.1} * CO2sensors/ESPd03cc5 {"time":"2020-12-13 13:15:20+01", "co2":572, "temp":18.9, "rh":50.3} * ... */ /* * Allow sensor to be configured over MQTT? Very useful for debugging. For example: * mosquitto_pub -h 'test.mosquitto.org' -t 'CO2sensors/ESPe08dc9/control' -m 'timer 30' * mosquitto_pub -h 'test.mosquitto.org' -t 'CO2sensors/ESPe08dc9/control' -m 'calibrate' * mosquitto_pub -h 'test.mosquitto.org' -t 'CO2sensors/ESPe08dc9/control' -m 'reset' */ # define ALLOW_MQTT_COMMANDS false // How often should measurements be sent to MQTT server? // Set to 0 if you want to send values after each measurement // # define MQTT_SENDING_INTERVAL MEASUREMENT_TIMESTEP * 5 // [s] # define MQTT_SENDING_INTERVAL 300 // [s] # define MQTT_SERVER "test.mosquitto.org" // MQTT server URL or IP address # define MQTT_PORT 8883 # define MQTT_ENCRYPTED true // Set to false for unencrypted MQTT (e.g. with port 1883). # define MQTT_USER "" # define MQTT_PASSWORD "" # define MQTT_TOPIC_PREFIX "CO2sensors/" // ESPxxxxxx will be added to the prefix, so complete topic will be "CO2sensors/ESPxxxxxx" /** * LoRaWAN */ // 1) Requires "MCCI LoRaWAN LMIC library", which will be automatically used with PlatformIO but should be added in "Arduino IDE". // 2) Region and transceiver type should be specified in: // * Arduino/libraries/MCCI_LoRaWAN_LMIC_library/project_config/lmic_project_config.h for Arduino IDE // * platformio.ini for PlatformIO // See https://github.com/mcci-catena/arduino-lmic#configuration for more information // 3) It has been tested with "TTGO ESP32 SX1276 LoRa 868" and will only work with an ESP32 + LoRa modem // 4) In order to use LoRaWAN, a gateway should be close to the co2ampel, and an account, an application and a device should be registered, // e.g. on https://www.thethingsindustries.com/docs/integrations/ // with "Europe 863-870 MHz (SF9 for RX2 - recommended)", "MAC v1.0.3" // 5) The corresponding keys should be defined in LORAWAN_DEVICE_EUI, LORAWAN_APPLICATION_EUI and LORAWAN_APPLICATION_KEY // How often should measurements be sent over LoRaWAN? # define LORAWAN_SENDING_INTERVAL 300 // [s] This value should not be too low. See https://www.thethingsnetwork.org/docs/lorawan/duty-cycle.html#maximum-duty-cycle // WARNING: If AMPEL_LORAWAN is true, you need to modify the 3 following constants // They are written as hexadecimal strings, and will be parsed in the correct order. // This EUI must be in big-endian format, so most-significant-byte first. // You can copy the string from TheThingsNetwork as-is, without reversing the bytes. // For TheThingsNetwork issued EUIs the string should start with "70B3D5..." # define LORAWAN_DEVICE_EUI "70B3D57ED004CB17" // This should also be in big-endian format, and can be copied as is from TheThingsNetwork. # define LORAWAN_APPLICATION_EUI "0102030405060708" // This should also be in big-endian format, and can be copied as is from TheThingsNetwork. # define LORAWAN_APPLICATION_KEY "9D06308E20B974919DA6404E063BE01D" /** * NTP */ # define NTP_SERVER "pool.ntp.org" # define UTC_OFFSET 1 // [h] +1 for Paris/Berlin, -5 for NYC # define DAYLIGHT_SAVING_TIME false // true in summer, false in winter #endif