- Fix inability to resume timelapses (#1163)
- Fix "Could not determine measurement from returned value" error for Atlas Scientific inputs
- Add ability to use Influxdb 2.x or Influxdb 1.x
- Add Input: Raspberry Pi Power Monitor
- Add Input: MH-Z14 CO2
- Add ability to set Chirp Input I2C address (#1197)
- Add UI feedback for Atlas Scientific calibration commands (#1198)
- Fix Test Value Input throwing constant but benign errors
- Fix pybluez dependency install (#1178)
- Remove deprecated jinja2 extensions
- Fix loading dependency page (#1180)
- Fix missing smbus2 dependency for several LCD Functions
- Fix Input/Output Custom Commands showing correct value
- Fix fswebcam Camera custom options not being applied
- Fix consistency of Time Span Trigger Function execution times
- Fix inability to use decimal values in float input fields for some browsers
- Fix executing actions when no message passed to function
- Fix calculating next sunrise/sunset
- Add API endpoint: cameras/capture_image
- Add Headers option to URL (requests) camera library
- Add Input: MAX30155 PT100 I2C Temperature Sensor (by DFRobot)
- Add Input: Kasa Energy Meter (Strips/Plugs)
- Add Inout: Atlas Scientific O2 (Oxygen Gas)
- Add Outputs: Kasa Wifi RGB Light Bulbs
- Add Outputs: Kasa Wifi Power Plugs
- Add Output: Neopixel RGB LED Strip
- Add Function Action: Change Neopixel LED Strip Color
- Add Function Action: Change Kasa RGB Bulb Color
- Add Function Action: Clear Total kWh
- Add Function Action: Add Line to Daemon Log
- Add Input: MH-Z14A CO2 sensor.
- Increase dependency install timeout period
- Update python-kasa to 0.5.0
- Fix PID Controller Widget
- Fix timestamp argument having no affect in value_set()
- Revert changes to PCF8574 Output (#1175)
- Fix Edge Detection Input storing measurements (#1171)
- Fix Bang-Bang Hysteretic (On/Off) (Lower/Raise/Both) Function when set to Both
- Add API endpoint: cameras/last_image
- Add Input: Signal (Revolutions) (Alternative pigpio method)
- Add Input: Test Save Any Value as a Measurement
- Add Outputs: Kasa KP303 and HS300 with latest python-kasa
- Update requirements.txt
- Add short name for input display
- Fix showing graph widgets with Outputs that have no name custom option
- Fix bash commands dependency installations (#1170)
- Don't allow method creation until dependencies fulfilled
- Fix missing module importlib_metadata
- Fix PCF8574 and MCP23017 Pump Output Measurements
- Fix selecting an Output Measurements for Conditional Controller Conditions
- Fix display of channel names in Graph Widget
- Add Input variants for Kasa KP303 and HS300 that use the latest python-kasa library (0.4.2)
- Add ability to select Output measurements for Measurement Condition of Conditional Controllers
- Improve dependency install script
- Improve Output display names on UI Output selections
- Fix Bang-Bang (On/Off) Function
- Add Output: PCF8575 16-Channel I/O Expander
- Remove pip-git as module dependency option
- Improve dependency version-checking
- Fix acquiring images for camera libraries that use OpenCV
- Fix showing usage when Actions are added to Conditional Controllers
- Fix State option upgrade for Output Action
- Fix MQTT Publish Action for Inputs
- Fix Trigger dependency install
- Improve error feedback when importing controller modules
- Improve error-handling of controllers
Following the upgrade, you will need to reboot to complete the upgrade.
LCD and Math Controllers have been completely removed from Mycodo and replaced with Functions. If you were previously using an LCD or Math controller, you will need to add the corresponding Function and change any other parts of the system that referenced those devices.
If you have any custom Output modules, you will need to rename setup_output(self) to initialize(self) within the modules. If you don't use setup_output(self) and initialize(self) doesn't exist, you will need to create it in the module at a minimum with just pass:
def initialize(self):
pass
- Fix installation on 64-bit OSs
- Fix missing netcat and wget install dependencies (#1124)
- Fix inability to safe user settings
- Fix install issue due to outdated apt repository
- Fix pylint command and dependency in Inputs/Outputs/Functions
- Fix issue with TTNv3 Input if there's no payload
- Fix Desktop Widgets resizing when viewing on mobile browsers
- Fix rotation and flip for fswebcam camera library
- Fix error-handling of missing template files (#1145)
- Fix displaying values on LCDs when Decimal is set to 0
- Fix Blank Line option of LCDs actually displaying a blank line
- Fix missing Display Unit option for some LCDs
- Fix issues with the Output Widget
- Fix BME680 Input dependency
- Fix Gauge Widget stop selection (#1130)
- Fix DS18B20 (ow-shell) Input (#910) (measurements are erroneous, though)
- Fix PIDs using Function measurements (#1165)
- Add ability to execute Actions for Inputs
- Add ability to import custom Action modules (Configure -> Custom Actions)
- Add ability to cast MQTT Action payload as integer or float
- Add camera library: libcamera (#1117)
- Add Input: TTN Integration: Data Storage (TTN v3, Payload jmespath Expression)
- Add Output: Kasa HS300 Smart WiFi Power Strip
- Add Output: I/O Expander: PCF8574 (8 Channels): Peristaltic Pump (Generic)
- Add Output: I/O Expander: MCP23017 (16 Channels): Peristaltic Pump (Generic)
- Add size of file for last still and timelapse images
- Add ability to duplicate Inputs
- Add ability to invert the saved duty cycle for PWM Outputs
- Add randomly-generated Client IDs for MQTT Inputs/Functions
- Add calibration, offset, and reset options for SCD-30 Input
- Add Measurement Label as an LCD option
- Add multiple tries to initialize Input/Output/Function/Action before failing
- Remove LCD and Math Controllers (both replaced with Functions)
- Update influxdb from 1.8.0 to 1.8.10
- Update python library versions in requirements.txt
- Add button to install all dependencies on Diagnostics page
- Add Error Codes to log lines and the manual
- Switch to using suntime for Sunrise/Sunset calculation
- Fix inability to install due to missing pip
- Fix MCP23017 Output dependency (#1095)
- Fix restoring backups causing upgrade page to not be usable until .upgrade file is deleted
- Fix .upgrade file interfering with upgrade page rendering (#1096)
- Fix conversion foreign key in measurement API endpoint (#1011)
- Fix issues with Ajax data refreshing when Input/Output/Function saved
- Fix refreshing Function Actions upon addition/deletion
- Fix refreshing output configurations
- Fix DS3502 Output step calculations
- Add Input: TTN Integration: Data Storage (TTN v3), replaces deprecated TTN v2 Input (deprecated 12/2021)
- Add Input: HTU21D Variant using the CircuitPython library
- Add Input: SCD-4x (40, 41) CO2/Temp/Hum sensor
- Add Input: Si7021 Temp/Hum sensor
- Add Input: Generic TH10/16 for any Temp/Hum sensor
- Add PWM Output option: Invert Stored Signal
- Remove Output Quantity option when adding outputs
- Change Live page refresh to that of the device measurement period
- Fix SQLAlchemy bug preventing install
This is a bugfix release that includes a fix to a severe security vulnerability. It is recommended that all users that have Mycodo exposed to the internet and allow guest access upgrade to patch this vulnerability. Users that only run Mycodo on a local network and/or don't allow unknown user (i.e. guest) access likely won't be affected.
- Fix refreshing LCD Display Function line options when changing number of lines
- Fix installation of Function Action dependencies
- Fix error when unauthenticated users attempting to land on the home page
- Fix Gauge Widget dependencies (#1100)
- Fix installation of pigpiod
- Fix file exploit vulnerability (#1105)
- Add ability to install on most Debian-based systems
- Add ability for Actions to work on Function Controllers
- Add LCD Backlight On/Off Actions to LCD Functions (#1089)
- Add Input: SHT2x (using alternate sht20 library with more accurate measurements and settable temperature resolution)
- Add Input: SHTC3
- Update python packages
- Fix accessing dependency page (#1082)
- Fix loading Input page if Math controllers are present (#1083)
- Fix MQTT JSON Input dependency version (#1085)
- Add Inputs: MLX90393, DPS310
- Fix aggregate dependency page (#1082)
- Fix loading of dependency install page
- Prevent loading of Highstock JS more than once
- Fix Input temperature compensation
- Add ability to set Dependency Message to be displayed on dependency install page
- Fix redrawing Graph/Gauge Widgets on resize
- Fix Gauge Widget dark theme (#1080)
- Really fix missing channels for Atlas EC sensor
- Fix missing channels for Atlas EC sensor
- Fix display of Graph and Gauge Widgets on dashboard (#1078)
This release changes the way settings are saved, which requires a change to any custom Inputs/Outputs/Functions you have in use. If your custom module includes the seldom-used execute_at_modification() function (such as Mycodo/mycodo/inputs/python_code.py), you will need to change the parameters as well as the return variables.
Before:
def execute_at_modification(
mod_entry,
request_form,
custom_options_dict_presave,
custom_options_channels_dict_presave,
custom_options_dict_postsave,
custom_options_channels_dict_postsave):
allow_saving = True # Allows saving of options to occur
return (allow_saving,
mod_entry,
custom_options_dict_postsave,
custom_options_channels_dict_postsave)
After:
def execute_at_modification(
messages,
mod_entry,
request_form,
custom_options_dict_presave,
custom_options_channels_dict_presave,
custom_options_dict_postsave,
custom_options_channels_dict_postsave):
# messages["page_refresh"] = True # Setting to True will cause the options on the user's page to refresh
# messages["error"].append("Some error") # Uncomment this line to prevent options saving
# messages["warning"].append("This will be a warning message")
# messages["info"].append("This will be an info message")
if not messages["error"]:
messages["success"].append("Successfully completed execute_at_modification()")
return (messages,
mod_entry,
custom_options_dict_postsave,
custom_options_channels_dict_postsave)
Additionally, if you are currently using the MQTT JSON Input and your topics contain any special characters, you will need to enclose the topic in quotes (e.g. sensor-1 to "sensor-1").
- Fix taking photos with camera library "raspistill" when AWB set to off
- Fix issue querying graph data
- Fix flag/tag newlines on asynchronous graphs
- Fix single quotes in translations causing error (#1019)
- Fix CCS811 Input dependency install issue (#1023)
- Fix sense-hat dependency issue
- Fix saving Output checkboxes (#1029)
- Fix PiOLED Functions (#1030)
- Fix PID controller properly reporting if Held/Paused
- Fix cmd_output() killing daemon upon command timeout (#1047)
- Fix missing check for Widget dependencies during upgrade/restore
- Fix output_sec_currently_on()
- Fix Widgets being able to be moved/resized when dashboard locked
- Fix Indicator Widget unit not using correct font size
- Fix display of tags on more than one Graph Widget
- Fix first channel of L298N DC Motor Controller Output not working
- Fix setting Graph Widget custom colors when tag selected
- Fix Graph Widget custom colors when more than one Input selected
- Fix note array memory leak on Graph Widgets
- Fix FTDI device detection on Output page
- Fix sending commands to Atlas Scientific devices via FTDI
- Fix Atlas Scientific Peristaltic Pump Output calibration
- Fix temperature compensation unit conversion for Atlas ORP, EC, and pH sensors (#1064)
- Fix Camera Widget displaying time-lapse images (#1072)
- Fix Activate/Deactivate Actions not working for Functions
- Add ability to install Javascript/CSS dependencies
- Add ability to submit forms without refreshing the page (#1040)
- Add ability to install dependencies without changing the page
- Add drag and drop sorting of Inputs/Outputs/Functions
- Add modal dialog for Input/Output/Function configuration
- Add option for a numerical keypad login
- Add options for camera library raspistill: AWB Gain Blue, AWB Gain Red
- Add Input: ADS1256 with Analog pH/EC sensors
- Add Input: SI1145 Light/Proximity sensor
- Add Output: MCP23017 16-Channel I/O Expander (On/Off)
- Add return status to Conditional Controllers
- Add 2- and 4-line variants of SSD1306 Display Functions and extra Options (#1030)
- Add calibration to the Atlas Scientific EC Input Peristaltic Pump Output
- Add Spacers for Input and Output lists
- Add PDF Manual
- Add ability to set the Indicator Widget's unit font size
- Add temperature compensation to Atlas Dissolved Oxygen sensor
- Add TDS, Salinity, and Specific Gravity measurements for Atlas Scientific EC sensor (#1065)
- Add ability to define new Flask endpoints in Widget modules
- Replace TravisCI (no longer free) with Github Actions to perform unit tests
- Update KP303 library (#1028)
- Add Try/Except for checking Output Triggers (#1037)
- Speed up loading of Camera page
- Update Gridstack to the latest version
- Ensure Atlas DO sensor only returns DO (#1052)
- Remove Highcharts/Highstock Javascript from package to be compliant with licensing
- Remove calibration page (all functionality has been moved to modules)
- Place Output columns at back of Graph Widget charts
- Add Measurements/Units: Specific Gravity, Salinity, Total Dissolved Solids, Parts per Thousand
- Add conversions for Parts per Thousand
- Specify virtualenv install version in requirements.txt (#1067)
- Enable server-side Flask session
- Fix upgrading database to version 61a0d0568d24
- Fix Generic Pump Output timestamps
- Fix inability to add Camera Widget for some cameras
- Fix error referencing key of Input dict that doesn't exist
- Fix unnecessary reference to measurement dict causing error (#1001, #1005)
- Add missing dependency for HC-SR04 Input (#1003)
- Fix 'id' KeyError when saving certain Inputs (#1004)
- Fix I2C PiOLED Display Functions
- Fix clearing total volume of Hall Flow Input (#994)
- Fix SSD1306 OLED Display Function initialization
- Fix PID Min/Max options not being respected (#998)
- Fix error when PWM Output duty cycle is 0
- Change pin default when creating an Output from 0 to None
- Don't run Output shutdown function if not set up
- Fix Controller custom_option messages not being visible
- Fix output state checking not handling errors (#990)
- Fix BME680 Input dependency
- Fix GrovePi DHT Input
- Fix Method dependencies not being installed
- Prevent non-streamable camera types from being selected to stream in Camera Widget (#991)
- Add ability to set decimal places for Angular and Solid Gauge Widgets
- Add ability to lock Dashboards (remove ability to edit widget options) (#996)
- Add ability to display the status of Functions and PID Controllers in the UI
- Add Widget: Function Status
- Add Conditional Controller option: Timeout (seconds)
- Add Function Actions: Camera Timelapse Pause/Resume
- Add Temperature Compensation for Atlas Scientific pH Input during calibration
- Add Output channel names to Graph Widget multi-select and legend
- Add Function: Backup to Remote Host (rsync)
- Add Input: Anyleaf Electrical Conductivity
- Add ability to calibrate Atlas Scientific ORP and DO sensors
- Add ability to change I2C address of Atlas Scientific devices
- Add Input: CCS811 (without temperature) (#992)
- Add Input: MQTT Subscribe (JSON payload)
- Add Output: Grove I2C Motor Driver (TB6612FNG, Board v1.0)
- Add Output: Grove I2C Motor Driver (Board v1.3)
- Make Enable Pin optional for L298N Output
- Fix warning preventing saving of Python code
- Fix Sense Hat Input dependency
- Add Input: Atlas Scientific humidity sensor
- Add Camera: raspistill
- Make Add Output dropdown searchable
- Add "Both" direction option for On/Off and PWM Bang-Bang Outputs
This release contains changes that requires modification to any Custom Functions you may have in use. In order for the new features to work for Custom Functions, it required the use of an abstract base function class (similarly to Inputs and Outputs). As a result, any Custom Functions that previously were formatted as such:
from mycodo.controllers.base_controller import AbstractController
class CustomModule(AbstractController, threading.Thread):
"""
Class to operate custom controller
"""
def __init__(self, ready, unique_id, testing=False):
threading.Thread.__init__(self)
super().__init__(ready, unique_id=unique_id, name=__name__)
self.unique_id = unique_id
self.log_level_debug = None
# Set custom options
custom_function = db_retrieve_table_daemon(
CustomController, unique_id=unique_id)
self.setup_custom_options(
FUNCTION_INFORMATION['custom_options'], custom_function)
will need to be changed to the format:
from mycodo.functions.base_function import AbstractFunction
class CustomModule(AbstractFunction):
"""
Class to operate custom controller
"""
def __init__(self, function, testing=False):
super().__init__(function, testing=testing, name=__name__)
# Note: The following 2 lines are no longer needed to be defined here. Delete them.
# self.unique_id = function.unique_id
# self.log_level_debug = None
# Set custom options
custom_function = db_retrieve_table_daemon(
CustomController, unique_id=self.unique_id) # Note: "self." is added here
self.setup_custom_options(
FUNCTION_INFORMATION['custom_options'], custom_function)
# These two lines are new and are required to execute initialize_variables()
if not testing:
self.initialize_variables()
You also no longer need to define the following (i.e. you can remove these lines):
controller = db_retrieve_table_daemon(
CustomController, unique_id=self.unique_id)
self.log_level_debug = controller.log_level_debug
self.set_log_level_debug(self.log_level_debug)
Additionally, if you have pre_stop() in your Function Class, it will need to be renamed to stop_function().
There are two ways to perform these changes.
Method A:
- Deactivate all custom functions.
- Delete all custom functions on the Setup -> Function page.
- Delete all custom functions on the Configure -> Custom Functions page.
- Perform the Mycodo upgrade.
- Make the necessary edits to all your Custom Functions.
- Import all your updated Custom Functions on the Configure -> Custom Functions page.
- Add and configure your Custom Functions on the Setup -> Function page.
Method B:
- Either SSH into your Raspberry Pi or use a keyboard/mouse/monitor and edit the Custom Functions in the ~/Mycodo/mycodo/function/custom_functions directory.
- Perform the Mycodo upgrade.
Method A is more involved, but does not require accessing the Pi from outside the web UI. Method B has fewer steps and doesn't require deleting and reconfiguring new Functions, but requires being able to SSH in to your Raspberry Pi or connecting a keyboard/mouse/monitor to be able to edit the files in-place.
As always, a backup of the current system files and settings is performed during an upgrade, allowing you to restore your system to a previous release state if needed.
- Fix camera paths not saving (#955)
- Fix returning pylint3 report after saving Python Code
- Fix detection of multiple cameras by opencv
- Fix SCD30 (CircuitPython) Input (#963)
- Fix importing Mycodo Settings ZIP if custom modules were exported (#967)
- Fix inability to install picamera library on some Pi 4s (#967)
- Fix VPD Function saving and calculating pressure conversion (#978)
- Fix pressure conversion equations (#978)
- Fix issues with Function channels/measurements
- Fix Mijia LYWSD03MMC Input using a nonexistent pybluez version
- Fix Hall Flow Input
- Remove Flask-Session to resolve bug preventing frontend loading (#971)
- Add Input: SHT41x
- Add Input: Adafruit I2C capacitive soil sensor
- Add Input: CircuitPython variants of the BME280 and SHT31-D Inputs
- Add Input: KP303 Smart WiFi Power Strip (#980)
- Add Input: Generic Analog pH/EC using ADS1115 ADC
- Add Input: Tasmota Outlet Energy Monitor
- Add Output: DS3502 Digital Potentiometer
- Add Output: ULN2003 Unipolar Stepper Motor Driver
- Add Function: SSD1309 Display
- Add Function: Bang-Bang PWM
- Add Function Action: MQTT Publish
- Add Function Action: webhook to emit HTTP requests
- Partial conversion of Display/LCD controllers to Display Functions
- Add external temperature compensation for Anyleaf pH Input
- Add ability to set camera stream frames per second
- Add missing stream resolution option to opencv cameras
- Add ability for Atlas Scientific Peristaltic Pump Outputs to run in reverse
- Add new ADC measurement rescaling method: Equation
- Add Custom Actions to Functions
- Add "wait_for_return" option to Custom Actions
- Convert all LCD/Display controllers to Functions
- Add ability to not have to set time-lapse end (defaults to 10 years) (#987)
- Add Measurements: Apparent Power, Reactive Power, Power Factor
- Add Units: kilowatt-hour, Watt, Volt-Amps, Volt-Amps-Reactive
- Specify package versions for pypi dependencies
- Update python libraries
- Add unit testing for Custom Functions
- Add ability to change theme from Config dropdown menu
This bugfix release changes how sessions are handled and as a result will log all users out following the upgrade.
- Fix Function measurements not appearing in some dropdowns
- Fix displaying saved Custom Option values when Inputs/Outputs have Custom Actions (#952)
- Fix silent failures when cookies are too large (#950)
- Fix use of select_measurement_channel custom option in controllers (#953)
- Fix error-handling of erroneous measurements/units (#949)
- Fix API deactivating controller in database (#944)
- Fix invalid conversion (#947)
- Fix inability to save MQTT Input (#946)
- Fix Camera Widget (#948)
This release contains bug fixes and several new types of Inputs and Outputs. These include stepper motors, digital-to-analog converters, a multi-channel PWM output, as well as an input to acquire current and future weather conditions.
This release also deprecates Math controllers. Current Math controllers will continue to function, but new Math controllers cannot be created. Instead, all Math controller functionality has been ported to Functions (Setup -> Function page), in order to reduce complexity and improve customizability. Much like Inputs and Outputs, Functions are single-file modules that can be created by users and imported. Take a look at the Mycodo/mycodo/functions directory for the built-in Function modules.
The new weather input acquires current and future weather conditions from openweathermap.org with either a city (200,000 to choose from) or latitude/longitude for a location and a time frame from the present up to 7 days in the future, with a resolution of days or hours. An API key to use the service is free and the measurements returned include temperature (including minimum and maximum if forecasting days in the future), humidity, dew point, pressure, wind speed, and wind direction. This can be useful for incorporating current or future weather conditions into your conditional controllers or other functions or calculations. For instance, you may prevent Mycodo from watering your outdoor plants if the forecasted temperature in the next 12 to 24 hours is below freezing. You may also want to be alerted by email if the forecasted weather conditions are extreme. Not everyone wants to set up a weather station, but might still want to have local outdoor measurements, so this input was made to bridge that gap.
- Fix broken Output API get/post calls
- Fix selecting output channels in custom functions
- Fix Autotune PID Function (#876)
- Fix issue with LockFile not locking
- Fix Output State and Output Duration On Conditional Conditions (#879)
- Fix not showing camera stream buttons for cameras libraries that don't have stream support (#899)
- Fix Clock Pin option showing twice for UART Inputs
- Fix MCP3008 Input error (#902)
- Fix Input Measurement option Invert Scale not displaying properly (#902)
- Fix MQTT output being able to set 0 to disable option
- Fix compounding of Function Action return messages in Conditionals
- Fix ADS1015 and ADS1115 inputs only measuring channel 0 (#911)
- Fix install of pyusb dependency of Adafruit_Extended_Bus (#863)
- Fix Message and New Line options in Custom Options
- Fix Conditional sample_rate not being set from Config
- Fix Saving Angular and Solid Gauge Widget stop values (#916)
- Fix uncaught exception if trying to acquire image when opencv can't detect a camera (#917)
- Fix displaying input/output pypi.org dependencies with "=="
- Fix pressure measurement in BME680 and BME280 Inputs (#923)
- Fix controllers disappearing following reorder (#925)
- Fix Inputs that use w1thermsensor (#926)
- Fix issue generating documentation for similar Inputs/Outputs/Widgets
- Fix execution of Input stop_input()
- Fix Input Pre-Outputs not turning on
- Fix Output not activating for Camera
- Fix PWM trigger and Duration Method (#937)
- Fix stopping Trigger Controllers (#940)
- Fix Tags not appearing in Graph Widgets
- Fix variable measurement Inputs saving correctly
- Fix detection of custom_option save type (CSV or JSON) for proper parsing
- Fix saving of unchecked checkboxes when using forms
- Add Digital-to-Analog Converter output support (and add MCP4728) (#893)
- Add Stepper Motor Controller output support (and add DRV8825) (#857)
- Add Output: GrovePi multi-channel relay I2C board
- Add Output: PCA9685 16-channel PWM servo/LED controller
- Add Input: MAX31865 (CircuitPython) (#900)
- Add Input: Generic Hall Effect Flow sensor
- Add Input: INA219 current sensor
- Add Input: Grove Pi DHT11/22 sensor
- Add Input: HC-SR04 Ultrasonic Distance sensor
- Add Input: SCD30 CO2/Humidity/Temperature sensor
- Add Input: Current Weather from OpenWeatherMap.org (Free API Key, Latitude/Longitude, 200,000 cities, Humidity/Temperature/Pressure/Dewpoint/Wind Speed/Wind Direction)
- Add Input: Forecast Hourly/Daily Weather from OpenWeatherMap.org (Free API Key, , Humidity/Temperature/Pressure/Dewpoint)
- Add Input: Raspberry Pi Sense HAT (humidity/temperature/pressure/compass/magnetism/acceleration/gyroscope)
- Add Input: Xiaomi Mijia LYWSD03MMC
- Add Input: Atlas Scientific CO2 sensor
- Add Input: AHTx0 Temperature/Humidity sensor
- Add Input: BME680 (Circuitpython)
- Add measurements to Custom Controllers
- Add Measurement and Unit: Speed, Meters/Second
- Add Measurement and Unit: Direction, Bearing
- Add Conversions: m/s <-> mph <-> knots, hour <-> minutes and seconds
- Add LCD: Grove RGB LCD
- Add Function: Bang-bang/hysteretic
- Add Function Action: Output Value
- Add Function Action: Set LCD Backlight Color
- Add configurable link for navbar brand link
- Add User option to Shell Command Function Action
- Add Message and New Line options to Custom Options of Outputs
- Add set_custom_option/get_custom_option to Conditionals (#901)
- Add ability to login with username/password using MQTT Input and Outputs
- Add ability to use Custom Channel Options with Inputs (first used in MQTT Input)
- Add Custom Functions/Inputs/Outputs/Widgets to Settings Export/Import
- Add user_scripts directory for user code that's preserved during upgrade/export/import (#930)
- Add pin mode option (float, pull-up, pull-down) for Edge and State Inputs
- Add Method: Cascaded Method, allows combining (multiply) any number of existing methods
- Add Functions and to API
- Add missing Input Channels to Input API calls
- Remove lirc
- Change widget title styles
- Fix GCC warnings (#906)
- Remove default user "pi" with "mycodo" (for compatibility with non-Raspberry Pi operating systems)
- Update pyusb to 1.1.1
- Refactor Edge detection Input
- Refactor method implementation from single large method into multiple small classes
- Changed duration method start- and end-time handling
- Port Math controllers to Functions: Equation (Single/Multi), Difference, Statistics (Single/Multi), Average (Single/Multi), Sum (Single/Multi), Wet-Bulb Humidity, Redundancy, Vapor Pressure Deficit, Verification
- Deprecate Math controllers
- Remove Math controllers from and add Functions to Live page
- Fix PiOLED (CircuitPython) (#842)
- Update Polish translations
- Fix missing default values when adding new controllers (#868)
- Fix catching loss of internet connection during upgrade (#869)
- Fix Function Actions Output PWM and Output PWM Ramp not working (#865)
- Fix dependencies not being installed for LCDs
- Fix saving when missing/malformed custom_options JSON present (#866)
- Add LCDs: 128x32 and 128x64 PiOLED using the Adafruit CircuitPython library (#842)
- Fix order of Atlas Scientific pH sensor calibration points (#861)
- Add Polish translation
- Fix Output Widgets not able to control outputs
- Fix ADS1256 (#854)
- Fix PID controllers not obeying minimum off duration (#859)
- Increase nginx proxy buffer to accommodate large headers (#849)
- Fix URL generation for cameras (#850)
- Fix display of Output data on Asynchronous Graphs (#847)
- Fix inability to create Angular Gauge Widget with more than 4 stops (#844)
- Fix issue with Python Code Input (#846)
- Fix issue with install (#845)
- Fix PID Controller not operating (#843)
- Fix inability to switch any output except channel 0 from web interface (#840)
- Minor fixes for PCF8574 Output
- Fix Atlas Pump recording two pump durations
- Add ability to select method in Input/Output/Function controller custom options
- Fix partially broken upgrade to new output system
- Fix GPIO output startup states
This release changes the Output framework to add the ability for a single Output to control multiple channels. This was originally based on the PCF8574 8-bit I/O Expander, which allows 8 additional IO pins to be controlled via the I2C bus, but applies to any other output device with more than one channel. As a result of this change, you will need to update any Custom Outputs to follow the new format (see /mycodo/outputs directory).
- Fix inability to save Python Code Input settings (#827)
- Fix Cameras not appearing in Camera Widget (#828)
- Fix inability to save Pause PID Function Action (#836)
- Fix error diaplying Measurement or Gauge Widgets with Math controllers using non-default units (#831)
- Fix default values not displaying for Input/Output Custom Actions
- Fix some apt packages being detected as installed when they are not installed
- Convert Input module custom_options from CSV to JSON
- Add Anyleaf ORP and pH Inputs (#825)
- Remove unused Output selection in Methods
- Fix issue displaying Measurement Widgets when a Math measurement is selected (#817)
- Fix inability to generate Widget HTML (#817, #822)
- Add ability to duplicate a dashboard and its widgets (#812)
- Remove copy of widget HTML files during upgrade
This update includes the final refactoring of the output system to accommodate output modules that can operate multiple different types of output types. For instance, a peristaltic pump can be instructed to turn on for a duration or instructed to pump a volume. As a result of the output framework being modified to accommodate this, the duty_cycle parameter was removed from output_on_off()
and output_on()
functions of the DaemonControl
class of mycodo_client.py. As a result, if you were previously using either of these function, you will need to add the parameter output_type='pwm'
and change the duty_cycle
parameter to amount
. For example, output_on(output_id, duty_cycle=50)
would need to be changed to output_on(output_id, output_type='pwm', amount=50)
, and output_on_off(output_id, 'on', duty_cycle=50)
to output_on_off(output_id, 'on', output_type='pwm', amount=50)
.
This update also adds the ability to import custom Widget modules. Much like custom Inputs, Outputs, and Functions, you can now create and import your own single-file Widget module that allow new widgets to be added to a dashboard.
- Fix issue installing Python modules (#804)
- Fix inability to save PID options when On/Off output selected (#805)
- Fix graph shift issues
- Fix PID Input/Math Setpoint Tracking unit and integer issue (#811)
- Fix PID Controller debug logging (#811)
- Fix bug in password reset function that would allow an attacker to discover if a user name doesn't exist
- Add Output: On/Off MQTT Publish
- Add Output information links
- Add ability to download Mycodo Backups (#803)
- Add ability to import custom Widget modules
- Add Widget Controller for background widget processes
- Add Widget: Python Code (#803)
- Add an option to the password reset function to save the reset code to a file
- Deprecate duty_cycle parameter of output functions
- Remove graph Shift X-Axis option
- Move Autotune from PID Controller to Separate PID Autotune Controller (#811)
- Fix issue displaying lines 5-8 on SD1306 LCDs (#800)
- Fix Atlas Scientific Pump duration unit issues (#801)
- Add Inputs: Ads1115 (Circuit Python library), ADS1015 (Circuit Python library)
- Add Input: BMP280 (bmp280-python library, includes ability to set forced mode) (#608)
- Deprecate Input using the Adafruit_ADS1x15 library
- Fix ADS1x15 Input
- Improve custom output framework
- Consolidate locking code to utils/lockfile.py
- Fix Wireless 315/433 MHz Output module
This update adds a Generic Peristaltic Pump Output to compliment the Atlas Scientific Peristaltic Pump Output. Generic peristaltic pumps are less expensive but often have acceptable dispensing accuracy. Once your pump's flow rate has been measured and this rate set in the Output options, your pump can be used to dispense specific volumes of liquid just like the Atlas Scientific pumps. This release also enables pumps to dispense for durations of time in addition to specific volumes (once calibrated). So, you can now operate a PID controller or other functions/controllers that instruct a pump to dispense for a duration in seconds or a volume in milliliters.
In this update, the Atlas Scientific Peristaltic Pump Output duration units have been changed form minutes to seconds, to align with other Outputs that use the second SI unit.
WARNING: As a result of how this new output operates, a potentially breaking change has been introduced. If you use any custom Output modules, you will need to add the parameter output_type=None to the output_switch() function of all of your custom Output module files. If you do not, the Mycodo daemon/backend will fail to start after upgrading to or beyond this version. It is advised to modify your custom Output modules prior to upgrading to ensure the daemon successfully starts after the upgrade. If you have not created or imported any custom Output modules, there is nothing that needs to be done.
- Fix measurement being stored in database after sensor error (#795)
- Fix UART communication with Atlas Scientific devices (#785)
- Fix FTDI communication with Atlas Scientific devices
- Fix PID Dashboard Widget error in log when PID inactive
- Fix install on Desktop version of Raspberry Pi OS by removing python3-cffi-backend
- Fix inability to change I2C address of ADS1x15 Input (#788)
- Fix issues with calibrating Atlas Scientific devices (#789)
- Fix missing default input custom option values if not set in the database
- Add missing TSL2561 I2C addresses
- Fix daemon hang on use of incorrect Atlas Scientific UART device (add writeTimeout to every serial.Serial())
- Fix uninstall of pigpiod
- Fix missing pigpio dependency for GPIO PWM Outputs
- Prevent LCD controllers from activating if Max Age or Decimal Places are unset (#795)
- Add Inputs: ADXL34x, ADT7410 (#791)
- Add Output: Generic Peristaltic Pump
- Add ability to turn peristaltic pumps on for durations (in addition to volumes)
- Add Function Action: Output (Volume)
- Improve general compatibility with Atlas Scientific devices
- Add ability to utilize volume Outputs (pumps) with PID Controllers
- Add pypi.org links to Input libraries in Input description information
- Add SPI interface as an option for SD1306 LEDs (#793)
- Change Atlas Scientific Peristaltic Pump Output duration unit from minute to second
- Move clear total volume function for Atlas Scientific Flow Meter to Input Module
- Add instruction for viewing the frontend web log on the web 502 error page (#786)
- Fix inability to install pigpio (#783)
- Fix inability to install internal dependencies (pigpio, bcm2835, etc.) (#783)
- Fix API database schema issue
- Prevent user with insufficient permissions from rearranging dashboard widgets
- Fix installing internal dependencies
- Fix restore of influxdb measurement data from import/Export page
- Fix Gauge Widget Measurement options from being selected after saving
- Create scripts to automatically generate Input section of manual
- Add URLs to Input information
- Switch from deprecated SSLify to Talisman
- Update Python dependencies
- Fix Atlas Scientific pump on duration calculation
- Fix upgrade not preserving custom outputs
- Fix missing output device measurements in database (#779)
- Fix Atlas Scientific Pump Output timestamp parsing
- Fix translations
- Fix dependency check during upgrade
- Fix Atlas Scientific Pump Output
With this release comes the ability to write and import custom Outputs. If you want to utilize an output that Mycodo doesn't currently support, you can now create your own Output module and import it to be used within the system. See Custom Outputs in the manual for more information.
WARNING: There are changes with this version that may cause issues with your currently-configured outputs. Therefore, after upgrading, test if your outputs work and update their configuration if needed.
- Fix PID Widget preventing graph custom colors from being editable
- Fix graph Widget custom color issues (#760)
- Fix PWM Trigger Functions reacting to 0 % duty cycle being set (#761)
- Fix KeyError if missing options when saving Input
- Fix ZH03B Input: add repeat measurement option and discard erroneous measurements
- Fix update check IndexError if there's no internet connection
- Fix parsing API api_key from requests
- Fix the inability of Math Controllers to use converted measurements
- Fix Redundancy Math controller (#768)
- Fix display of Custom Controller options
- Fix hostname display on login page
- Fix missing blank line check for LCDs with 8 lines (#771)
- Fix unset user groups when executing shell commands
- Fix guest users being able to create dashboards
- Fix queries with updated influxdb Python library
- Add ability to write and import your own Custom Output Modules
- Add Input: VL53L0X (Laser-Range Measurement) (#769)
- Add Input: AS7262 Spectral Sensor (measures 450, 500, 550, 570, 600, and 650 nm wavelengths)
- Add Input: Atlas Scientific EZO Pressure Sensor
- Add ability to create custom Input actions
- Add MH-Z19/MH-Z19B Input actions: zero and span point calibrations
- Add unit conversions: PSI to kPa, PSI to cm H2O, kPa to PSI
- Add literature links to Input options: Manufacturer, Datasheet, Product
- Add 'tail dmesg' to System Information page
- Add Function Actions: System Restart and System Shutdown (#763)
- Add Conditional options: Log Level Debug and Message Includes Code
- Add Force Command option for Command/Python/Wireless Outputs (#728)
- Add ability to select which user executes Linux Output commands (#719)
- Add Cameras: URL (urllib), URL (requests)
- Add ability to encode videos from time-lapse image sets
- Add send_email() to Daemon Control object
- Upon controller activation, generate Input and Conditional code files if they don't exist
- Update Werkzeug to 1.0.1 (#742), Flask-RESTX to 0.2.0, alembic to 1.4.2, pyro5 to 5.8, SQLAlchemy to 1.3.15, distro to 1.5.0,
- Refactor Python Output code
- Update all translations (all complete)
- Rename MH-Z19 Input to MH-Z19B (and add MH-Z19 Input)
- Change Email Notification options to allow unauthenticated sending
- Add conversions: m <-> cm <-> mm
- Make PID Controller a class
- Restyle Output page (#732)
- Include error response in PWM/On-Off Command Output debug logging line
- Update InfluxDB to 1.8.0
- Fix invalid links to Help pages
- Prevent unstoppable Conditional Controller by adding self.running bool variable
- Fix calculation error causing inaccuracy with ADS1x15 analog-to-digital converter Input
- Remove PWM and Pump Outputs from Energy Usage calculations
- Fix links to camera widget error images
- Fix reference to input library to properly display 1-Wire device IDs (#752)
- If a camera output is already on when capturing an image, dont' turn it off after capture
- Discard first measurement of Atlas Scientific Inputs to prevent some erroneous measurements
- Fix display of setpoint on PID widget if a band is in use (#744)
- Fix Amp calculation (#758)
- Add temperature compensation option for the Atlas Scientific Electrical Conductivity and Dissolved Oxygen Inputs
- Add Inputs: Atlas Scientific Flow Sensor, Atlas Scientific RGB Color Sensor
- Add Function Action: Clear Total Volume of Flow Meter, Force Input Measurements
- Add option to repeat measurements and store average for ADS1x15 analog-to-digital converter Input
- Add PID option Always Min for PWM outputs to always use at least the min duty cycle (#757)
- Add email password reset
- Add prefix to device IDs when using w1thermsensor (#752)
- Fix determining frontend/backend virtualenv status
- Fix error detecting GPIO state during energy usage report generation (#745)
- Fix Atlas Scientific pH Input temperature calibration measurement
- Fix Atlas Scientific EZO-PMP flow mode not taking effect immediately upon saving
- Change deprecated w1thermsensor set_precision() to set_resolution()
- Fix setting DS sensor resolution (#747)
- Split DS18B20 Input into two files (one using w1thermsensor and another using ow-shell) (#746)
- Prevent users without "view settings" permission from viewing email addresses
- Fix TSL2561 input (#750)
- Add Temperature Offset option for BME680 Input (#735)
- Add ability to change number of stops for Gauge Widgets (#749)
- Fix logging level of calibration functions
- Populate setpoint in field of PID dashboard widget (#748)
- Fix daemon not being able to read measurements (#743)
- Fix logs appearing blank after logrotate runs (#734)
- Update Flask-Babel to 1.0.0 to fix broken werkzeug (#742)
- Increase install wait times to prevent timeouts (#742)
- Add BME680 temperature/humidity/pressure/VOC sensor (#735)
- Add measurement: resistance
- Add unit: Ohm
- Merge from Flask-RESTPlus to Flask-RESTX (#742)
- Improve sanity-checking of Input custom_options
- Improve sanity-checking of API endpoints (#741)
- Update pip requirements
- Fix error during upgrade check if there is no internet connection
- Fix MQTT input, prevent keepalive from being <= 0 (#733)
- Fix issue restarting frontend using diagnostic database delete feature
- Fix ability to import Inputs with measurements/units that don't exist in database (#735)
- Fix ability to modify measurement/unit names that Inputs rely on
- Fix inability to modify custom measurements
- Fix error when deleting dashboards from the Config->Diagnostics menu (#737)
- Fix dashboard gauges causing the dashboard to crash (#736)
- Refactor upgrade check code into class to reduce the number of hits to github.com
- Rearrange dashboard dropdown menu
- Allow creation of measurement/unit IDs with upper-case letters (#735)
- Update Bootstrap to 4.4.1
- Update Bootstrap themes
This update brings the ability to create multiple dashboards. The dashboard grid spacing has also changed, so you will need to resize your widgets.
This update also brings the ability to run Mycodo/Influxdb in Docker containers, enabling Mycodo to run outside the Raspberry Pi and Raspbian environment. For instance, I currently have Mycodo running on my 64-bit PC in Ubuntu 18.04. This is an experimental feature and is not yet recommended to be used in a production environment. See the Docker README for more information.
- Add ability to run Mycodo in Docker containers (#637)
- Add ability to create multiple dashboards (#717)
- Add Dashboard Widget: Spacer (#717)
- Add ability to hide Widget drag handle, set Widget name font size, and hide Graph Widget buttons (#717)
- Add ability to set Dashboard grid cell height
- Change grid width from 12 to 20 columns
- Update InfluxDB from 1.7.8 to 1.7.9
- Fix outputs not turning on
This update brings a new Dashboard organization method, allowing drag-and drop placement and resizing of widgets using gridstack.js. This new system is not comparable to the old; and after upgrading, all widgets will lose their size and position and will need to be repositioned on your dashboard.
- Fix Atlas Scientific UART interfaces
- Fix display of units in conversion list on Measurement Settings page
- Fix unit conversions for Math controllers (#716)
- Fix Wet-Bulb Humidity calculation in Math controller (#716)
- Fix disabled measurements not appearing for math controllers (#716)
- Fix disabled measurements from Math controllers still being recorded in influxdb
- Fix inability to select PID Controller with PID Control Widget (#718)
- Fix displaying image in Camera Widgets
- Fix display of measurement unit on Gauge Widgets
- Implement new method for arranging and sizing Dashboard Widgets (#717)
- Add API endpoints: /measurements/historical and /measurements/historical_function
- Add ability to set timestamp with /measurements/create API endpoint
- Display the entire log for the ongoing upgrade rather than only the last 40 lines
- Add Calibration: Atlas Scientific Electrical Conductivity Sensor (#710)
- Add Input: Mycodo Version (mainly for testing)
- Allow timestamp to be specified for Python 3 Code Input measurement creation (#716)
- Update Bootstrap to 4.3.1
- Update FontAwesome to 5.11.2
- Fix timeout errors during settings/influxdb database import
- Fix python3 version check during install (#714)
- Fix upgrade checking
- Fix doubling the amount used to calculate Amp draw during an output being turned on
- Add Python version check to Mycodo installer (#712)
- Daemon now checks for any newer version during upgrade check
- Allow any database version <= the currently-installed Mycodo version to be imported
Warning: This version will not work with Python 3.5 (Raspbian Stretch). Only upgrade if you have Python 3.7 installed (Raspbian Buster).
This version introduces an improved upgrade system and a REST API (requiring Python >= 3.6) for communicating with Mycodo (API Info and API Manual).
- Add REST API (#705)
- Fix Output control toaster always displaying error
- Fix translations not working (#708)
- Fix display of units on LCDs
- Fix inability of Graph Range Selector option to stay checked
- Add button to copy device UUID to clipboard
- Add ability to set IP, port, and timeout for upgrade internet check
- Add new Camera library: opencv
- Add ability for variables to persist in Conditional statements
- Add ability to import any database <= the current Mycodo version (database upgrade will be performed)
- Add ability to install all unmet dependencies when importing a database
- Improve upgrade system
- Fix issue querying data for Asynchronous graphs
- Add ability to select duty cycle step size for PWM Ramp Function Action (#704)
This update improves the backup/restore mechanism for the Mycodo InfluxDB time-series database. InfluxDB backups made prior to v7.8.5 will need to be restored manually. All new backups made will be in the Enterprise-compatible backup format, and only this format will be able to be restored moving forward. See Backing up and restoring in InfluxDB for more information.
This update also moves the Camera options from the Settings to the Camera page, to be more in-line with the formatting of other pages.
- Fix Asynchronous Graphs not displaying data
- Fix Conditional Measurement (Multiple) Condition error
- Fix inability to set Raspberry Pi (raspi-config) settings from the Configuration menu
- Update InfluxDB database export/import to use new Enterprise-compatible backup format
- Add general camera options: stream height/width, hide last still, and hide last timelapse (#703)
- Add picamera options: white balance, shutter speed, sharpness, iso, exposure mode, meter mode, and image effect (#313, #703)
- Add Function Action: Ramp PWM (#704)
- Add Conditional Conditions: Measurement (Single, Past, Average), Measurement (Single, Past, Sum) (#636)
- Move camera settings from Settings page to Camera page
- Actually fix inability to save PID options (#701)
- Fix inability to save PID options (#701)
- Fix Output Action
- Fix copying custom controllers during upgrade
This release brings a big feature: Custom Controllers. Now users can import Custom Controllers just like Custom Inputs. There is a new settings section of the Configuration menu called Controllers, where a single-file Custom Controller can be imported into Mycodo. This new controller will appear in the dropdown list on the Functions page, and will act like any other function controller (PID, Trigger, LCD, etc.). See the Custom Controllers section of the manual.
There's also a new Android app, Mycodo Support that provides access to several Mycodo support resources.
- Fix Atlas Scientific EZP Pump not working with PID Controllers (#562)
- Fix Output page not showing Duty Cycle for PWM Output status
- Fix blank Live page if Inputs added but not yet activated
- Fix inability to capture photos with USB camera (#677)
- Fix issues related to influxdb not fully starting before the Mycodo daemon
- Fix timeout exporting large amounts of data
- Add ability to import Custom Controllers (See Custom Controllers)
- Add ability to set PWM Output startup and shutdown state (#699)
- Add Dashboard Widget: Output PWM Range Slider (#699)
- Add ability to use Input/Math measurements with PID setpoint tracking (#639)
- Add search to Function select
- Remove Flask_influxdb
- Upgrade Influxdb from 1.7.6 to 1.7.8
- Fix issue displaying Outputs on Asynchronous Graph
- Add Start Offset option for Inputs
- Add ability to disable Graph series Data Grouping
- Rename Conditional Statement measure() to condition() in Conditional Controllers
- Add description for all Conditional Conditions and Actions
- Fix LCD controller
- PEP8
- Improve error/debug logging
- Add reset to SHT31 Input when it errors (#695)
- Add LCD Line: Custom Text
- Add Input: BME280 using RPi.bme280 library (#694)
- Add "Library" to distinguish inputs that use different libraries to acquire measurements for the same sensor
- Fix Outputs not showing up on Dashboard and mislabeled measurements (#692)
- Update wiringpi to fix issue with Raspberry Pi 4 board (#689)
- Add Conditional Conditions: Output Duration On, Controller Running (#691)
- Remove the need for Pyro5 Nameserver (#692)
- Add Flask profiler
- Fix inability to activate Conditional Controllers (#690)
- Improve post-alembic upgrade system
- Improve Pyro5 logging
- Fix issue with Pyro5 proxy handling (#688)
- Fix missing Stdout from several log files
- Fix wait time for Atlas Scientific pH Calibration (#686)
- Add 'minute' measurement storage to EZO Pump Output
- Fix database upgrade issues
- Add ability to store multiple measurements for Outputs (#562)
- Add Calibration: Atlas Scientific EZO Pump (#562)
- Add ability to select pump modes for Atlas Scientific EZO Pump (#562)
- Add ability to enable Daemon debug mode from Configuration page
- Add ability to use FTDI to communicate with Atlas Scientific EZO Pump
- Upgrade from Pyro4 to Pyro5
- Remove redundant alembic upgrade that can cause upgrade errors
- Fix moving Conditional/input code during upgrade
- Generate Conditional/input code for next upgrade
- Fix MQTT Input (#685)
- Fix Atlas Scientific EZO Pump Input issue (#562)
- Fix Atlas Scientific EZP Pump Output (UART) error on Output page
- Fix Atlas Scientific pH Input issue (#686)
- Fix issues with calibration of Atlas Scientific pH sensor (#686)
- Add ability to choose 1, 2, or 3 point pH calibration of Atlas Scientific pH sensor (#686)
- Fix issue with Pyro4
- Fix issue with Trigger controllers
This release changes how user-created Python code is executed. This affects Python Code Inputs and Conditional Functions. All effort was made to reformat user scripts during the upgrade process to adhere to the new formatting guidelines, however there are a few instances where scripts could not be updated properly and will need to be done manually by the user before they will work properly. After upgrading your system, ensure your code conforms to the following guidelines:
- Conditional Functions
- Use 4-space indentation (not 2-space, tab, or other)
- Change measure() to self.measure()
- Change measure_dict() to self.measure_dict()
- Change run_action() to self.run_action()
- Change run_all_actions() to self.run_all_actions()
- Change message to self.message
- Python Code Inputs
- Use 4-space indentation (not 2-space, tab, or other)
- Change store_measurement() to self.store_measurement()
- Fix sunrise/sunset calculation
- Fix inability to use "," in Input custom options
- Fix install dependencies for Ruuvitag Input (#638)
- Fix reliability issue with Ruuvitag Input (crashing Mycodo daemon) (#638)
- Fix storing of SHT31 Smart Gadget erroneous measurements
- Prevent Pyro4 TimeoutErrors from stopping PID and Conditional controllers
- Improve Controller reliability/stability
- Fix path to pigpiod (#684)
- Add Pylint test for Python 3 Code Input
- Add execute_at_creation option for Inputs
- Add Measurement: Radiation Dose Rate
- Add Units: Microsieverts per hour (µSv/hr), Counts per minute (cpm)
- Add 'message' option for custom Inputs to display a message with the Input options in the web interface
- Add more logs to view and consolidate "View Logs" page
- Add automatic initialization of Input custom_options variables
- Refactor how user-created Python code is executed (i.e. Python Code Inputs and Conditional Statements)
- Refactor RPC by replacing RPyC with Pyro4 for improved system stability (#671, #679)
- Increase Nginx file upload size
- Reorganize menu layout
- Modify linux_command exception-handling (#682)
- Fix calculating VPD
- Add Python 3 Code execution Input
- Various fixes for Raspbian Buster (#668)
- Fix TH1X-AM2301 Input (#670)
- Fix inability of Input custom_options value to be 0
- Fix improper unit conversion for TH1X-AM2301 Input (#670)
- Fix Bash Command Input script execution (#667)
- Add MQTT (paho) Input (#664)
- Add timeout option for Linux Command Input
- Fix TTN Data Input timestamps
- Fix rare measurement issue with Ruuvitag
- Ensure Output Controller has fully started before starting other controllers (#665)
- Fix module path of mycodo_client.py when executed from symlink (#665)
- Fix "getrandom() initialization failed" with rng-tools (#663)
- Fix issues with TH16/10 with AM2301 and Linux Command Inputs (#663)
- Add Debug Logging as an LCD option
- Add traceback to error message during adding Input (#664)
- Fix Ruuvitag Input
- Fix issues with SHT31 Smart Gadget and Ruuvitag Inputs (#638)
- Fix 500 Error generating measurement/unit choices (#662)
- Change AM2320 Input code (#585)
- Fix issue with Base Input
- Increase Live page measurement query duration to fix the display of Input measurements
- Add influxdb read/write wait timers to prevent connection errors at startup before influxdb has started
- Add --get_measurement parameter to mycodo_client.py
- Replace locket with filelock
- Prevent rapid successive measurements from inputs after measurement delay
- Increase lock timeout for Ruuvitag and SHT31 Smart Gadget (#638)
- Fix IO error during locking for Ruuvitag (#638)
- Fix pytests
- Add RPyC Timeout configuration option
- Allow multiple PIDs to use the same output (#661)
- Add timeout parameter to cmd_output() function
- Refactor Min Off Duration to be centrally controlled by the Output Controller (#660)
- Prevent logging aberrant SHT31 Smart Gadget measurements
- Handle type casting issues with Ruuvitag Input
- Add Tags to Custom Colors selection of Graphs (#656)
- Fix issues with Single Channel Sum and Average Math controllers
- Fix inability to change Measurement Conversion back to "Do Not Convert"
- Avoid build error with bcrypt 3.1.6 by lowering to version 3.1.4 (#658)
- Fix issue with conversion calculation in wet-bulb humidity function
- Add Function Actions: Raise/Lower PID Setpoint (#657)
- Add Unit: Pounds per square inch (psi) (#657)
- Fix issues with logging
- Fix bug in Input get_value() (#654)
- Fix storing latest SHT31 Smart Gadget measurements
- Fix Base Input __repr__ and __str__
- Fix unaccounted PID error if activation attempted when Measurement not set (#649)
- Fix missing GPIO Pin sanity check (#650)
- Fix "Unknown math type" filling log (#651)
- Fix inability to stop PID autotune (#651)
- Fix incomplete display of PID Settings on Mycodo Logs page
- Add Conditional Condition: Measurement (Multiple)
- Add ability of Inputs to store measurements with the same or separate timestamps
- Add option to show debug lines in Daemon Log (for Input/Math/PID/Trigger/Conditional)
- Add Log Filters: Daemon INFO, Daemon DEBUG
- Add Input: TH1x with DS18B20 (#654)
- Update InfluxDB to 1.7.6
- Fix Sunrise/Sunset calculation
- Update Infrared Remote section of manual to work with latest kernel
- Add Bluetooth locking to prevent broken pipes
- Add Input: RuuviTag (#638)
- Add Inputs: Atlas Scientific ORP, Atlas Scientific DO (FTDI, UART, I2C) (#643)
- Add Reset Pin option and editable location for SD1306 OLED display (#647)
- Fix Average (single) and Sum (single) Math controllers with an Output selected
- Fix custom input preservation during upgrade
- Include Pre Output activation during Acquire Measurements Now instruction
- Fix Outputs triggering at startup
- Fix CCS811 Input measurement issue (#641)
- Fix Math controller (equation)
- Fix sending email notification to multiple recipients
- Prevent RPyC TimeoutError from crashing PID controller
- Add Input: The Things Network: Data Storage Integration
- Add Math controllers: Sum (past, single channel), Sum (last, multiple channels)
- Add Outputs to Math controllers: Average, Redundancy, Statistics, Sum
- Add 'required' option for Input 'custom_options' (indicates if option is required to activate Input)
- Add 'Output State' ('on', 'off', or duty cycle) Condition for Conditional controllers (#642)
- Change channel designations to start at 0
- Fix settings menu layout
- Significantly improve speed of dependency-checking
- Fix missing names for Function Actions
- Add dependency system for Function Actions
- Add proper dependencies for infrared Send Function Action
- Improve Infrared Send Action by detecting remotes and codes
- Fix issue with check_triggers() in output controller
- Fix issue preventing export of Notes
- Fix table issue on Note page
- Add Function Trigger: Infrared Remote Input
- Add Function Action: Infrared Remote Send
- Remove redundant Output (Duration) Trigger (use Output (On/Off) Trigger)
- Fix unset channel causing 500 error (#631)
- During first install, initialize after install of influxdb
- Add wiringpi to install
- Fix issue with SHT31 Smart Gadget disconnect error-handling
- Prevent dashboard camera streaming if using the fswebcam library (#630)
- Fix number of line characters for 20x4 LCDs (#627)
- Fix PID Dashboard widget issues
- Add option to set Output shutdown state (on/off/neither)
- Add log line of PID settings when activated or saved
- Add PID Settings button to Mycodo Logs page
- Remove bluepy version restriction that conflicts with another requirement for the latest version
- Fix Energy Usage calculations
- Fix output controller startup issue
- Fix notes duplicating on graphs
- Fix inability of Function Action (Output PWM) to set a duty cycle of 0
- Fix inability of Function Action (Activate Controller) to activate Conditional
- Fix pigpio dependency issue (#617)
- Add asynchronous graphs to Energy Usage summaries
- Improve error-handling of Function Actions
- Fix calculating Output Usage
- Fix error-handling of PWM signal generation (#617)
- Fix output dependency issue (#617)
- Add new energy usage/cost analysis based on amperage measurements (See Energy Usage in the manual)
- Add password recovery feature (technically just creates new admin user from the command line)
- Add LCD: 128x64 OLED (#589)
- Improve SHT31 Smart Gadget module
- Update Translations
- Add Languages: Dutch, Norwegian, Serbian, Swedish
- Fix issue downloading logged data from SHT31 Smart Gadget
- Fix issue using PID measurements on Measurement Dashboard widget (#616)
- Fix issue with Python Command Output variable declaration
- Add Dashboard widget: Indicator (#606)
- Fix dependency issue preventing Mycodo installation (#614)
- Add Diagnostic option: Delete Settings Database
- Fix missing PID Setpoint measurement
- Fix missing location option for Free Space Input
- Fix Method editing
- Fix Conditional Statement testing during form save (#610)
This release changes Conditional behavior. After upgrading to this version, your Conditional Statements should have every Condition '{ID}' changed to 'measure("{ID}")'. Check every Conditional after the upgrade to ensure they work as expected. Additionally, the recommended logic to store and test measurements has changed, so review the Examples in the Conditionals section of the manual.
- Fix Error message when activating/deactivating controllers (no actual error occurred)
- Fix (workaround) for inability to display Note whitespaces on Graphs
- Add ability to conduct individual measurement in Conditional Statements (#605)
- Add ability to execute individual actions in Conditional Statements (#605)
- Add ability to modify the Conditional message (#605)
- Add Function Actions: Email with Photo Attachment, Email with Video Attachment
- Fix missing Atlas pH Input baud rate option (#597)
- Fix properly displaying I2C/UART Input options
- Fix issue requiring action selection to submit form (#595)
- Fix output duration not being logged if settings saved while output is currently on
- Fix instability of dependency system
- Fix missing libglib2.0-dev dependency of SHT31 Smart Gadget
- Add FTDI support for Atlas Scientific sensors (#597)
- Add Output option to trigger Functions at startup
- Update SHT31 Smart Gadget Input module
- Fix issue with converted measurements unable to be used with Conditionals (#592)
- Add pi-bluetooth to SHT31 Smart Gadget dependencies (#588)
- Fix issue using PIDs and Graphs with converted measurement units (#594)
- Fix issue with mixed up order of Graph series
- Fix issue recording output durations
- Add OWFS support for 1-wire devices (currently only DS18B20, DS18S20 supported) (#582)
- Add ability to delete .dependency and .upgrade files from the web UI (#590)
- Update several Python modules, update InfluxDB to 1.7.2
- Update manual FAQs
- Fix rendering new lines in Note text on graphs
- Fix display of proper unit on Measurement Dashboard element (#583)
- Fix missing libjpeg-dev dependency for PiOLED (#584)
- Fix dependencies for AMG88xx Input
- Add Function Action: Create Note
- Add Input: Sonoff TH10/16 humidity and temperature sensor (#583)
- Add Input: AM2320 I2C humidity and temperature sensor (#585)
- Change method for detecting 1-wire devices (#582)
- Disable variable replacement in Command Execution Function Action until it can be fixed to work with new measurement system
- Fix inability to reorder Dashboard, Data, Output, and Function elements
- Fix Edge Inputs not appearing in Edge Trigger input selection
- Fix use of Atlas pH temperature calibration from Input/Math
- Add Additional check for Conditional Statements if {ID} is replaced with None (#571)
- Add ability to set Logging Interval and download logged data from SHT31 Smart Gadget (#559)
- Add Math: Input Backup: If a measurement of an Input cannot be found, look for a measurement of another (or another, etc.) (#559)
- Add check so SHT31 Smart Gadget user options don't cause the number of stored measurements to exceed the internal memory
- Fix PiOLED LCD from changing I2C address when options are saved (#579)
- Fix Generic 16x2/16x4 LCD display issue (#578)
- Fix Math Add dropdown items having the same name (#580)
- Add ability to induce an Input to acquire/store measurements from the web UI
- Add Input: SHT31 Smart Gadget (Bluetooth) humidity/temperature sensor (#559)
- Add blank line to LCD display options (#579)
- Add verification for Conditional Statement code
The Mycodo 7.0 introduces many redesigned systems, including measurements/units, conversions, conditionals, and more (see full list, below). The remnants of Conditionals have been moved to a new controller, called Triggers, which executes actions in response to event triggers (such as time-based events, Output changes, sunrises/sunsets, etc.). The new Conditional system incorporates a powerful way of developing complex conditional statements. See (#493) for more information. Since earlier versions are not compatible with 7.x, all 6.x users will have to perform a fresh install or delete their settings database. An option will be presented on the upgrade page to delete the database and perform an upgrade.
- Fix issue preventing PID Method from changing setpoint (#566)
- Fix issue with calibration of DS-type sensors
- Fix module loading issue by restarting the daemon following dependency install (#569)
- Fix issue adding Daily Time-Based method (#550)
- Add Function: Execute Actions
- Add Function Action: Pause (pause for a duration of time between executing specific actions)
- Add Input: MCP9808 (I2C) high accuracy temperature sensor
- Add Input: AMG8833 (I2C) 8x8 pixel thermal sensor
- Add Input: SHT31 (I2C) humidity/temperature sensor
- Add LCD: PiOLED 128x32 (I2C) LCD (#579)
- Add Output: Python Command (On/Off and PWM)
- Add Output: Atlas EZO-PMP (I2C/UART) Peristaltic Pump (#562)
- Add Vapor Pressure Deficit calculation to Inputs that measure temperature and relative humidity (#572)
- Add Vapor Pressure Deficit Math controller (#572)
- Add Start Offset option for PID, Math, and Conditionals
- Add ability to search Input selection dropdown list
- Refactor Conditional system (#493)
- Refactor Analog-to-digital converters (#550)
- Refactor Measurement/Unit system (#550)
- Refactor Conversion system (#493)
- Upgrade InfluxDB from 1.6.0 to 1.7.0
- Add User Role: Kiosk
This is the final release of version 6.x. Upgrading to 7.x will require a database wipe. This will be an option presented in the Mycodo upgrade page. If you do not want to lose your Mycodo data (settings AND measurement data), do not upgrade to 7.x.
- Fix issues with ADS1256 module (#537)
- Fix issue with saving float values
- Replace smbus with smbus2 (#549)
- Add enhanced reorder functionality for Input, Output, Math, PID, and Conditional controllers
- Add ability to set camera still, timelapse, and video file save locations (#498)
- Add ability to export/import notes and note attachments (#548)
- Fix authentication issue with Remote Administration
- Fix issues with ADS1256 module (#537)
- Fix issue with saving float values
- Replace smbus with smbus2 (#549)
- Fix authentication issue introduced in 6.4.2
- Add MH-Z19 option: enable/disable automatic baseline correction (ABC)
- Add ability to Test/trigger all Conditional Actions of a Conditional (#524)
- Fix Cozir module pycozir egg
- Fix often-erroneous first measurement of ZH03B and MH-Z19 sensors
- Fix issue with ADS1256 module (#537)
- Fix database upgrade issue
- Add Input: ADS1256 Analog-to-digital converter (#537)
- Add ability to create custom options for Input modules (#525)
- Add conversions between ppm/ppb and percent
- Fix issue determining PID setpoint unit on LCDs
- Fix issue displaying IP address on LCD
- Fix issue with client activating controllers (#532)
- Fix issue with Linux Command Input (#537)
- Fix issue with installing internal dependencies (e.g. pigpiod) (#538)
- Potential fix for Miflora input (#540)
- Fix missing Baud Rate option for K30 input (#541)
- Fix 500 Error on Raspberry Pi Config page (#536)
- Add turning ABC mode off during MHZ19 input initialization (#546)
- Fix German "Output" translation
- Fix issue with installing dependencies (#531)
- Fix issue with Edge devices
- Fix issue with database upgrade
- Fix issue with database upgrade
- Fix issue with Edge devices
- Fix issue with 1-Wire devices (#529)
- Fix issue with note system during upgrade (#529)
- Fix Cozir input issue
- Fix ZH03B input
This release adds the ability to import input modules, allowing new inputs to be created by the user. Documentation (https://github.com/kizniche/Mycodo/blob/master/mycodo-manual.rst#create-your-own-input-module) for developing your own input modules is in development. See issue #525 for more information about it's development and discussion. Also with this release is a new section for Notes (More -> Notes, https://github.com/kizniche/Mycodo/blob/master/mycodo-manual.rst#notes). Notes are associated with one more more tags that can be created. Notes can also have files attached to them. These notes can be displayed on graphs to easily identify when a certain event happened in the past (or future).
- Add Winsen ZH03B Particulate sensor (#346)
- Reduce install to one command
- Fix inability to set camera device (#519)
- Fix initialization of UART MHZ16 (#520)
- Fix issue with BMP280 (#522)
- Fix issue with major version upgrade initialization
- Fix issue with PWM output dashboard element updating (#517)
- Fix dependency check for DS-type sensor calibration (#518)
- Fix issue with Adafruit deprecating BMP, TMP, and CCS811 (#346, #503)
- Add translations: Italian, Portuguese
- Fix display of IP address on LCD (#507)
- Fix graph manual y-axis min/max (#516)
- Fix issue with deleting all dashboard elements
- Add Diagnostic section of configuration menu with first function: Delete All Dashboard Elements (#515, #516)
- Fix issue with units on LCDs (#514)
- New measurement/unit configuration system (select which unit to convert/store for input measurements) (#506)
- Add ability to create new measurements, units, and conversions (#506)
- Enable conversion of disk space (kB, MB, GB), frequency (Hz, kHz, MHz), and humidity (%, decimal)
- Add option to display IP address on LCD (#507)
- Full German Translation (#507) (@pmunz75)
- Add PID Autotune feature (currently disabled; may be enabled in the release, pending testing)
- Add New Translations: Russian, Chinese
- Complete Translations: German, Spanish, French
- Fix issue activating Cozir CO2 sensor (#495)
- Fix issue with order not updating correctly when Conditional is deleted
- Fix issue with output usage report generation (#504)
- Fix proper conversion of temperatures/pressure for Wet-Bulb Humidity Math
- Fix Atlas pH UART sensor module (#509)
- Update InfluxDB 1.5.0 -> 1.6.0
- Increase verbosity of conditional email notification
- Add Cozir CO2 sensor Input (#495)
- Allow CO2 to be converted from ppm <-> ppb
- Fix pressure measurements being forced to integer (#476)
- Fix CCS811 Input measurement (#467)
- Fix pigpio dependency install issue
- Prevent pre-output from remaining on after an Input is deactivated
- Enable unit conversions for AM2315
- Fix issue setting PID setpoint from Dashboard (#496)
- Fix displaying custom graph colors (#491)
- Remove I2C support for K30 CO2 sensor (until properly tested)
- Update to Bootstrap 4.1.1
- Remove remaining Fahrenheit conversions from Live page
- Update 433 MHz wireless script (test send/receive, determine/receive commands from remote)
- Add I2C support for K30 CO2 sensor (untested)
- Fix service executable location (#487)
- Fix inability to set duty cycle from frontend (#485)
- Fix (finally) saving Time-based Conditional times (#488)
- Add option to set Miflora Bluetooth adapter (#483)
- Fix exception-handling of sending test email (#471)
- Fix HDC1000 initialization issue (#467)
- Fix Command PWM frontend issues (#469)
- Fix ADC modules (#482)
- Update miflora to 0.4 (#481)
- Fix BH1750 sensor (#480)
- Update alembic, Flask, Flask_CSV, geocoder, gunicorn, imutils, pytest, python-dateutil, SQLAlchemy, testfixtures
- Add CCS811 CO2 sensor input (#467)
- Add HDC1000/HDC1080 Temperature/Humidity sensor input (#467)
- Add Pascal/kiloPascal conversion for pressure
- Add ppm/ppb conversion for CO2 and VOC concentration
- Improve accuracy of float measurement values
- Add option to set camera output duration (before image capture)
- Improve handling of multiple queries to a single device
- Fix saving settings of Conditional Timers (#470)
- Fix Command PWM output use in PIDs (#469)
- Fix proper display of Outputs in Conditionals (#469)
- Add Output (Duration) Conditional (#186)
- Fix refreshing settings of active conditional controllers
- Fix saving settings of Conditional Timers (#464)
- Add ability to change sample rate of controllers (#386)
- Fix display of graph custom y-axis names
- Fix inability to change pigpiod sample rate (#458)
- Fix issue with Edge Input
- Fix issue with Conditional timers
- Fix issue with BME280 dependency identification
- Add Conditional: Time Span (#444)
- Fix dependency check (#422)
- Try lower integration times when TSL2561 sensor is saturated (#450)
- Fix DHT11/DHT22 output power check (#454)
- Fix scanning for DS18B20 sensors (#452)
- Fix upgrade issue
- Fix setting landing page (#452)
Version 6 has changes to the database schema that could not be upgraded to. To upgrade to this version, the settings database must be created anew. You either have the options of staying at the last version (5.7.x), or deleting the settings database and upgrading. A fresh install is necessary to run this version.
- Add Conditionals: Run PWM Method, Daily Time Point Timer, Duration Timer, Output PWM (#444, #448)
- Add Conditional Actions: Activate/Deactivate any controller, Set PID Method (#440)
- Use actual range value for color stops of solid gauges (#434)
- Add option to set setpoint from PID dashboard element without epanding element (#449)
- Refactor Conditional Controllers to be multithreaded
- Fix Hold bug in PID controllers
- Fix error-handing when changing PID setting from Dashboard if PID is inactive (#449)
- Remove multiplexer integration (use kernel driver)
- Remove Timers (Conditionals have replaced their functionality)
- Improve testing coverage of frontend (#444)
This is the last version of the 5.x branch. If your system is upgraded to 5.7.3, you will have the option of upgrading to the next major version (6.x), however the settings database will need to be deleted. This can be done through the web UI or manually by reinstalling Mycodo fresh.
- Add Conditional Action: Set PID Method (#440)
- Add ability to invert PWM duty cycle (#444)
- Add ability to select landing page (#444)
- Add ability to set setpoint from PID dashboard elements (#444)
- Add Conditional Actions: Activate/Deactivate Timer (#440)
- Fix catching erroneous DS18B20 values (#404)
- Fix camera selection of Photo Conditional Action (#444)
- Add Conditional Action: Set PID Setpoint
- Add Input: Xiaomi MiFlora (#422)
- Restore missing help menu on navigation bar
- Fix issue reading SHT sensors (#437)
- Convert README and Manual from MD to RST
- Update sht_sensor to 18.4.1
- Add ability to convert Input measurements between units (#346)
- Add unit conversions: celsius, fahrenheit, kelvin, meters, feet
- Add ability to select whether lowering PID outputs are stored as positive or negative values
- Add Sunrise/Sunset Conditional (#440)
- Add ability to set the precision for DS18B20, DS1822, DS28EA00, and DS1825 sensors (#439)
- Add Inputs: DS18S20, DS1822, DS28EA00, DS1825, MAX31850K
- Add Input option to select resolution for DS18B20, DS1822, DS28EA00, and DS1825 (#439)
- Fix issues with PID control on Dashboard (#441)
- Improve LCD controller shutdown speed
- Fix installer not displaying progress in console (#442)
- Force measurement values to float before writing to influxdb (except 'pressure') (#441)
- Fix issue executing mycodo_client.py
- Fix Command Outputs not turning off after turning on for a duration (#432)
- Prevent DS18B20 measurements outside expected range (#404)
- Prevent race condition preventing output from remaining on for a duration (#436)
- Ensure outputs turned on for a duration only turn off once (#436)
- Update sht-sensor to 18.3.6 for Python 3 compatibility (#437)
- Change SSL certificate expiration from 1 year to 10 years
- Fix style issues with Remote Admin following Bootstrap upgrade
- Fix issue with setup.sh script not catching errors
- Add Refractory Period to Measurement Conditional options
- Add method to hide/show/reorder all Dashboard Elements at once (#346)
- Make Output/PID popups respond to show/hide configuration options (#346)
- Add Input: Atlas Electrical Conductivity sensor (#411)
- Fix issue saving reference resistor value (#345)
- Fix LCD display of timestamps
- Fix inability to change Solid Gauge Stops (#433)
- Fix Command Outputs not turning off after turning on for a duration (#432)
- Fix encoding issue with df command output (#430)
- Fix Camera Output not having an effect
- Fix issues with MAX31856/MAX31865 (#345)
- Fix upgrade menu not turning red when an upgrade is available
- Add lockfile breaking (#418)
- Fix bcrypt dependency issue preventing install (#429)
- Add Input: MAX31865 for PT100 and PT1000 temperature probes (#345)
- Fix incorrect conversion of I2C address during Atlas pH sensor calibration (#425)
- Potential fix for ADC issues when using pre-output (#418)
- Fix Linux Command measurement display on lines 2 through 4 of LCDs (#427)
- Fix display of PID setpoint units on LCDs
- Fix display of LCD lines without measurement units
- Fix locking to be thread safe (replaced fasteners with locket) (#418)
- Update to Bootstrap 4
- Update to InfluxDB 1.5.0
- Add proper max voltage for MCP3008 (#418)
- Fix PID persisting as paused/held after deactivating and activating
- Fix Atlas pH Calibration issue (#425)
- Fix issue with Linux Command Inputs and LCDs (#427)
- Add Input: MAX31856 for measuring several types of thermocouples (K, J, N, R, S, T, E, and B) (#345
- Add mycodo_client.py option: get or set PID setpoint, integrator, derivator, kp, ki, and kd (#420)
- Add option to enable pre-output during measurement (previously turned off before measurement) (#418)
- Fix frontend pid in System Information page
- Fix issue with mycodo_client.py PID hold and resume commands
- Make rpi-rf an optional Output dependency
- Add ability to use custom command line options for fswebcam camera image captures (#419)
- Add Input: MAX31855K for measuring K-type thermocouples (#345)
- Add ability to set duty cycle of output via mycodo_client.py (#420)
- Add Conditional Action: Output PWM (#420)
- Add Output Type: Execute Command (PWM) (#420)
- Fix LCD issues
- Fix state display of Command Outputs turned on for a duration
- Make install of WiringPi optional (#412)
- Make install of numpy optional (#412)
- Add pause color and Pause/Hold/Resume buttons to PID Dashboard element options (#416)
- Display a log when installing dependencies to follow the progress
- Add Dependency Install Log to the Log page
- Add mycodo_client.py user commands: pid_pause, pid_hold, pid_resume
- Fix issues with PID Conditional Actions (#416)
- Fix display of last edge on Live page
- Fix issue updating the status of some dependencies after their install
- Remove redundant upgrade commands (#412)
- Remove GPIO State from Edge Conditional (use Measurement Conditional) (#416)
- Add Conditional Actions: Pause/Resume PID (#346)
- Fix pigpiod configuration options when pigpiod is not installed (#412)
- Fix setting up pigpiod during install
- Fix TSL2561 Input module (#414)
- Fix Measurement Dashboard element condition/unit display (#346)
- Fix saving PID Conditional Actions (#415)
- Add interactive installer
- Make Python modules conditionally imported (#412)
- Add new Input: MCP3008 Analog-to-Digital Converter (#409)
- Add option to set decimal places on Dashboard elements (#346)
- Add option to show detailed PID information on Dashboard element (#346)
- Add units to PID Dashboard element (#346)
- Add Fahrenheit conversion to gauges (#137)
- Add new Math: Average (Single Measurement) (#335)
- Allow disabled pigpiod to persist after upgrades (#386)
- Fix display of Math measurement/units of Measurement Dashboard element
- Prevent a large D-value the the first cycle after a PID is activated
- Handle TypeErrors for Humidity Math controller
- Add PID-Values to Graphs (#346)
- Add Dashboard elements: Measurement, Output, PID Control (#346)
- Add system date and time to menu
- Add checks to ensure Humidity Math only returns 0% - 100% humidity
- Prevent opposing relays from being turned off in PID Controllers (#402)
- Fix adding and viewing hosts in Remote Admin (#377)
- Fix error-handling of DS18B20 communication error (#404)
- Add error-handling for influxdb queries (#405)
- Add error-handling of DS18B20 communication error (#404)
- Fix setup abort from unmet pigpiod dependency (#406)
- Add new configuration section: Pi Settings
- Add to Pi Settings: common
raspi-config
options - Add to Pi Settings: select pigpiod sample rate (#386)
- Add option to completely disable pigpiod (#386)
- Add ability to set custom Graph colors for Math measurements
- Enable custom minimum/maximum to be set for any y-axis (#335)
- Add Asynchronous Graph options for duration of data to display (All or past year, month, week, day)
- Fix saving Math Humidity options (#400)
- Allow multiple data series on Asynchronous Graphs (#399)
- Add Outputs and PIDs to Asynchronous Graphs (#399)
- Preserve Asynchronous Graph selections after form submissions (#399)
- Fix reloading of asynchronous graphs (#399)
- Add option to show/hide Gauge timestamp (#392)
- Add new Math: Equation (#335)
- Add PID control hysteresis (#398)
- Automatically restart pigpiod when it fails
- Move pigpiod from cron to systemd service to improve reliability (#388)
- Improve deamon error-handling and Input connectivity (#388)
- Fix Mycodo service timeout (#379)
- Fix display of Graph custom colors
- Fix issue with conditionals not triggering when measurement values are 0 (#387)
- Fix issue with settings Output PWM duty cycles
- Fix issues with Atlas UART module (#382)
- Fix issues with calibrating the Atlas pH sensor (#382)
- Add Graph button to manually update graph with new data
- Increase output timing accuracy (0.01 second, previously 0.1 second)
- Improve graph update efficiency
- Add Graph option: Enable Graph Shift (used in conjunction with Enable Navbar)
- Add new Math: Difference (#395)
- Fix issue modifying the Conditional Max Age (#387)
- Fix issue with new data on graphs requiring a page refresh to see
- Fix issue with updating inputs/maths with long periods on the Live page
- Remove debug line from GPIO State Input module (#387)
- Fix display of PID timestamp on LCDs
- Fix missing pigpio.zip (breaks install/upgrade) on remote server (package pigpio.tar with Mycodo)
- Add Input: GPIO State (#387)
- Refactor Dashboard code (improve load time, reduce code size)
- Fix inability to change Input Period (#393)
- Fix Exception while reading the GPIO pin of Edge Conditional (#387)
- Add Input Template for the Wiki
- Add two new Inputs: Server Ping and Server Port Open (#389)
- Fix issues with Dashboard Gauges (#391)
- Fix issues with Dashboard Cameras
- Add ID numbers to Conditionals in UI for identification (#387)
- Add ability to set graph y-axis minimum/maximum (#384)
- Add ability to view Math outputs on asynchronous graphs (#335)
- Improve Dashboard Object creation/manipulation user interaction
- Fix inability to activate Edge Conditionals (#381)
- Fix inability to add new gauges or graphs to the dashboard (#384)
- Fix issues with UART Atlas pH Input device (#382)
- Fix issue with Atlas pH calibration (#382)
- Fix issue with caching of Camera images on the Dashboard
- Fix issue with Edge Conditionals (#387)
- Add ability to add Camera modules to the Dashboard (formerly Live Graphs page)
- Fix issue with new installations failing to start the flask frontend (#379)
- Fix issue with services starting on Pi Zeros (#379)
- Reduce gunicorn (web UI) workers from 2 to 1
- Fix forcing of HTTPS via user configuration
- Fix inability to save Gauge Refresh Period option (#376)
- Fix Atlas Scientific communication issues (#369)
- Add ability to restart the frontend from the web UI
- Attempt to fix issue where DHT22 sensor may become unresponsive
- Fix inability to stream video from PiCamera
- Fix IP address of user login log entries
- Fix issue reading DHT11 sensor (#370)
- Add ability to replace edge variable in edge conditional command action
- Fix issue with proper python 3 virtualenv (#362)
- Fix starting web server during install
- Fix issue with gunicorn worker timeouts on Raspberry Pi Zeros (#365)
- Fix command variable replacement for Output conditionals (#367)
- Fix pH Input causing an error with a deactivated Calibration Measurement (#369)
- Fix issue preventing capture of still images from the web interface (#368)
- Move mycodo root symlink from /var/www to /var
- Create symlinks in PATH for mycodo-backup, mycodo-client, mycodo-commands, mycodo-daemon, mycodo-pip, mycodo-python, mycodo-restore, and mycodo-wrapper
- Fix issue with web UI and daemon not restarting properly after upgrade
- Fix issue with the log not updating properly on the Upgrade page
- Add Conditional Actions: Flash LCD Off, LCD Backlight On, LCD Backlight Off (#363)
- Add more log lines to find out exactly which part makes the end of an upgrade hang
- Fix MHZ16/19 UART communication (#359)
- Fix missing I2C devices from System Information page (#354)
- Fix output state determination of other outputs if a wireless output is unconfigured (#364)
- Fix LCD controller issues with flashing and backlight management
- Fix inability to send Conditional email notification to multiple recipients
- Fix inability to select LCDs as Conditional Actions
- Fix BME280 sensor module (#358)
- Fix TSL2591 sensor module
- Fix MHZ16/MHZ19 unicode errors (still investigating other potential issues reading these sensors)
Merry Christmas!
With the release of 5.5.0, Mycodo becomes modern by migrating from Python 2.7.9 to Python 3 (3.5.3 if on Raspbian Stretch, 3.4.2 if on Raspbian Jessie). This release also brings a big switch from apache2+mod_wsgi to nginx+gunicorn as the web server.
You may experience an error during the upgrade that doesn't allow it to complete
It will no longer be possible to restore pre-5.5.0 backups
All users will be logged out of the web UI during the upgrade
All Conditionals will be deactivated and need reconfiguring
OpenCV has been removed as a camera module
If you rely on your system to work, it is highly recommended that you DO NOT UPGRADE. Wait until your system is no longer performing critical tasks to upgrade, in order to allow yourself the ability to thoroughly test your particular configuration works as expected, and top perform a fresh install if the upgrade fails. Although most parts of the system have been tested to work, there is, as always, the potential for unforeseen issues (for instance, not every sensor that Mycodo supports has physically been tested). Read the following notes carefully to determine if you want to upgrade to 5.5.0 and newer versions.
I found that occasionally the upgrade will spontaneously stop without an indication of the issue. I've seen it happen during an apt-get install and during a pip upgrade. It does not seem consistent, and there were no erorrs, therefore it wasn't able to be fixed. If you experience an error during the upgrade that doesn't allow the upgrade to complete, issue the following commands to attempt to resume and complete the upgrade. If that doesn't fix it, you may have to install Mycodo from scratch.
sudo dpkg --configure -a
sudo /bin/bash ~/Mycodo/mycodo/scripts/upgrade_post.sh
Restoring pre-5.5.0 backups will not work. This is due to the moving of the pip virtual environments during the restore, the post-5.5.0 (python3) virtualenv not being compatible with the pre-5.5.0 virtualenv (python2), and moving from the apache2 web server to nginx. If you absolutely need to restore a backup, it must be done manually. Create a new github issue to get asistance with this.
Also with this release, exporting and importing both the Mycodo settings database and InfluxDB measurement database has been added. These may be imported back into Mycodo at a later timer. Currently, the InfluxDB (measurement) database may be imported into any other version of Mycodo, and the Mycodo (settings) database may only be imported to the same version of Mycodo. Automatic upgrading or downgrading of the Mycodo database to allow cross-version compatibility will be included in a future release. For the meantime, if you need to restore Mycodo settings to a particular Mycodo version, you can do the following: download the tar.gz of the particular Mycodo Release compatible with your database backup, extract, install normally, import the Mycodo settings database, then perform an upgrade of Mycodo to the latest release.
Another consequence of changing from Python 2 to 3 is current browser cookies will cause an error with the web user interface. Therefore, all users will be logged out after upgrading to >= 5.5.0. This will cause some strange behavior that may be misconstrued as a failed upgrade:
-
The upgrade log will not update during the upgrade. Give the upgrade ample time to finish, or monitor the upgrade log from the command line.
-
After the upgrade is successful, the upgrade log box on the Upgrade page will redirect to the login page. Do not log in through the log box, but rather refresh the entire page to be redirected to the login page.
The Conditional code has been refactored to make them more modular. Because some conditionals will need to be reconfigured before they will operate corectly, all conditionals have been deactivated. Therefore, after the upgrade, reconfigure them appropriately, then reactivate. Additionally, conditionals (for all controllers) have been moved to a new 'Function' page.
A Python 3 compatible binary version of opencv, whoch doesn't require an extremely long (hours) compiling process, is unfortunately unavailable. Therefore, if you know of a library or module that can successfully acquire an image from your webcam (you have tested to work), create a new issue with the details of how you acquired the image and we can determine if the method can be integrated into Mycddo.
- Migrate from Python 2 to Python 3 (#253)
- Migrate from apache2 (+mod_wsgi) to nginx (+gunicorn) (#352)
- Add ability to export and import Mycodo (settings) database (#348)
- Add ability to export and import Influxdb (measurements) database (#348)
- Add size of each backup (in MB) on Backup Restore page
- Add check to make sure there is enough free space before performing a backup/upgrade
- Add dedicated, modular Conditional controller (#346)
- Add PID and Math to input options of Conditionals
- Fix deleting Inputs (#250)
- Fix 500 error if 1-wire support isn't enabled
- Fix Edge Detection Input callback function missing required parameter
- Fix LCD display of Output duty cycle
- Fix email notification
- Make Conditional email notification send after last Action to include all Actions in message
- Disable the use of the opencv camera library
- Update translations
- Combine Input and Math pages to a new 'Data' page
- Move Conditionals and PIDs to a new 'Function' page
- Show tooltips by default
- Add ability to use other Math controller outputs as Math controller inputs
- Add checks to ensure a measurement is selected for Gauges
- Fix not deleting associated Math Conditionals when a Math controller is deleted
- Fix displaying LCD lines for Controllers/Measurements that no longer exist
- Fix improper WBT input-checking for humidity math controller
- Fix issue where Math controller could crash (#335)
- Fix error on Live page if no Math controllers exist (#345)
- Add Decimal Places option to LCD lines
- Fix Input conditional refresh upon settings change
- Fix display of Math controllers with atypical measurements on Live page (#343)
- Fix inability to use Math controller values with PID Controllers (#343)
- Fix display of Math data on LCDs (#343)
- Fix LCD Max Age only working for first line
- Fix display of Math data on LCDs
- Fix issue displaying some Graph page configurations
- Fix issue with PID recording negative durations
- Fix Date Methods (#344)
- Place PID Controllers in a subcategory of new section called Function
- Don't disable an LCD when an Input that's using it is disabled
- Add new Math controller type: Median
- Add the ability to use Conditionals with Math controllers
- Add ability to use Math Controllers with LCDs and PIDs
- Add Math Controllers to Live page
- Add Math and PID Controllers to Gauge measurement selection (#342)
- Add "None Found Last x Seconds" to Conditional options (trigger action if a measurement was not found within the last x seconds)
- Add Restart Daemon option to the Config menu
- More detailed 'incorrect database version' error message on System Information page
- Fix measurement list length on Graph page
- Fix PWM output display on Live page
- Fix issue changing Gauge type (#342)
- Fix display of multiplexer options for I2C devices
- Fix display order of I2C busses on System Information page
- Add new multiplexer overlay option to manual (#184)
- Add Math controller types: Humidity, Maximum, Minimum, and Verification (#335)
- Fix Atlas pH sensor calibration
- Add Math Controller (Math in menu) to perform math on Input data
- Add first Math controller type: Average (#328)
- Add fswebcam as a camera library for acquiring images from USB cameras
- Complete Spanish translation
- Update korean translations
- Add more translatable texts
- Make PIDs collapsible
- Refactor daemon controller handling and daemonize threads
- Fix TCA9548A multiplexer channel issues (#330)
- Fix selection of current language on General Config page
- Fix saving options when adding a Timer
- Fix Graph display of Lowering Output durations as negative values
- Fix double-logging of output durations
- Update Manual with Math Controller information
- Fix issue displaying Camera page
- Add display of all detected I2C devices on the System Information page
- Change web UI restart command
- Fix issue saving Timer options (#334)
- Fix Output Usage error
- Fix adding Gauges (#333)
- Add 1 minute, 5 minute, and 15 minute options to Graph Range Selector (#319)
- Fix AM2315 sensor measurement acquisition (#328)
- Fix flood of errors in the log if an LCD doesn't have a measurement to display
- Fix LCD display being offset one character when displaying errors
- Add Max Age (seconds) to LCD line options
- Make LCDs collapsable in the web UI
- Fix saving user theme (#326)
- Add Freqency, Duty Cycle, Pulse Width, RPM, and Linux Command variables to Conditional commands (#311) (See Input Conditional command variables)
- Add Graph options: Enable Auto Refresh, Enable Title, and Enable X-Axis Reset (#319)
- Add automatic checks for Mycodo updates (can be disabled in the configuration)
- Fix Input Conditional variable
- Add 12-volt DC fan control circuit to manual (@Theoi-Meteoroi) (#184) (See Schematics for DC Fan Control)
- Fix PWM Signal, RPM Signal, DHT22, and DHT11 Inputs (#324)
- Add Frequency, Duty Cycle, Pulse Width, and RPM to y-axis Graph display
- Upgrade InfluxDB from 1.3.7 to 1.4.2
- Fix Output Conditional triggering (#323)
- Add Output Conditional If option of "On (any duration)" (#323) (See Output Conditional Statement If Options)
- Fix display of first point of Daily Bezier method
- Fix inability to use Daily Bezier method in PID (#323)
- Fix saving Output options and turning Outputs On and Off
- Prevent currently-logged in user from: deleting own user, changing user role from Admin
- Force iPhone to open Mycodo bookmark as standalone web app instead of in Safari
- Refactor and add tests for all inputs (#128)
- Add Flask-Limiter to limit authentication requests to 30 per minute (mainly for Remote Admin feature)
- Add first working iteration of data acquisition to the Remote Admin dashboard
- Add SSL certificate authentication with Remote Admin communication
- Fix inability to modify timer options (#318)
- Rename objects (warning: this may break some things. I tried to be thorough with testing)
- Switch from using init.d to systemd for controlling apache2
This release has refactored how LCD displays are handled, now allowing an infinite number of data sets on a single LCD.
Note: All LDCs will be deactivated during the upgrade. As a consequence, LCD displays will need to be reconfigured and reactivated.
Note 2: During the upgrade, the web interface will display "500 Internal Server Error." This is normal and you should give Mycodo 5 to 10 minutes (or longer) to complete the upgrade process before attempting to access the web interface again.
- Add ability to cycle infinite sets of data on a single LCD display (#316)
- Add logrotate script to manage mycodo logs
- Fix language selection being applied globally (each user now has own language)
- Fix display of degree symbols on LCDs
- Allow camera options to be used for picamera library
- Fix inability to take a still image while a video stream is active
- Make creating new user names case-insensitive
- Fix theme not saving when creating a new user
- Remove ability to change camera library after a camera has been added
- Update Korean translation
- Add timestamp to lines of the upgrade/backup/restore logs
- Add sensor measurement smoothing to Chirp light sensor (module will soon expand to all sensors)
- Add ability to stream video from USB cameras
- Add ability to stream video from several cameras at the same time
- Fix an issue loading the camera settings page without a camera connected
- Fix video streaming with Pi Camera (#228)
- Split flaskform.py and flaskutils.py into smaller files for easier management
Note: The Chirp light sensor scale has been inverted. Please adjust your settings accordingly to respond to 0 as darkness and 65535 as bright.
- Replace deprecated LockFile with fasteners (#260)
- Add Timer type: PWM duty cycle output using Method (#262), read more: PWM Method
- Fix display of PID setpoints on Graphs
- Invert Chirp light sensor scale (0=dark, 65535=bright)
- Update Korean translations
- Add 2 more significant digits to ADC voltage measurements
- Upgrade InfluxDB to v1.3.7
- Add Sample Time option to PWM and RPM Input options (#302)
- Fix issues with PWM and RPM Inputs (#306)
- Turning Outputs On or Off no longer refreshes the page (#192)
- Fix exporting measurements
- Fix Live Data page displaying special characters (#304)
- Fix PWM and RPM Input issues (#302)
Because of a necessary database schema change, this update will deactivate all PID controllers and deselect the input measurement. All PID controllers will need the input measurement reconfigured before they can be started again.
Input and Output Conditional commands may now include variables. There are 23 variables currently-supported. See Conditional Statement variables for details.
- Add new Input type: Linux Command (measurement is the return value of an executed command) (#264)
- Refactor PID input option to allow new input and simplify PID configuration
- Add ability to select LCD I2C bus (#300)
- Add ADC Option to Inverse Scale (#297)
- Add ability to use variables in Input/Output Conditional commands
- Fix "Too many files open" error when using the TSL2591 sensor (#254)
- Fix bug that had the potential to lose data with certain graph display configurations
- Prevent more than one active PID from using the same output (#108)
- Prevent a PID from using the same Raise and Lower output
- Prevent a currently-active PID from changing the output to a currently-used output
- Update Readme and Wiki to fix outdated and erroneous information and improve coverage (#285)
- Add another status indicator color (top-left of web UI): Orange: unable to connect to daemon
- Fix Asynchronous Graphs (#296)
- Disable sensor tests to fix testing environment (will add later when the issue is diagnosed)
- Add ability to set time to end repeating duration method
- Fix issues with method repeat option
- Add 'restart from beginning' option to PID duration methods
- Fix adding new graphs
- Fix changing a gauge from angular to solid (#274)
- Add gauges to Live Graphs (#274)
- Fix issue reporting issue with the web UI communicating with the daemon (#291)
- Enable daemon monitoring script (cron @reboot) to start the daemon if it stops
- Potential fix for certain sensor initialization issues when using a multiplexer (#290)
- Handle connection error when the web interface cannot connect to the daemon/relay controller (#289)
- Fix saving relay start state (#289)
- Fix MH-Z16 sensor issues in I2C read mode (#281)
- Fix Atlas Scientific I2C device query response in the event of an error
- Fix issue preventing PID from using duration Methods
- Fix issue with PID starting a method again after it has already ended
- Fix TSL2591 sensor (#257)
- Fix saving relay trigger state (#289)
- Add MH-Z16 sensor module (#281)
- Fix MH-Z19 sensor module (#281)
- Update InfluxDB (v1.3.3) and pip packages
- Fix K30 sensor module (#279)
- Fix install issue in setup.sh install script (catch 1-wire error if not enabled) (#258)
- Fix new timers not working (#284)
- Add live display of upgrade log during upgrade
Some graphs will need to be manually reconfigured after upgrading to 5.1.0. This is due to adding PWM as an output and PID option, necessitating refactoring certain portions of code related to graph display.
- Add PWM support as output (#262)
- Add PWM support as PID output
- Add min and max duty cycle options to PWM PID
- Add "Max Amps" as a general configuration option
- Improve error reporting for devices and sensors
- Add ability to power-cycle the DHT11 sensor if 3 consecutive measurements cannot be retrieved (uses power relay option) (#273)
- Add MH-Z19 CO2 sensor
- Upgrade to InfluxDB 1.3.1 (#8500 - fixes InfluxDB going unresponsive)
- Fix K30 sensor module
- Move relay_usage_reports directory to new version during upgrade
- Fix LCD display of PID setpoints with long float values (round two decimal places)
- Fix geocoder issue
- Add power relay to AM2315 sensor configuration (#273)
- Fix upgrade script
- Fix upgrade initialization to include setting permissions
- Fix minor bug that leaves the .upgrade file in a backup, causing issue with upgrading after a restore
- Fix issues with restore functionality (still possibly buggy: use at own risk)
- Fix issues with restore functionality (still possibly buggy: use at own risk)
- Update InfluxDB to 1.3.0
- Update pip package (geocoder)
- Add ability to restore backup (Warning: Experimental feature, not thoroughly tested)
- Add ability to view the backup log on View Logs page
- Add script to check if daemon uncleanly shut down during upgrade and remove stale PID file (#198)
- Fix error if country cannot be detected for anonymous statistics
- Fix install script error (#253)
- Fix issue modulating relays if a conditionals using them are not properly configured (#266)
- Fix upgrade process
- Fix install script
- Change wiringpi during install
- Add ability to create a Mycodo backup
- Add ability to delete a Mycodo backup
- Remove mycodo-wrapper binary in favor of compiling it from source code during install/upgrade
- Fix issue with influxdb database and user creation during install (#255)
- Add ability to restore a Mycodo backup
- Fix swap size check (and change to 512 MB) to permit pi_switch module compilation size requirement (#258)
- Add TSL2591 luminosity sensor (#257)
- Update sensor page to more compact style
- Append setup.sh output to setup.log instead of overwriting (#255)
- Fix display of error response when attempting to modify timer when it's active
- Add new relay type: Execute Commands (executes linux commands to turn the relay on and off)
- Fix query of ADC unit data (not voltage) from influxdb
- Update influxdb to version 1.2.4
- Update pip packages
- Update Manual
- Update translatable texts
- Fix display of PID output and setpoint on live graphs (#252)
- Add option to not turn wireless relay on or off at startup
- Fix inability to save SHT sensor options (#251)
- Fix inability to turn relay on if another relay is unconfigured (#251)
- Fix display of proper relay status if pin is 0
- Relay and Timer page style improvements
- Add influxdb query generator with input checks
- Add support for Atlas Scientific pH Sensor (#238)
- Add support for calibrating the Atlas Scientific pH sensor
- Add UART support for Atlas Scientific PT-1000 sensor
- Update Korean translations
- Add measurement retries upon CRC fail for AM2315 sensor (#246)
- Add page error handler that provides full traceback when the Web UI crashes
- Display live pH measurements during pH sensor calibration
- Add ability to clear calibration data from Atlas Scientific pH sensors
- Add sensor option to calibrate Atlas Scientific pH sensor with the temperature from another sensor before measuring pH
- Add 433MHz wireless transmitter/receiver support for relay actuation (#88, #245)
- Fix saving of proper start time during timer creation (#248)
- Fix unicode error when generating relay usage reports
- Fix issue with old database entries and new graph page parsing
- Revert to old relay form submission method (ajax method broken)
- Fix critical issue with upgrade script
- Fix setting custom graph colors
- Add toastr and ajax support for submitting forms without refreshing the page (currently only used with relay On/Off/Duration buttons) (#70)
- Fix issue with changing ownership of SSL certificates during install (#240)
- Fix PID Output not appearing when adding new graph (modifying graph works)
- Remove ineffective upgrade reversion script (reversion was risky)
- Add PID Output as a graph display option (useful for tuning PID controllers)
- Fix display of unicode characters (#237)
- Add sensor conditional: emailing of photo or video (video only supported by picamera library at the moment) (#226)
- Fix inability to display Sensor page if unable to detect DS18B20 sensors (#236)
- Fix inability to disable relay during camera capture
- Fix SSL generation script and strengthen from 2048 bit to 4096 bit RSA (#234)
- New cleaner Timer page style
- Fix BMP280 sensor module initialization (#233)
- Fix saving and display of PID and Relay values on LCDs
- Fix BMP280 sensor module initialization
- Fix saving and display of PID and Relay values on LCDs
- Fix inability to select certain measurements for a sensor under the PID options
- Fix BMP280 sensor I2C address options (#233)
- Add BMP280 I2C temperature and pressure sensor (#233)
- Fix issue with graph page crashing when non-existent sensor referenced (#232)
- New Mycodo Manual rendered in markdown, html, pdf, and plain text
- Fix BME280 sensor module to include calibration code (fixes "stuck" measurements)
- Fix issue with graph page crashing when non-existent sensor referenced (#231)
- Fix issue with graph page errors when creating a graph with PIDs or Relays
- Fix sensor conditional measurement selections (#230)
- Fix inability to stream video from a Pi camera (#228)
- Fix inability to delete LCD (#229)
- Fix measurements export
- Fix display of BMP and BH1750 sensor measurements in sensor lists (graphs/export)
- Better exception-handling (clean up logging of influxdb measurement errors)
- Add BH1750 I2C light sensor (#224)
- Change default opencv values for new cameras (#225)
- Fix relays not recording proper ON duration (which causes other issues) (#223)
- Fix new graphs occupying 100% width (12/12 columns)
- Fix issue with adding/deleting relays
- Fix inability to have multiple graphs appear on the same row
- Fix UnicodeEncodeError when using translations
- Fix BME280 sensor pressure/altitude
- Fix frontend and backend issues with conditionals
- Fix alembic database upgrade error (hopefully)
- Fix photos being taken uncontrollably when a time-lapse is active
- Update geocoder to 1.21.0 to attempt to resolve issue
- Fix creation of alembic version number in database of new install
- Add suffixes to distinguish Object from Die temperatures of TMP006 sensor on Live page
- Fix reference to pybabel in virtualenv
- Add option to hide tooltips
- Add alembic upgrade check as a part of flask app startup
- Fix reference to alembic for database upgrades
- Fix photos being taken uncontrollably when a time-lapse is active
- Show edge measurements as vertical bars instead of lines on graphs
- Fix default image width/height when adding cameras
- Prevent attempting to setup a relay at startup if the GPIO pin is < 1
- Add coverage where DHT22 sensor could be power cycled to fix an inability to acquire measurements
- Display the device name next to each custom graph color
- Fix encoding error when collecting anonymous statistics (#216)
- Update Influxdb to version 1.2.2
- UI style improvements
- Fix pybabel reference during install/upgrade (#212)
- Fix edge detection conditional statements (#214)
- Fix identification and conversion of dewpoint on live page (#215)
- Fix issue with timers not actuating relays (#213)
- Fix issues with saving LCD options (#211)
- Fixes inability of relay conditionals to operate (#209, #210)
- Fix issue with user creation/deletion in web UI
- Fix influxdb being unreachable directly after package install
- Complete Spanish translation
- Add auto-generation of relay usage/cost reports on a daily, weekly, or monthly schedule
- Add ability to check daemon health (mycodo_client.py --checkdaemon)
- Add sensor conditional actions: Activate/Deactivate PID, Email Photo, Email Video
- Add PID option: maximum allowable sensor measurement age (to allow the PID controller to manipulate relays, the sensor measurement must have occurred in the past x seconds)
- Add PID option: minimum off duration for lower/raise relay (protects devices that require a minimum off period by preventing power cycling from occurring too quickly)
- Add new sensor: Free Disk Space (of a set path)
- Add new sensor: Mycodo Daemon RAM Usage (used for testing)
- Add ability to use multiple camera configurations (multiple cameras)
- Add OpenCV camera library to allow use of USB cameras (#193)
- Automatically detect DS18B20 sensors in sensor configuration
- Add ability to create custom user roles
- Add new user roles: Editor and Monitor (#46)
- Mobile display improvements
- Improve content and accessibility of help documentation
- Redesign navigation menu (including glyphs from bootstrap and fontawesome)
- Move to using a Python virtual environment (#203)
- Refactor the relay/sensor conditional management system
- User names are no longer case-sensitive
- Switch to using Flask-Login
- Switch to using flask_wtf.FlaskForm (from using deprecated flask_wtf.Form)
- Update web interface style and layout
- Update influxdb to 1.2.1
- Update Flask WTF to 0.14.2
- Move from using sqlalchemy to flask sqlalchemy
- Restructure database (#115, #122)
- Add ability to turn a relay on for a specific duration of time
- Update style of Timer and Relay pages (mobile-compatibility)
- Revert back to influxdb 1.1.1 to fix LCD time display (#7877 will fix, when released)
- Fix influxdb not restarting after a new version is installed
- Fix issue with relay conditionals being triggered upon shutdown
- Fix asynchronous graph to use local timezone rather than UTC (#185)
- Remove archived versions of Mycodo (Mycodo/old) during upgrade (saves space during backup)
- Fix LCD KeyError from missing measurement unit for durations_sec
- Fix DHT11 sensor module (#176)
- Update influxdb to 1.2.0
- Fix DHT11 sensor module (#176)
- Fix PID controller crash
This is a small update, mainly to fix the install script. It also should fix the DHT11 sensor module from stopping at the first bad checksum.
- Fix DHT11 sensor module, removing exception preventing acquisition of future measurements (#176)
- Fix setup.sh install script by adding git as a dependency (#183)
- Fix initialization script executed during install and upgrade
- Fix PID variable initializations
- Fix KeyError in controller_lcd.py
- Fix camera termination bug (#178)
- Fix inability to pause/hold/resume PID controllers
- Add help text for conditional statements to relay page (#181)
This update fixes two major bugs: Sometimes admin users not being created properly from the web UI and the daemon not being set to automatically start during install.
This update also fixes an even more severe bug affecting the database upgrade system. If you installed a system before this upgrade, you are probably affected. This release will display a message indicating if your database has an issue. Deleting ~/Mycodo/databases/mycodo.db and restarting the web server (or reboot) will regenerate the database.
If your daemon doesn't automatically start because you installed it with a botched previous version, issue the following commands to add it to systemctl's autostart:
Important: Make sure you rename 'user' below to your actual user where you installed Mycodo, and make sure the Mycodo install directory is correct and points to the correct mycodo.service file.
sudo service mycodo stop
sudo systemctl disable mycodo.service
sudo rm -rf /etc/systemd/system/mycodo.service
sudo systemctl enable /home/user/Mycodo/install/mycodo.service
sudo service mycodo start
- Add check for problematic database and notify user how to fix it
- Add ability to define the colors of lines on general graphs (#161)
- Update install instructions to correct downloading the latest release tarball
- Fix for database upgrade bug that has been plaguing Mycodo for the past few releases
- Fix incorrect displaying of graphs with relay or PID data
- Fix relay turning off when saving relay settings and GPIO pin doesn't change
- Fix bug that crashes the daemon if the user database is empty
- Fix Spanish translation file errors
- Fix mycodo daemon not automatically starting after install
- Fix inability to create admin user from the web interface
- Fix inability to delete methods
- Fix Atlas PT100 sensor module 'invalid literal for float()' error
- Fix camera termination bug (#178)
Miscellaneous
- Add new theme: Sun
- Actually fix the upgrade system (mycodo_wrapper)
- Fix bug in DHT22 sensor module preventing measurements
- Fix inability to show latest time-lapse image on the camera page (images are still being captured)
- Update Spanish translations
- Fix upgrade system (mycodo_wrapper). This may have broke the upgrade system (if so, use the manual method in the README)
- Fix time-lapses not resuming after an upgrade
- Fix calculation of total 1-month relay usage and cost
- Fix (and modify) the logging behavior in modules
- Fix K30 sensor module returning None as a measurement value
- Fix gpiod being added to crontab during install from setup.sh (#174)
- Add ability to export selected measurement data (in CSV format) from a date/time span
- Fix issue with setup.sh when the version of wget<1.16 (#173)
- Fix error calculating rely usage when it's currently the billing day of the month
- Remove Sensor Logs (Tools/Sensor Logs). The addition of the measurement export feature in this release deprecates Sensor Logs. Note that by the very nature of how the Sensor Log controllers were designed, there was a high probability of missing measurements. The new measurement export feature ensures all measurements are exported.
- Add more translatable text
- Add password repeat input when creating new admin user
- Fix DHT11 sensor module not returning values (#171)
- Fix HTU21D sensor module not returning values (#172)
This release introduces a new method for upgrading Mycodo to the latest version. Upgrades will now be performed from github releases instead of commits, which should prevent unintended upgrades to the public, facilitate bug-tracking, and enable easier management of a changelog.
- Add ability to hold, pause and resume PID controllers
- Add ability to modify PID controller parameters while active, held, or paused
- New method of processing data on live graphs that is more accurate and reduced bandwidth
- Install numpy binary from apt instead of compiling with pip
- Add ability to set the language of the web user interface (#167)
- Add Spanish language translation
- New upgrade system to perform upgrades from github releases instead of commits
- Allow symbols to be used in a user password (#76)
- Introduce changelog (CHANGELOG.md)
- Fix inability to update long-duration relay times on live graphs
- Fix dew point being incorrectly inserted into the database
- Fix inability to start video stream (#155)
- Fix SHT1x7x sensor module not returning values (#159)
- Add more software tests
- Update Flask to v0.12
- Update InfluxDB to v1.1.1
- Update factory_boy to v2.8.1
- Update sht_sensor to v16.12.1
- Move install files to Mycodo/install
- Add more I2C LCD address options (again)
- Add Fahrenheit conversion for temperatures on /live page
- Add github issue template (#150 #151)
- Add information to the README about performing manual backup/restore
- Add universal sensor tests
- Fix code warnings and errors
- Add exceptions, logging, and docstrings
- New create admin user page if no admin user exists
- Add support for Chirp soil moisture sensor
- Add more I2C LCD address options
- Add endpoint tests
- Add use of Travis CI and Codacy
- Fix controller crash when using a 20x4 LCD (#136)
- Add short sleep() to login to reduce chance of brute-force success
- Fix code warnings and errors
- Setup flask app using new create_app() factory
- Create application factory and moved view implementation into a general blueprint (#129 #132 #142)
- Add initial fixture tests
- Improve time-lapse capture method
- Add BME280 sensor
- Create basic tests for flask app (#112)
- Relocated Flask UI into its own package (#116)
- Add DB session fixtures; create model factories
- Add logging of relay durations that are turned on and off, without a known duration
- Add ability to define power billing cycle day, AC voltage, cost per kWh, and currency unit for relay usage statistics
- Add more Themes
- Add hostname to UI page title