Mycodo is open source software for the Raspberry Pi that couples inputs and outputs in interesting ways to sense and manipulate the environment.

Overview

Mycodo

Environmental Regulation System

Latest version: 8.12.9

Mycodo is open source software for the Raspberry Pi that couples inputs and outputs in interesting ways to sense and manipulate the environment.

Build Status Codacy Badge Translation Badge DOI

Support

Documentation

Mycodo Manual (PDF)

Mycodo API (Version: v1)

Mycodo Wiki

Mycodo Custom Module Repository

Mycodo Support Android App

Discussion

Mycodo Issues (Bug Reports/Feature Requests)

Mycodo Forum (the old forum is being phased out, registration closed)

Mycodo Discord

Bug in the Mycodo Software

If you believe there is a bug in the Mycodo software, first search through the guthub Issues and see if your issue has already recently been discussed or resolved. If your issue is novel or significantly mre recent than a similar one, you should create a New Issue. When creating a new issue, make sure to read all information in the issue template and follow the instructions. Replace the template text with the information being requested (e.g. "step 1" under "Steps to Reproduce the issue" should be replaced with the actual steps to reproduce the issue). The more information you provide, the easier it is to reproduce and diagnose the issue. If the issue is not able to reproduced because not enough information is provided, it may delay or prevent solving the issue.

Donate

I have always made Mycodo free and I don't intend on changing that. However, if you find Mycodo useful and would like to support its continued development, please consider becoming a sponsor at github.com/sponsors/kizniche or donate at kylegabriel.com/donate.


Features

  • Inputs that record measurements from sensors, GPIO pin states, analog-to-digital converters, and more (or create your own Custom Inputs). See all Supported Inputs.
  • Outputs that perform actions such as switching GPIO pins high/low, generating PWM signals, executing shell scripts and Python code, and more (or create your own Custom Outputs). See all Supported Outputs.
  • Functions that perform tasks, such as coupling Inputs and Outputs in interesting ways, such as PID controllers, Conditional Controllers, Trigger Controllers, to name a few (or create your own Custom Functions). See all Supported Functions.
  • Web Interface for securely accessing Mycodo using a web browser on your local network or anywhere in the world with an internet connection, to view and configure the system, which includes several light and dark themes.
  • Dashboards that display configurable widgets, including interactive live and historical graphs, gauges, output state indicators, measurements, and more (or create your own Custom Widgets). See all Supported Widgets.
  • Alert Notifications to send emails when measurements reach or exceed user-specified thresholds, important for knowing immediately when issues arise.
  • Setpoint Tracking for changing a PID controller setpoint over time, for use with things like terrariums, reflow ovens, thermal cyclers, sous-vide cooking, and more.
  • Notes to record events, alerts, and other important points in time, which can be overlaid on graphs to visualize events with your measurement data.
  • Cameras for remote live streaming, image capture, and time-lapse photography.
  • Energy Usage Measurement for calculating and tracking power consumption and cost over time.
  • Upgrade System to easily upgrade the Mycodo system to the latest release to get the newest features or restore to a previously-backed up version.
  • Translations that enable the web interface to be presented in different Languages.
https://kylegabriel.com/projects/wp-content/uploads/sites/3/2020/06/Screenshot_2020-04-25-hydra-Default-Dashboard-Mycodo-8-4-0-dashboard_2.png

Figure: Automated Hydroponic System Build


Uses

Originally developed to cultivate edible mushrooms, Mycodo has evolved to do much more. Here are a few things that have been done with Mycodo:

My projects

Featured

https://kylegabriel.com/projects/wp-content/uploads/sites/3/2021/09/MushroomCultivation_512x288.jpg https://kylegabriel.com/projects/wp-content/uploads/sites/3/2020/07/VID_PROJ_HYDRO_512x288.jpg

Projects of others

  • Maintaining aquatic systems (e.g. fish, hydroponic, aquaponic)
  • Maintaining terrarium, herpetarium, and vivarium environments
  • Incubating young animals and eggs
  • Aging cheese
  • Dry-aging, curing, and smoking meat (Link 1 (Archive), Link 2 (Archive))
  • Fermenting beer, food, and tobacco
  • Controlling reflow ovens
  • Culturing microorganisms
  • Treating agricultural waste water (Archive, Publication)
  • ...and more

Let me know how you use Mycodo and I may include it on this list.

Screenshots

Visit the Screenshots page of the Wiki.

Install Mycodo

Prerequisites

Mycodo has been tested to work with Raspberry Pi OS Lite (2020-05-27), and also the Desktop version if using Mycodo version => 8.6.0.

Install

Once you have the Raspberry Pi booted into the Raspberry Pi OS with an internet connection, run the following command in a terminal to initiate the Mycodo install:

curl -L https://kizniche.github.io/Mycodo/install | bash

Install Notes

Make sure the install script finishes without errors. A log of the output will be created at ~/Mycodo/install/setup.log.

If the install is successful, the web user interface should be accessible by navigating a web browser to https://127.0.0.1/, replacing 127.0.0.1 with your Raspberry Pi's IP address. Upon your first visit, you will be prompted to create an admin user before being redirected to the login page. Once logged in, check that the time is correct at the top left of the page. Incorrect time can cause a number of issues with measurement storage and retrieval, among others. Also ensure the host name and version number at the top left of the page is green, indicating the daemon is running. Red indicates the daemon is inactive or unresponsive. Last, ensure any java-blocking plugins of your browser are disabled for all parts of the web interface to function properly.

If you receive an error during the install that you believe is preventing your system from operating, please create an issue with the install log attached. If you would first like to attempt to diagnose the issue yourself, see Diagnosing Issues.

A minimal set of anonymous usage statistics are collected to help improve development. No identifying information is saved from the information that is collected and it is only used to improve Mycodo. No other sources will have access to this information. The data collected is mainly what and how many features are used, and other similar information. The data that's collected can be viewed from the 'View collected statistics' link in the Settings -> General page. There is an opt out option on the General Settings page.

REST API

The latest API documentation can be found here: API Information and API Endpoint Documentation.

About PID Control

A proportional–integral–derivative (PID) controller is a control loop feedback mechanism used throughout industry for controlling systems. It efficiently brings a measurable condition, such as temperature, to a desired state (setpoint). A well-tuned PID controller can raise to a setpoint quickly, have minimal overshoot, and maintain the setpoint with little oscillation.

PID Animation

Mycodo

The top graph visualizes the regulation of temperature. The red line is the desired temperature (setpoint) that has been configured to change over the course of each day. The blue line is the actual recorded temperature. The green vertical bars represent how long a heater has been activated for every 20-second period. This regulation was achieved with minimal tuning, and already displays a very minimal deviation from the setpoint (±0.5° Celsius). Further tuning would reduce this variability further.

See the PID Controller and PID Tuning sections of the manual for more information.

Supported Inputs and Outputs

All supported Inputs, Outputs, and other devices can be found under the Supported Devices section of the manual.

Custom Inputs, Outputs, and Controllers

Mycodo supports importing custom Input, Output, and Controller modules. you can find more information about each in the manual under Custom Inputs, Custom Outputs, and Custom Functions.

If you would like to add to the list of supported Inputs, Outputs, and Controllers, submit a pull request with the module you created or start a New Issue.

Additionally, I have another github repository devoted to custom Inputs, Outputs, and Controllers that do not necessarily fit with the built-in set and are not included by default with Mycodo, but can be imported. These can be found at kizniche/Mycodo-custom.

Links

Thanks for using and supporting Mycodo, however depending where you found this documentation, you may not have the latest version or it may have been altered, if not obtained through an official distribution site. You should be able to find the latest version on github or my web site at the following links.

https://github.com/kizniche/Mycodo

https://KyleGabriel.com

License

See License.txt

Mycodo is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Mycodo is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

A full copy of the GNU General Public License can be found at http://www.gnu.org/licenses/gpl-3.0.en.html

This software includes third party open source software components. Please see individual files for license information, if applicable.

Languages

Translation Table

By default, mycodo will display the default language set by your browser. You may also force a language in the settings at [Gear Icon] -> Configure -> General -> Language

If you would like to improve the translations, you can make changes at http://translate.kylegabriel.com, submit a pull request with an amended .po file from ~/Mycodo/mycodo/mycodo_flask/translations/, or start a New Issue detailing the corrections.

English

The native language used in the software.

Dutch

Mycodo is een geautomatiseerd monitoring- en regelsysteem dat is gebouwd om op de Raspberry Pi te draaien (versies Zero, 1, 2, 3 en 4).

Oorspronkelijk ontworpen om eetbare paddenstoelen te kweken, is Mycodo uitgegroeid tot het vermogen om veel meer te doen, waaronder het kweken van planten, het kweken van micro-organismen, het onderhouden van bijenbijen bij de bijen, het incuberen van dieren en eieren, het onderhouden van aquatische systemen, het ouder worden van kazen, het fermenteren van voedsel en tabak, het koken eten (sous-vide) en meer.

Het systeem bestaat uit een backend (daemon) en een frontend (gebruikersinterface). De backend voert metingen uit van sensoren en apparaten, coördineert vervolgens een diverse reeks antwoorden op die metingen, inclusief het vermogen om outputs te moduleren (relais, PWM, draadloze outlets), omgevingsomstandigheden te regelen met elektrische apparaten onder PID-regeling (gestage regeling of omschakeling tijd), timers plannen, foto's maken en video streamen, acties activeren wanneer metingen aan bepaalde voorwaarden voldoen (relais moduleren, opdrachten uitvoeren, per e-mail op de hoogte stellen, etc.) en meer. De frontend is een webinterface die gemakkelijke navigatie en configuratie mogelijk maakt vanaf elk apparaat met een browser.

French

Mycodo est un système de surveillance et de régulation automatisé conçu pour fonctionner sur le Raspberry Pi (versions zéro, 1, 2, 3 et 4).

Conçu à l'origine pour cultiver des champignons comestibles, Mycodo s'est développé pour inclure la capacité de faire beaucoup plus, notamment la culture de plantes, la culture de micro-organismes, le maintien de l'homéostasie du rucher des abeilles, la mise en incubation des animaux et des œufs, la maintenance des systèmes aquatiques, le vieillissement des fromages, la fermentation nourriture (sous vide), et plus.

Le système comprend un serveur (démon) et une interface utilisateur (interface utilisateur). Le système effectue des mesures à partir de capteurs et d’appareils, puis coordonne un ensemble divers de réponses à ces mesures, notamment la possibilité de moduler les sorties (relais, PWM, prises sans fil), de réguler les conditions environnementales avec des appareils électriques sous contrôle PID (régulation continue ou basculement temps), planifiez des minuteries, capturez des photos et des flux vidéo, déclenchez des actions lorsque les mesures répondent à certaines conditions (moduler des relais, exécuter des commandes, notifier par courrier électronique, etc.), etc. L'interface Web est une interface Web qui facilite la navigation et la configuration à partir de tout appareil compatible avec le navigateur.

German

Mycodo ist ein automatisiertes Überwachungs- und Regulierungssystem, das für den Raspberry Pi (Versionen Zero, 1, 2, 3 und 4) entwickelt wurde.

Ursprünglich für die Kultivierung von Speisepilzen konzipiert, hat Mycodo die Fähigkeit zu weitaus mehr erweitert, darunter die Kultivierung von Pflanzen, die Kultivierung von Mikroorganismen, die Aufrechterhaltung der Homöostase der Bienenhaus-Bienenhäuser, die Inkubation von Tieren und Eiern, die Aufrechterhaltung von Wassersystemen, das Altern von Käse, das Gären von Lebensmitteln und Tabak sowie das Kochen Essen (Sous-Vide) und mehr.

Das System besteht aus einem Backend (Daemon) und einem Frontend (Benutzeroberfläche). Das Backend führt Messungen von Sensoren und Geräten durch und koordiniert dann eine Vielzahl von Reaktionen auf diese Messungen, einschließlich der Möglichkeit, Ausgänge (Relais, PWM, drahtlose Ausgänge) zu modulieren und Umgebungsbedingungen mit elektrischen Geräten unter PID-Steuerung zu regulieren (stetige Regelung oder Umschaltung) Zeit), Zeitpläne planen, Fotos aufnehmen und Videos streamen, Aktionen auslösen, wenn Messungen bestimmte Bedingungen erfüllen (Relais modulieren, Befehle ausführen, per E-Mail benachrichtigen usw.) und vieles mehr. Das Frontend ist eine Weboberfläche, die eine einfache Navigation und Konfiguration von jedem Browser-fähigen Gerät aus ermöglicht.

Italian

Mycodo è un sistema di monitoraggio e regolazione automatico che è stato creato per funzionare sul Raspberry Pi (versioni Zero, 1, 2, 3 e 4).

Originariamente progettato per coltivare funghi commestibili, Mycodo è cresciuto fino a comprendere la capacità di fare molto di più, coltivando piante, coltivando microrganismi, mantenendo l'omeostasi delle api apistiche del miele, incubando animali e uova, mantenendo sistemi acquatici, formaggi stagionati, alimenti fermentati e tabacco, cucinando cibo (sous-vide) e altro ancora.

Il sistema comprende un backend (demone) e un frontend (interfaccia utente). Il back-end esegue misurazioni da sensori e dispositivi, quindi coordina un insieme diversificato di risposte a tali misurazioni, inclusa la possibilità di modulare le uscite (relè, PWM, prese wireless), regola le condizioni ambientali con dispositivi elettrici sotto controllo PID (regolazione costante o commutazione tempo), programmare i timer, acquisire foto e trasmettere video, attivare azioni quando le misurazioni soddisfano determinate condizioni (modulazione di relè, esecuzione di comandi, notifica via e-mail, ecc.) e altro. Il frontend è un'interfaccia web che consente una facile navigazione e configurazione da qualsiasi dispositivo abilitato per il browser.

Norwegian

Mycodo er et automatisert overvåkings- og reguleringssystem som ble bygget for å kjøre på Raspberry Pi (versjoner Zero, 1, 2, 3 og 4).

Mycodo er opprinnelig utviklet for å dyrke spiselige sopp, og har vokst til å inkludere muligheten til å gjøre mye mer, inkludert dyrking av planter, dyrking av mikroorganismer, opprettholder honningbi apiary homeostasis, inkubering av dyr og egg, opprettholde akvatiske systemer, aldrende oster, fermenterende matvarer og tobakk, matlaging mat (sous-vide) og mer.

Systemet består av en backend (daemon) og en frontend (brukergrensesnitt). Backend utfører målinger fra sensorer og enheter, og koordinerer deretter et mangfoldig sett med svar på disse målingene, inkludert muligheten til å modulere utganger (reléer, PWM, trådløse uttak), regulere miljøforhold med elektriske enheter under PID-kontroll (stabil regulering eller endring over tid), planlegge timere, ta bilder og streame video, utløse handlinger når målingene oppfyller visse forhold (modulere reléer, utføre kommandoer, varsle via e-post, etc.) og mer. Frontend er et webgrensesnitt som gjør det enkelt å navigere og konfigurere fra hvilken som helst nettleseraktivert enhet.

Polish

Mycodo to zautomatyzowany system monitorowania i regulacji, który został zbudowany do pracy na Raspberry Pi (wersje Zero, 1, 2 i 3).

Pierwotnie zaprojektowany do uprawy grzybów jadalnych, Mycodo rozwinęło się, aby umożliwić znacznie więcej, w tym uprawę roślin, hodowlę mikroorganizmów, utrzymanie homeostazy pszczół miodnych, inkubację zwierząt i jaj, utrzymanie systemów wodnych, dojrzewanie serów, fermentację żywności i tytoniu, gotowanie jedzenie (sous-vide) i nie tylko.

System składa się z zaplecza (demona) i frontendu (interfejsu użytkownika). Backend przeprowadza pomiary z czujników i urządzeń, a następnie koordynuje zróżnicowany zestaw odpowiedzi na te pomiary, w tym możliwość modulacji wyjść (przekaźniki, PWM, wyjścia bezprzewodowe), regulację warunków środowiskowych za pomocą urządzeń elektrycznych pod kontrolą PID (regulacja stała lub przełączanie czas), ustawianie timerów, robienie zdjęć i strumieniowanie wideo, wyzwalanie działań, gdy pomiary spełniają określone warunki (modulacja przekaźników, wykonywanie poleceń, powiadamianie przez e-mail itp.) i nie tylko. Frontend to interfejs sieciowy, który umożliwia łatwą nawigację i konfigurację z dowolnego urządzenia obsługującego przeglądarkę.

Portuguese

O Mycodo é um sistema automatizado de monitoramento e regulação que foi construído para rodar no Raspberry Pi (versões Zero, 1, 2, 3 e 4).

Originalmente concebido para cultivar cogumelos comestíveis, o Mycodo cresceu para incluir a capacidade de fazer muito mais, incluindo cultivar plantas, cultivar microorganismos, manter a homeostase do apiário de abelhas, incubar animais e ovos, manter sistemas aquáticos, queijos envelhecidos, fermentar alimentos e tabaco, cozinhar comida (sous-vide) e muito mais.

O sistema compreende um backend (daemon) e um frontend (interface de usuário). O backend conduz medições a partir de sensores e dispositivos e coordena um conjunto diversificado de respostas a essas medições, incluindo a capacidade de modular saídas (relés, PWM, tomadas sem fio), regular as condições ambientais com dispositivos elétricos sob controle PID (regulação estável ou troca tempo), agendar cronômetros, capturar fotos e transmitir vídeo, acionar ações quando as medições atenderem a determinadas condições (modular relés, executar comandos, notificar por e-mail etc.) e muito mais. O frontend é uma interface da web que permite fácil navegação e configuração a partir de qualquer dispositivo habilitado para navegador.

Russian

Mycodo - это автоматизированная система мониторинга и регулирования, созданная для работы на Raspberry Pi (версии Zero, 1, 2, 3 и 4).

Первоначально разработанный для выращивания съедобных грибов, Mycodo вырос и теперь способен делать гораздо больше, включая выращивание растений, выращивание микроорганизмов, поддержание гомеостаза пасеки медоносных пчел, инкубацию животных и яиц, поддержание водных систем, старение сыров, ферментацию продуктов и табака, приготовление пищи. еда (sous-vide) и многое другое.

Система включает в себя бэкэнд (демон) и интерфейс (пользовательский интерфейс). Бэкэнд проводит измерения от датчиков и устройств, затем координирует разнообразный набор ответов на эти измерения, включая возможность модулировать выходы (реле, ШИМ, беспроводные выходы), регулировать условия окружающей среды с помощью электрических устройств под управлением ПИД (постоянное регулирование или переключение). время), планировать таймеры, захватывать фотографии и потоковое видео, запускать действия, когда измерения соответствуют определенным условиям (модулировать реле, выполнять команды, отправлять уведомления по электронной почте и т. д.) и многое другое. Интерфейс представляет собой веб-интерфейс, который обеспечивает простую навигацию и настройку с любого устройства с поддержкой браузера.

Serbian

Мицодо је аутоматски систем за надзор и регулацију који је направљен да ради на Распберри Пи (верзије Зеро, 1, 2, 3 и 4).

Оригинално дизајниран за узгајање јестивих гљива, Мицодо је нарастао на могућност да уради много више, укључујући култивирање биљака, култивисање микроорганизама, одржавање хомеостазе пчелињег меда, инкубирање животиња и јаја, одржавање водених система, старење сирева, ферментисање хране и дуван, кухање храна (соус-виде), и више.

Систем садржи бацкенд (даемон) и фронтенд (кориснички интерфејс). Бацкенд врши мерења од сензора и уређаја, затим координира различите одговоре на та мерења, укључујући могућност модулације излаза (релеји, ПВМ, бежичне утичнице), регулисање услова околине са електричним уређајима под ПИД контролом (стална регулација или промена време), распоред времена, снимање фотографија и стримовање видео снимака, акције покретања када мерења испуњавају одређене услове (модулација релеја, извршавање команди, обавештавање путем е-поште, итд.), и још много тога. Фронтенд је веб интерфејс који омогућава једноставну навигацију и конфигурацију са било ког уређаја са омогућеним претраживачем.

Spanish

Mycodo es un sistema automatizado de monitoreo y regulación que fue creado para ejecutarse en la Raspberry Pi (versiones cero, 1, 2, 3 y 4).

Originalmente diseñado para cultivar hongos comestibles, Mycodo ha crecido para incluir la capacidad de hacer mucho más, incluido el cultivo de plantas, el cultivo de microorganismos, el mantenimiento de la homeostasis de las abejas, la incubación de animales y huevos, el mantenimiento de los sistemas acuáticos, el envejecimiento de los quesos, la fermentación de alimentos y el tabaco, la cocina. comida (sous-vide), y más.

El sistema comprende un backend (daemon) y un frontend (interfaz de usuario). El backend realiza mediciones desde sensores y dispositivos, luego coordina un conjunto diverso de respuestas a esas mediciones, incluida la capacidad de modular salidas (relés, PWM, salidas inalámbricas), regular las condiciones ambientales con dispositivos eléctricos bajo control PID (regulación constante o cambio tiempo), programe temporizadores, capture fotos y transmita videos, active acciones cuando las mediciones cumplan ciertas condiciones (module relés, ejecute comandos, notifique por correo electrónico, etc.) y más. La interfaz es una interfaz web que permite una fácil navegación y configuración desde cualquier dispositivo con navegador.

Swedish

Mycodo är ett automatiserat övervaknings- och reglersystem som byggdes för att springa på Raspberry Pi (versioner noll, 1, 2, 3 och 4).

Mycodo har ursprungligen utformats för att odla ätliga svampar, och har därmed ökat möjligheten att göra mycket mer, inklusive odling av växter, odlingsmikroorganismer, upprätthållande av honeybee apiary homeostasis, inkubering av djur och ägg, upprätthållande av vattenlevande system, åldrande ostar, jäsning av mat och tobak, matlagning mat (sous-vide) och mer.

Systemet innefattar en backend (daemon) och en frontend (användargränssnitt). Bakgrunden utför mätningar från sensorer och enheter och samordnar sedan en mängd olika svar på dessa mätningar, inklusive möjligheten att modulera utgångar (reläer, PWM, trådlösa uttag), reglera miljöförhållandena med elektriska enheter under PID-kontroll (ständig reglering eller byte över tid), schemalägg timer, ta bilder och strömma video, utlös åtgärder när mätningar uppfyller vissa villkor (modulera reläer, utföra kommandon, meddela via e-post etc.) och mer. Frontend är ett webbgränssnitt som möjliggör enkel navigering och konfiguration från alla webbläsaraktiverade enheter.

Chinese

Mycodo是一个自动监控和调节系统,可在Raspberry Pi上运行(版本为Zero,1,2,3和4)。

Mycodo最初设计用于种植可食用的蘑菇,已经发展到能够做更多的事情,包括种植植物,培养微生物,保持蜂蜜蜂房稳态,孵化动物和鸡蛋,维持水生系统,陈年奶酪,发酵食品和烟草,烹饪食物(sous-vide)等等。

该系统包括后端(守护进程)和前端(用户界面)。后端从传感器和设备进行测量,然后协调对这些测量的各种响应,包括调制输出(继电器,PWM,无线插座)的能力,通过PID控制的电气设备调节环境条件(稳定调节或转换时间),安排计时器,捕获照片和流视频,在测量满足特定条件时触发操作(调制继电器,执行命令,通过电子邮件通知等)等等。前端是一个Web界面,可以从任何支持浏览器的设备轻松导航和配置。

Thanks

Comments
  • [Suggestion] pH Atlas scientifique sensor

    [Suggestion] pH Atlas scientifique sensor

    I need to regulate the pH of medium with CO2. Can you please add the pH Atlas scientifique sensor with relay function, and calibration?

    Thank you very much

    opened by leoneo 229
  • DHT 11 no reading at WEB UI

    DHT 11 no reading at WEB UI

    Mycodo Issue Report:

    • Specific Mycodo Version: 4.1.8

    Problem Description

    • Observed that after 4.1.8 upgrade the sensor reading of DHT11 is not working properly. Using manual test shows correct reading. ( test_gpio_DHTx.py )

    Errors

    Daemon.log

    2017-01-22 09:13:24,783 - mycodo.sensors.dht11 - ERROR - DHT11Sensor: Could not acquire a measurement
    2017-01-22 09:13:24,786 - mycodo.sensor-LQsoApah - ERROR - Could not read sensor. Ensure it's connected properly and detected.
    2017-01-22 09:13:33,087 - mycodo.sensors.dht11 - ERROR - DHT11Sensor: Could not acquire a measurement
    2017-01-22 09:13:33,090 - mycodo.sensor-znxp2rK5 - ERROR - Could not read sensor. Ensure it's connected properly and detected.
    2017-01-22 09:13:41,786 - mycodo.sensors.dht11 - ERROR - DHT11Sensor: Could not acquire a measurement
    2017-01-22 09:13:41,805 - mycodo.sensor-LQsoApah - ERROR - Could not read sensor. Ensure it's connected properly and detected.
    2017-01-22 09:13:48,137 - mycodo.sensors.dht11 - ERROR - DHT11Sensor: Could not acquire a measurement
    2017-01-22 09:13:48,141 - mycodo.sensor-znxp2rK5 - ERROR - Could not read sensor. Ensure it's connected properly and detected.
    2017-01-22 09:13:58,887 - mycodo.sensors.dht11 - ERROR - DHT11Sensor: Could not acquire a measurement
    2017-01-22 09:13:58,890 - mycodo.sensor-LQsoApah - ERROR - Could not read sensor. Ensure it's connected properly and detected.
    2017-01-22 09:14:03,159 - mycodo.sensors.dht11 - ERROR - DHT11Sensor: Could not acquire a measurement
    2017-01-22 09:14:03,162 - mycodo.sensor-znxp2rK5 - ERROR - Could not read sensor. Ensure it's connected properly and detected.
    

    Manual Test:

    $ sudo python ./test_gpio_DHTx.py -g 27 DHT11
    Temperature: 18.0
    Humidity: 81.0
    Temperature: 18.0
    Humidity: 80.0
    Temperature: 18.0
    Humidity: 80.0
    $ date
    Sun Jan 22 09:13:30 SGT 2017
    
    opened by reymart081678 202
  • ADS1256 ADC Input addition

    ADS1256 ADC Input addition

    Mycodo Issue Report:

    • Specific Mycodo Version: 6.39

    Problem Description

    Please list:

    • Using waveshare ADS1256 8 ch A/D converter to monitor analog soil moisture sensors. Since this pcb is not on the sensor list, I'm using some python code (called by some Linux bash code) to return the selected channels voltage. This is the bash code:
        sudo /etc/getch0.sh
        Above command calls the following command:
        sudo python ~/Desktop/ads1256code1/py-ads1256/read_volts_ch0.py
    
       read_volts_ch0.py contains the following python code:
       import ads1256       # import this lib                             
    
    gain = 1			 # ADC's Gain parameter
    sps = 25			 # ADC's SPS parameter
    
    # Create the first list. It will receive ADC's absolute values
    AllChannelValuesVolts = [0,0,0,0,0,0,0,0]       
    
    # Create the second list. It will received absolute values converted to Volts
    AllChannelValues = [0,0,0,0,0,0,0,0]		
    
    # Initialize the ADC using the parameters
    ads1256.start(str(gain),str(sps))  
    #Fill the first list with all the ADC's absolute channel values
    AllChannelValues = ads1256.read_all_channels()        
     for i in range(0, 8):
    	# Fill the second list  with the voltage values
    	AllChannelValuesVolts[i] = (((AllChannelValues[i] * 100) /167.0)/int(gain))/1000000.0   
    #for i in range(0, 8):     
    #    # Print all the absolute values
    #    print AllChannelValues[i]              
    # Print a new line
    #print ("\n");							   
    #for i in range(0, 8):     
        # Print all the Volts values converted from the absolute values
    #    print AllChannelValuesVolts[i]
     print AllChannelValuesVolts[0]
    # Stop the use of the ADC
    ads1256.stop() 	
    
    • what were you trying to do
    • specific setup details that are involved

    Errors

    • List any errors you encountered.
    • Copy and pasting crash logs, or link to any specific code lines you've isolated (please use GitHub permalinks for this)

    Steps to Reproduce the issue:

    How can this issue be reproduced?

    1. step 1
    2. step 2...
    3. etc

    Additional Notes

    Is there anything that should be added to make it easier to address this issue?

    opened by SAM26K 165
  • [Suggestion] PWM for Led driver dimming

    [Suggestion] PWM for Led driver dimming

    Hello Kyle,

    I would like to control the brightness of 3 led strips (red, blue, white) in the time. For example function 1 : day 1 = 10%; day 2 = 15%; day 3 = 20 % ... day 15 to day 30 = 100% function 2 : sunrise start at 6:30AM with 0% to 100% in 30min / sunset start at 8:30PM with 100% to 0% in 30min.

    There are led drivers dimmable with 0-10Vc PWM input and with a 0-5V 0-10V PWM Converter Module it is theoretically possible with the Raspberry Pi to control the brightness. https://raspberrypi.stackexchange.com/questions/298/can-i-use-the-gpio-for-pulse-width-modulation-pwm http://www.meanwell.com/productPdf.aspx?i=300 http://www.uctronics.com/0-5v-0-10v-to-0-100-voltage-to-pwm-converter-module.html

    Please can you add a PWM output function in Mycodo ?

    Thanks Leo

    enhancement 
    opened by leoneo 131
  • New Functions and Requesting Community Input

    New Functions and Requesting Community Input

    The latest releases of Mycodo has a new category, Functions, with PID Controllers placed as a type of Function.

    I'd like to get some input from the community as to what type of functions you think are useful or interesting that should be added.

    Functions are, well, functions that carry out specific tasks. These are distinct from Math Controllers, which perform math on other controllers and store a new value (or values) in the measurement database. Functions typically do more than merely store a new value, such as with PID Controllers, which take an input and manipulate outputs in response to the input and PID settings.

    Some new Functions I think would be useful:

    1. CoolBot clone
    2. Air Conditioner/Heater (temperature sensor, heater output, cooler output) - This can currently be achieved with a PID controller, but more AC/Heater-specific options can be included to gear it more toward the specific use.
    3. ???
    enhancement question 
    opened by kizniche 123
  • get-measurement; how to case text to decimal for display on dashboard

    get-measurement; how to case text to decimal for display on dashboard

    Mycodo Issue Report:

    Mycodo Version: 7.5.10 Python Version: 3.5.3 (default, Sep 27 2018, 17:25:39) [GCC 6.3.0 20170516] Database Version: 6333b0832b3d Daemon Status: Running Daemon Process ID: 18204 Daemon RAM Usage: 92.132 MB Daemon Virtualenv: Yes Frontend RAM Usage: 63.18 MB Frontend Virtualenv: Yes

    Problem Description

    mycodo_client get-measure: Unable to cast parsed value to decimal. Everything produces daemon errors

    Errors

    2019-06-18 01:01:23,389 - ERROR - mycodo.inputs.linux_command_b7b32422 - The command returned a non-numerical value. Ensure only one numerical value is returned by the command. 2019-06-18 01:01:52,529 - ERROR - mycodo.inputs.linux_command_b7b32422 - The command returned a non-numerical value. Ensure only one numerical value is returned by the command. 2019-06-18 22:22:04,119 - ERROR - mycodo.controller_input_b7b32422 - StopIteration raised. Possibly could not read input. Ensure it's connected properly and detected.

    Steps to Reproduce the issue:

    Example of bash file that seems to return real values but still produces errors above:

    #!/bin/bash
    out=$(sshpass -p password ssh [email protected] /home/pi/Mycodo/mycodo/mycodo_client.py --get_measurement 64a5f8ec-251a-4146-bd39-e17ae4e88ec2 V 0)
    #echo out
    if [[ $out == *"SUCCESS;"* ]]; then
      #echo "1"
        echo ${out:8:8 | bc + 0}
     
    else
     if [[ $out == *"ERROR;"* ]]; then
      echo "0"
     fi
    fi
    

    Additional Notes

    No way to display values in measurement desktop readout.

    bug 
    opened by SAM26K 98
  • Mycodo 4.1.16 daemon crashes after a few days and does not automatically restart.

    Mycodo 4.1.16 daemon crashes after a few days and does not automatically restart.

    Mycodo Issue Report:

    • 4.1.16

    Problem Description

    Daemon shuts down / crashes without log entries.

    • I have a DHT22, K30, and Luminosity sensor attached as well as an LCD screen for output. I am just running the system to test stability
    • Not only does the daemon go down, it does not automatically start back up. I need to manually restart it.

    Errors

    Daemon Log: Below is all I could find. The rest of the log is repeating mysql queries that I assume are the result of a persistent web-client / graphing.

    Feb 27 20:45:55 nibbler systemd[1]: mycodo.service: main process exited, code=killed, status=6/ABRT
    Feb 27 20:45:55 nibbler mycodo_client.py[20340]: 2017-02-27 20:45:55,935 Connection refused. Is the daemon running?
    

    Steps to Reproduce the issue:

    How can this issue be reproduced?

    1. Run setup for multiple days.

    Additional Notes

    I've been able to do this twice now, so I believe it's consistent. Please let me know what other types of log entries I should look for or if I can enable some increased logging, etc.

    opened by lucasvickers 96
  • DHT11 doesn't show result on web

    DHT11 doesn't show result on web

    Mycodo Issue Report:

    • Specific Mycodo Version: 5.5.4

    Problem Description

    Please list: DHT11 doesn't display anything, deamon log shows error

    • what were you trying to do
    • specific setup details that are involved

    Errors

    • List any errors you encountered.
    • Copy and pasting crash logs, or link to any specific code lines you've isolated (please use GitHub permalinks for this)

    ERROR: 2018-01-04 09:02:06,949 - mycodo.inputs.dht11_4 - ERROR - Could not initialize sensor. Check if gpiod is running. Error: 'NoneType' object has no attribute 'send'

    Additional Notes

    Is there anything that should be added to make it easier to address this issue?

    Running the manual test [email protected]:~/Mycodo/mycodo/tests/manual_tests $ sudo python test_gpio_DHTx.py -g 3 DHT11

    works

    [email protected]:~/Mycodo/mycodo/tests/manual_tests $ sudo python test_gpio_DHTx.py -g 3 DHT11 Temperature: 17.0 Humidity: 48.0 Temperature: 17.0 Humidity: 46.0 Temperature: 17.0 Humidity: 53.0 Temperature: 17.0 Humidity: 53.0 Temperature: 17.0 Humidity: 53.0 Temperature: 17.0 Humidity: 53.0 Temperature: 17.0 Humidity: 53.0 Temperature: 17.0 Humidity: 53.0 Temperature: 17.0 Humidity: 53.0 Temperature: 17.0 Humidity: 53.0

    opened by r1rider01 93
  • setup>functions>conditional measurement stops working all the time

    setup>functions>conditional measurement stops working all the time

    Mycodo Issue Report:

    • Specific Mycodo Version: 6.4.5

    Problem Description

    Setup conditional measurement control to turn on a relay. Conditional control stops working after some time. Works for hours sometimes. Only way to fix is change some parameters in the conditional measurement control and save the changes.

    • what were you trying to do using analog sensors to turn a relay on and off depending on the voltage from the sensors.
    opened by SAM26K 89
  • Daemon stops running.

    Daemon stops running.

    Version:Mycodo Version: 7.9.1 Python Version: 3.5.3 (default, Sep 27 2018, 17:25:39) [GCC 6.3.0 20170516] Database Version: 8f9bf3fe5ec2 Daemon Status: Not Running Frontend RAM Usage: 56.016 MB Frontend Virtualenv: Yes

    Daemon log:

    raspberrypi3_3 - 7.9.1 11/07 16:00

    2019-11-07 14:10:04,144 - DEBUG - mycodo.controllers.controller_input_2798d315 - Adding measurements to InfluxDB with ID 2798d315-03d0-4838-99b3-2a9ec0ab6c90: {0: {'value': 2.357536, 'timestamp_utc': None, 'unit': 'V', 'measurement': 'electrical_potential'}} 2019-11-07 14:10:05,899 - DEBUG - mycodo.controllers.controller_input_780f2bc5 - Adding measurements to InfluxDB with ID 780f2bc5-c093-43a3-8e12-af6ea46c00ef: {0: {'value': 2.409577, 'timestamp_utc': None, 'unit': 'V', 'measurement': 'electrical_potential'}} 2019-11-07 14:11:07,397 - DEBUG - mycodo.inputs.linux_command_2798d315 - Command being executed: /home/pi/moduser1/getA0.sh 2019-11-07 14:11:08,308 - DEBUG - mycodo.inputs.linux_command_780f2bc5 - Command being executed: /home/pi/moduser1/getA1.sh 2019-11-07 14:11:30,483 - DEBUG - mycodo.inputs.linux_command_2798d315 - Command returned: b'2.357356\n', Status: None, Error: 0 2019-11-07 14:11:31,307 - DEBUG - mycodo.inputs.linux_command_780f2bc5 - Command returned: b'2.409902\n', Status: None, Error: 0 2019-11-07 14:11:31,688 - DEBUG - mycodo.controllers.controller_input_2798d315 - Adding measurements to InfluxDB with ID 2798d315-03d0-4838-99b3-2a9ec0ab6c90: {0: {'value': 2.357356, 'timestamp_utc': None, 'unit': 'V', 'measurement': 'electrical_potential'}} 2019-11-07 14:11:32,368 - DEBUG - mycodo.controllers.controller_input_780f2bc5 - Adding measurements to InfluxDB with ID 780f2bc5-c093-43a3-8e12-af6ea46c00ef: {0: {'value': 2.409902, 'timestamp_utc': None, 'unit': 'V', 'measurement': 'electrical_potential'}} 2019-11-07 14:12:37,280 - DEBUG - mycodo.inputs.linux_command_2798d315 - Command being executed: /home/pi/moduser1/getA0.sh 2019-11-07 14:12:38,319 - DEBUG - mycodo.inputs.linux_command_780f2bc5 - Command being executed: /home/pi/moduser1/getA1.sh 2019-11-07 14:12:58,941 - DEBUG - mycodo.controllers.controller_math_e1d19e6a - Adding measurements to InfluxDB with ID e1d19e6a-8518-4427-bc43-37707bc3edca: {0: {'value': 10.96826662281353, 'unit': 'unitless', 'measurement': 'moisture'}} 2019-11-07 14:13:01,100 - DEBUG - mycodo.controllers.controller_math_2e4ef32c - Adding measurements to InfluxDB with ID 2e4ef32c-fc4c-4448-9e60-ca9692759711: {0: {'value': 149.05965315999998, 'unit': 'unitless', 'measurement': 'moisture'}} 2019-11-07 14:13:37,674 - DEBUG - mycodo.inputs.linux_command_780f2bc5 - Command returned: b'', Status: None, Error: -15 2019-11-07 14:13:37,676 - DEBUG - mycodo.inputs.linux_command_780f2bc5 - The command returned a non-numerical value. Ensure only one numerical value is returned by the command. Value returned: 'b''' 2019-11-07 14:13:37,712 - DEBUG - mycodo.inputs.linux_command_2798d315 - Command returned: None, Status: None, Error: None 2019-11-07 14:13:37,713 - DEBUG - mycodo.inputs.linux_command_2798d315 - The command returned a non-numerical value. Ensure only one numerical value is returned by the command. Value returned: 'None' 2019-11-07 14:13:37,808 - ERROR - mycodo.inputs.python_code_3f220d5c - 1 Traceback (most recent call last): File "/home/pi/Mycodo/mycodo/inputs/python_code.py", line 214, in get_measurement run.python_code_run() File "/home/pi/Mycodo/mycodo/user_python_code/input_python_code_3f220d5c-f6dc-42e3-9039-5687a2c90efa.py", line 53, in python_code_run stdin, stdout, stderr = client.exec_command(cmd) File "/usr/local/lib/python3.5/dist-packages/paramiko/client.py", line 508, in exec_command chan = self._transport.open_session(timeout=timeout) File "/usr/local/lib/python3.5/dist-packages/paramiko/transport.py", line 879, in open_session timeout=timeout, File "/usr/local/lib/python3.5/dist-packages/paramiko/transport.py", line 969, in open_channel raise SSHException("SSH session not active") paramiko.ssh_exception.SSHException: SSH session not active 2019-11-07 14:13:38,151 - ERROR - mycodo.controllers.controller_input_3f220d5c - StopIteration raised 3 times. Possibly could not read input. Ensure it's connected properly and detected.

    opened by SAM26K 86
  • Dry / Wet Bulb feature request

    Dry / Wet Bulb feature request

    Is there a way to use 2 temp sensors and designate 1 as a wet bulb, and have it calculate RH?

    I've used BME280 and DHT 22 sensors, both of which have trouble recovering from condensing fog which is optimal for mushroom pinning. Simple wet/dry bulb temps should provide an accurate and durable solution.

    enhancement Implemented 
    opened by eap904 74
  • Mycodo in an iFrame

    Mycodo in an iFrame

    When i try to run Mycodo inside of an iFrame in my react application, the login flow doesn't work

    I'm building an admin dashboard which allows a user to manage multiple Mycodo instances and want to use an iFrame to accomplish this. However, when i try to login through the iFrame in my application, the request is sent but nothing seems to happen -

    Versions:

    • Mycodo Version: 8.14.2
    • Raspberry Pi Version: 4B
    • Raspbian OS Version: Bullseye Lite

    Reproducibility

    Please list specific setup details that are involved and the steps to reproduce the behavior:

    1. import https://www.npmjs.com/package/react-iframe into the react application
    2. insert mycodo host IP as the url property of the iframe component
    3. Open up the application, go to iFrame component, it should show the mycodo login page
    4. Try to log in
    5. login attempt doesn't do anything

    Expected behavior

    I expect to run into more problems down the line with the iFrame, however getting the login to work is a big step in solving these issues. I want to be able to manage, operate and monitor multiple Mycodo instances through my own dashboard It could be a CORS issue and i've experimented with the sandbox property on the iframe but without success.

    What would be my options to get this to work for a PoC product?

    opened by Masyun 0
  • Pi Camera issue

    Pi Camera issue

    threw an error when trying to add an enabled Pi camera connected to Pi4B via ribbon cable

    Error 500: Internal Server Error

    Something bad happened but it's probably not your fault. Letting the developers know about these issues is crucial to supporting Mycodo. Please submit a new issue on GitHub with the following diagnostic information and error traceback (copy the entire traceback):

    Version: 8.14.2 Database: 07c7c8ebc195 Model: Raspberry Pi 4 Model B Rev 1.4

    Release: Distributor ID: Debian Description: Debian GNU/Linux 11 (bullseye) Release: 11 Codename: bullseye

    Firmware: b''

    Error (Full Traceback):

    Traceback (most recent call last): File "/var/mycodo-root/env/lib/python3.9/site-packages/flask/app.py", line 2077, in wsgi_app response = self.full_dispatch_request() File "/var/mycodo-root/env/lib/python3.9/site-packages/flask/app.py", line 1525, in full_dispatch_request rv = self.handle_user_exception(e) File "/var/mycodo-root/env/lib/python3.9/site-packages/flask_restx/api.py", line 672, in error_router return original_handler(e) File "/var/mycodo-root/env/lib/python3.9/site-packages/flask/app.py", line 1523, in full_dispatch_request rv = self.dispatch_request() File "/var/mycodo-root/env/lib/python3.9/site-packages/flask/app.py", line 1509, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args) File "/var/mycodo-root/env/lib/python3.9/site-packages/flask_login/utils.py", line 277, in decorated_view return current_app.ensure_sync(func)(*args, **kwargs) File "/home/pi/Mycodo/mycodo/mycodo_flask/routes_page.py", line 271, in page_camera camera_stream = import_module( File "/usr/lib/python3.9/importlib/init.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "", line 1030, in _gcd_import File "", line 1007, in _find_and_load File "", line 986, in _find_and_load_unlocked File "", line 680, in _load_unlocked File "", line 790, in exec_module File "", line 228, in _call_with_frames_removed File "/home/pi/Mycodo/mycodo/mycodo_flask/camera/camera_picamera.py", line 7, in import picamera File "/var/mycodo-root/env/lib/python3.9/site-packages/picamera/init.py", line 72, in from picamera.exc import ( File "/var/mycodo-root/env/lib/python3.9/site-packages/picamera/exc.py", line 41, in import picamera.mmal as mmal File "/var/mycodo-root/env/lib/python3.9/site-packages/picamera/mmal.py", line 49, in _lib = ct.CDLL('libmmal.so') File "/usr/lib/python3.9/ctypes/init.py", line 374, in init self._handle = _dlopen(self._name, mode) OSError: libmmal.so: cannot open shared object file: No such file or directory

    opened by gab16 0
  • exceptions thrown in regulate_ph_ec.py

    exceptions thrown in regulate_ph_ec.py

    Hello, I am trying to use the "Regulate PH and EC" function from your library to regulate PH and ORb in my pool system (I think the function is amaing and just what i need). I can get it to work with my Ezo pump however. I have tried parameter that will actvate the pmp, but the code causes excpetions here is the log:

    2023-01-02 09:28:34,517 - INFO - mycodo.controllers.controller_function_dfc57aca - Activated in 1723.7 ms 2023-01-02 09:28:44,198 - DEBUG - mycodo.function.regulate_ph_ec_dfc57aca - Most recent timestamp and measurement for pH: 2023-01-02T09:28:36.426246Z, 7.074249999999999 2023-01-02 09:28:44,575 - DEBUG - mycodo.function.regulate_ph_ec_dfc57aca - Most recent timestamp and measurement for EC: 2023-01-02T09:28:26.837841Z, 840.3833333333332 2023-01-02 09:28:44,583 - DEBUG - mycodo.function.regulate_ph_ec_dfc57aca - pH is dangerously high: 7.07. Should be < 7.00. Dispensing 2.0 sec acid 2023-01-02 09:28:44,590 - ERROR - mycodo.controllers.controller_function_dfc57aca - Exception while running loop() Traceback (most recent call last): File "/var/mycodo-root/mycodo/controllers/controller_function.py", line 76, in loop self.run_function.loop() File "/home/pi/Mycodo/mycodo/functions/custom_functions/regulate_ph_ec.py", line 806, in loop "sec_ph_lower", self.get_custom_option("sec_ph_lower") + self.output_ph_amount) TypeError: unsupported operand type(s) for +: 'NoneType' and 'float'

    any suggestions?

    many thanks

    opened by cperricos 0
  • Cannot get Ezo pump to work with bang bang

    Cannot get Ezo pump to work with bang bang

    Describe the problem/bug

    So I am making sme progress in my pool controller, but cant get my EZO pump to work with the bang bang controller. I set a threshold of 750mv ORP which should activate the pump (it wokrs when I try to dispense etc via the out put controller)

    Versions:

    • Mycodo Version: 8.14.2
    • Raspberry Pi Version: 3B
    • Raspbian OS Version: [e.g. Buster Lite]

    the log gives the following errors:

    [Action 0da1bcb1, MQTT: Publish]: MQTT Publish '220'. 2022-12-30 13:41:30,039 - ERROR - mycodo.inputs.test_00_cbc058f4 - Exception: 'NoneType' object has no attribute 'randint' 2022-12-30 13:41:30,040 - ERROR - mycodo.controllers.controller_input_cbc058f4 - StopIteration raised 3 times. Possibly could not read input. Ensure it's connected properly and detected. 2022-12-30 13:41:35,982 - DEBUG - mycodo.function.bang_bang_8892780e - Input: 191.45000000000002, output: off, target: 750.0, hyst: 30.0 2022-12-30 13:41:35,989 - DEBUG - mycodo.outputs.pump_atlas_ezo_pmp_642e7235 - output_on_off(on, 0, None, 0.0, 0.0, True) 2022-12-30 13:41:36,017 - ERROR - mycodo.outputs.pump_atlas_ezo_pmp_642e7235 - Invalid parameters: State: on, Type: sec, Mode: specify_flow_rate, Amount: None, Flow Rate: 50.0 2022-12-30 13:41:36,018 - DEBUG - mycodo.outputs.pump_atlas_ezo_pmp_642e7235 - Output 642e7235-99ee-47ec-9cb3-5636a98b2291 CH0 (Acid) ON at 2022-12-30 13:37:05.985332. Output returned: None 2022-12-30 13:41:44,994 - ERROR - mycodo.inputs.test_00_cbc058f4 - Exception: 'NoneType' object has no attribute 'randint' 2022-12-30 13:42:00,037 - ERROR - mycodo.inputs.test_00_cbc058f4 - Exception: 'NoneType' object has no attribute 'randint' 2022-12-30 13:42:05,902 - DEBUG - mycodo.function.bang_bang_8892780e - Input: 191.45000000000002, output: off, target: 750.0, hyst: 30.0 2022-12-30 13:42:05,910 - DEBUG - mycodo.outputs.pump_atlas_ezo_pmp_642e7235 - output_on_off(on, 0, None, 0.0, 0.0, True) 2022-12-30 13:42:05,933 - ERROR - mycodo.outputs.pump_atlas_ezo_pmp_642e7235 - Invalid parameters: State: on, Type: sec, Mode: specify_flow_rate, Amount: None, Flow Rate: 50.0 2022-12-30 13:42:05,933 - DEBUG - mycodo.outputs.pump_atlas_ezo_pmp_642e7235 - Output 642e7235-99ee-47ec-9cb3-5636a98b2291 CH0 (Acid) ON at 2022-12-30 13:37:05.985332. Output returned: None 2022-12-30 13:42:14,996 - ERROR - mycodo.inputs.test_00_cbc058f4 - Exception: 'NoneType' object has no attribute 'randint' 2022-12-30 13:42:14,997 - ERROR - mycodo.controllers.controller_input_cbc058f4 - StopIteration raised 3 times. Possibly could not read input. Ensure it's connected properly and detected. 2022-12-30 13:42:28,241 - INFO - mycodo.controllers.controller_conditional_934faf83 - This INFO log entry will appear in the Daemon Log 2022-12-30 13:42:28,297 - INFO - mycodo.controllers.controller_conditional_934faf83 - Measurement value is 1 2022-12-30 13:42:28,529 - DEBUG - mycodo.action.mqtt_publish_0da1bcb1 - Message: 2022-12-30 13:42:28

    opened by cperricos 0
  • Add AS7341 light spectrum input

    Add AS7341 light spectrum input

    Add AS7341 multi-wavelength light sensor used in e.g. https://www.adafruit.com/product/4698. This implementation uses Adafruit's CircuitPython library for AS7341.

    I own this sensor and have tested it with Mycodo. Below is a graph showing captured data:

    mycodo-as7341

    opened by mrgnr 0
  • Support Request: Custom Output 52pi EP-0099 4-Channel Relay Hat

    Support Request: Custom Output 52pi EP-0099 4-Channel Relay Hat

    Is your feature request related to a problem? Please describe. Is there a way to modify the on_off_grove_multichannel_relay.py to allow for the 52pi EP-0099 to work? In line 324 of the python file mentioned: self.bus.write_byte_data(self.address, 0x10, new_state)

    This board has address 0x10 for me, and relays are numbered 1/2/3/4 to be used for the registers. For example it would work if I do: self.bus.write_byte_data(0x10, 2, new_state) it could turn it on/off.

    Describe the solution you'd like If you could help give some tips on how to approach this it would be greatly appreciated.

    Describe alternatives you've considered I tried running the on/off script as a shell file and it still didn't work.

    Additional context Add any other context or screenshots about the feature request here.

    opened by ttran0789 1
Releases(v8.14.2)
  • v8.14.2(Aug 20, 2022)

  • v8.14.1(Aug 14, 2022)

  • v8.14.0(Aug 13, 2022)

    Bugfixes

    • Fix inability to resume timelapses (#1163)
    • Fix "Could not determine measurement from returned value" error for Atlas Scientific inputs
    • Only increment the timelapse count when an image is captured
    • Fix generating timelapse with custom file path (#1205)
    • Fix timelapse filenames when using libcamera
    • Fix printing lines on 2-line 128x32 SSD1306 Functions
    • Fix PWM Slider Widget issues when Output signal is inverted and setting duty cycle
    • Fix MCP3008 Input python library version number

    Features

    • Add ability to use Influxdb 2.x or Influxdb 1.x
    • Add ability to set influxdb host and credentials in configuration
    • Add Input: Raspberry Pi Power Monitor
    • Add Input: MH-Z14 CO2
    • Add Output: Non-SPI Neopixel
    • Add ability to set Chirp Input I2C address (#1197)
    • Add UI feedback for Atlas Scientific calibration commands (#1198)
    • Add ability to use non-standard condition/action ID strings in Conditional Functions
    • Add Websocket support to MQTT Outputs (#1219)
    • Add Import and Initialize options to Conditional Functions (#1203)
    • Add Input: MCP3208 Analog-to-Digital Converter (#1215)

    Miscellaneous

    • Add username/password requirements to Admin Creation page
    • Move Conditional Condition text (#1204)
    Source code(tar.gz)
    Source code(zip)
  • v8.13.10(May 20, 2022)

    8.13.10 (2022-05-19)

    Bugfixes

    • 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

    Features

    • 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
    Source code(tar.gz)
    Source code(zip)
  • v8.13.9(Apr 21, 2022)

  • v8.13.8(Apr 19, 2022)

    8.13.8 (2022-04-19)

    Bugfixes

    • 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

    Features

    • Add API endpoint: cameras/get_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

    Miscellaneous

    • Update requirements.txt
    • Add short name for input display
    Source code(tar.gz)
    Source code(zip)
  • v8.13.7(Apr 6, 2022)

  • v8.13.6(Apr 6, 2022)

  • v8.13.5(Apr 4, 2022)

    8.13.5 (2022-04-04)

    Bugfixes

    • Fix missing module importlib_metadata
    • Fix PCF8574 and MCP23017 Pump Output Measurements

    Features

    • Add ability to select Output measurements for Measurement Condition of Conditional Controllers

    Miscellaneous

    • Improve dependency install script
    Source code(tar.gz)
    Source code(zip)
  • v8.13.4(Apr 3, 2022)

    8.13.4 (2022-04-03)

    Bugfixes

    • Fix Bang-Bang (On/Off) Function

    Features

    • Add Output: PCF8575 16-Channel I/O Expander

    Miscellaneous

    • Remove pip-git as module dependency option
    • Improve dependency version-checking
    Source code(tar.gz)
    Source code(zip)
  • v8.13.3(Apr 1, 2022)

    8.13.3 (2022-04-01)

    Bugfixes

    • Fix acquiring images for camera libraries that use OpenCV
    • Fix showing usage when Actions are added to Conditional Controllers
    Source code(tar.gz)
    Source code(zip)
  • v8.13.2(Mar 29, 2022)

  • v8.13.1(Mar 29, 2022)

    8.13.1 (2022-03-28)

    Bugfixes

    • Fix Trigger dependency install

    Features

    • Improve error feedback when importing controller modules
    • Improve error-handling of controllers
    Source code(tar.gz)
    Source code(zip)
  • v8.13.0(Mar 28, 2022)

    8.13.0 (2022-03-28)

    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.

    Bugfixes

    • 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)

    Features

    • 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

    Miscellaneous

    • 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
    Source code(tar.gz)
    Source code(zip)
  • v8.12.9(Dec 3, 2021)

    8.12.9 (2021-12-02)

    Bugfixes

    • 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

    Features

    • 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 PWM Output option: Invert Stored Signal

    Miscellaneous

    • Remove Output Quantity option when adding outputs
    • Change Live page refresh to that of the device measurement period
    Source code(tar.gz)
    Source code(zip)
  • v8.12.8(Oct 27, 2021)

  • v8.12.7(Oct 26, 2021)

    8.12.7 (2021-10-25)

    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.

    Bugfixes

    • 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)

    Features

    • 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

    Miscellaneous

    • Update python packages
    Source code(tar.gz)
    Source code(zip)
  • v8.12.6(Sep 3, 2021)

    8.12.6 (2021-09-03)

    Bugfixes

    • Fix accessing dependency page (#1082)
    • Fix loading Input page if Math controllers are present (#1083)
    • Fix MQTT JSON Input dependency version (#1085)

    Features

    • Add Inputs: MLX90393, DPS310
    Source code(tar.gz)
    Source code(zip)
  • v8.12.5(Sep 1, 2021)

  • v8.12.4(Sep 1, 2021)

    8.12.4 (2021-08-31)

    Bugfixes

    • Fix Input temperature compensation

    Features

    • Add ability to set Dependency Message to be displayed on dependency install page
    Source code(tar.gz)
    Source code(zip)
  • v8.12.3(Aug 31, 2021)

  • v8.12.2(Aug 31, 2021)

  • v8.12.1(Aug 30, 2021)

  • v8.12.0(Aug 29, 2021)

    8.12.0 (2021-08-29)

    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").

    Bugfixes

    • 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

    Features

    • 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

    Miscellaneous

    • 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
    Source code(tar.gz)
    Source code(zip)
  • v8.11.0(Jun 5, 2021)

    8.11.0 (2021-06-05)

    Bugfixes

    • 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)

    Features

    • 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
    Source code(tar.gz)
    Source code(zip)
  • v8.10.1(Apr 27, 2021)

    8.10.1 (2021-04-27)

    Bugfixes

    • Fix warning preventing saving of Python code
    • Fix Sense Hat Input dependency

    Features

    • Add Input: Atlas Scientific humidity sensor
    • Add Camera: raspistill
    • Make Add Output dropdown searchable
    Source code(tar.gz)
    Source code(zip)
  • v8.10.0(Apr 24, 2021)

    8.10.0 (2021-04-24)

    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(CustomModule, self).__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(CustomModule, self).__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:

    1. Deactivate all custom functions.
    2. Delete all custom functions on the Setup -> Function page.
    3. Delete all custom functions on the Configure -> Custom Functions page.
    4. Perform the Mycodo upgrade.
    5. Make the necessary edits to all your Custom Functions.
    6. Import all your updated Custom Functions on the Configure -> Custom Functions page.
    7. Add and configure your Custom Functions on the Setup -> Function page.

    Method B:

    1. 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.
    2. 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.

    Bugfixes

    • 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)

    Features

    • 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 (discussion)
    • 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)

    Miscellaneous

    • 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
    Source code(tar.gz)
    Source code(zip)
  • v8.9.2(Mar 16, 2021)

    8.9.2 (2021-03-16)

    This bugfix release changes how sessions are handled and as a result will log all users out following the upgrade.

    Bugfixes

    • 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)
    Source code(tar.gz)
    Source code(zip)
  • v8.9.1(Mar 13, 2021)

  • v8.9.0(Mar 8, 2021)

    8.9.0 (2021-03-08)

    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.

    Bugfixes

    • 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

    Features

    • 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 (discussion)
    • Add Functions and to API
    • Add missing Input Channels to Input API calls

    Miscellaneous

    • 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
    Source code(tar.gz)
    Source code(zip)
Owner
Kyle Gabriel
I'm a microbiologist and hobbyist engineer who enjoys building useful and interesting things.
Kyle Gabriel
Unofficial Playdate reverse-engineering notes/tools - covers file formats, server API and USB commands

Unofficial Playdate reverse-engineering notes/tools - covers file formats, server API and USB commands ⚠️ This documentation is unofficial and is not

James 106 Dec 31, 2022
Custom component for Home Assistant that integrates Candy/Haier Wi-Fi washing machines (also known as Simply-Fi).

Candy Home Assistant component Custom component for Home Assistant that integrates Candy/Haier Wi-Fi washing machines (also known as Simply-Fi). This

Olivér Falvai 61 Dec 29, 2022
Drobo Status is a python program that will connect to your Drobo and return JSON data regarding your Drobo

This is a simple python script that will run a docker container to pull data from Drobo. It will give information like (Name, serial, firmware, disk-total, disk-used, disk-free and individual disk st

Biofects 1 Jan 15, 2022
HomeAssistant - Polyaire AirTouch 4 Integration

HomeAssistant - Polyaire AirTouch 4 Integration Custom integration to add an AirTouch 4 AC Controller Installation: Copy contents of custom_components

7 Aug 05, 2022
Automate gate/garage door opening via 433.92MHz emitter with Raspberry Pi, Home Assistant and Homekit.

Automate opening your garage door / gate Summary This project sums up how I automated opening my garage door using a Raspberry PI, a 433Mhz emitter, H

Julien Fouilhé 29 Nov 30, 2022
This is a collection of python modules that interact with the Ryze Tello drone.

This is a collection of python modules that interact with the Ryze Tello drone.

DJI-SDK 1.2k Jan 03, 2023
Example Python code for building RPi-controlled robotic systems

RPi Example Code Example Python code for building RPi-controlled robotic systems These python files have been compiled / developed by the Neurobionics

Elliott Rouse 2 Feb 04, 2022
Poupool is an overflow swimming pool control software

Poupool - The swimming pool controller Poupool is a swimming pool control software. It is based on Transitions, Pykka and Paho MQTT. The user interfac

Cyril Jaquier 8 Jul 18, 2022
Raspberry Pi Spectrometer

PySpectrometer 2021-03-05 Raspberry Pi Spectrometer The PySpectrometer is a Python (OpenCV and Tkinter) implementation of an optical spectrometer. The

Les Wright 538 Jan 05, 2023
3D-printable hexagonal mirror array capable of reflecting sunlight into arbitrary patterns

3D-printable hexagonal mirror array capable of reflecting sunlight into arbitrary patterns

Ben Bartlett 2.3k Dec 30, 2022
Setup DevTerm to be a cool non-GUI device

DevTerm hobby project I bought this amazing device: DevTerm A-0604. It has a beefy ARM processor, runs a custom version of Armbian, embraces Open Sour

Alex Shteinikov 9 Nov 17, 2022
Uses the Duke Energy Gateway to import near real time energy usage into Home Assistant

Duke Energy Gateway This is a custom integration for Home Assistant. It pulls near-real-time energy usage from Duke Energy via the Duke Energy Gateway

Michael Meli 28 Dec 23, 2022
ok-system-helper是一个简单的系统硬件的实时信息收集工具,使用python3.x开发

ok-system-helper ok-system-helper是一个简单的系统硬件的实时信息收集工具,使用python3.x开发,支持哪些硬件:CPU、内存、SWAP、磁盘、网卡流量。用户可在自己的项目中直接引入、开箱即用,或者结合flask等web框架轻松做成http接口供前端调用,亦可通过注

xlvchao 1 Feb 08, 2022
Python implementation of ZMP Preview Control approach for biped robot control.

ZMP Preview Control This is the Python implementation of ZMP Preview Control app

Chaobin 24 Dec 19, 2022
Workshop for student hackathons focused on IoT dev

Scenario: The Mutt Matcher (IoT version) According to the World Health Organization there are more than 200 million stray dogs worldwide. The American

Microsoft 15 Aug 10, 2022
Raspberry Pi Power Button - Wake/Power Off/Restart(Double Press)

Control Raspberry pi with physically attached button. Wake, Power Off, and Restart (Double Press) . Python3 script runs as a service with easy installation.

Stas Yakobov 16 Oct 22, 2022
Classes and functions for animated text and graphics on an LED display

LEDarcade A collection of classes and functions for animated text and graphics on an Adafruit LED Matrix.

datagod 31 Jan 04, 2023
The goal of this project is for anyone with an old printer to be able to double-sided printing.

Welcome to PDF-double-side! Hi! I'm 15. I have a old printer so I can't print double-sided outs. The goal of this project is for anyone with an old pr

DejaVu 4 Dec 28, 2021
♟️ QR Code display for P4wnP1 (SSH, VNC, any text / URL)

♟️ Display QR Codes on P4wnP1 (p4wnsolo-qr) 🟢 QR Code display for P4wnP1 w/OLED (SSH, VNC, P4wnP1 WebGUI, any text / URL / exfiltrated data) Note: Th

PawnSolo 4 Dec 19, 2022
Easyeda2kicad.py - Convert any LCSC components (including EasyEDA) to KiCad library

easyeda2kicad.py A Python script that convert any electronic components from LCSC or EasyEDA to a Kicad library Installation git clone https://github.

uPesy Electronics 150 Jan 06, 2023