Git Product home page Git Product logo

open-air's Introduction

Open AIR

Open AIR is an open-source solution for home ventilation and management through Home Assistant integration. The objective of this project is to develop a versatile ecosystem of Home Assistant-compatible devices that can be easily installed in a wide variety of off-the-shelf ventilation systems, allowing seamless integration into your smart home setup.

The OpenAIR ecosystem is designed to offer the following capabilities:

  • Humidity measurement within air ducts
  • CO2 level detection in air ducts
  • Temperature monitoring inside air ducts
  • Default Wi-Fi connectivity
  • Full compatibility and control with Home Assistant out of the box
  • Adherence to open-source principles

The long-term vision for this project is to create a fully open-source ventilation system that can be 3D printed, preferably using recycled plastics as the primary material.

Open AIR Mini:

The OpenAIR Mini is a versatile, open-source ventilation controller designed to be compatible with a range of popular ventilation units, including but not limited to:

  • DucoBox Silent Standard
  • DucoBox Silent Perilex
  • DucoBox Silent Connect
  • DucoBox Focus (⚠ Note: Original Duco Valves are not supported! ⚠)
  • Orcon MVS-15RH

Example intergration in HA:

For more information about the Open AIR Mini see: Open AIR Mini

Open AIR Valve:

The Open AIR Valve is an open-source valve designed to work with several Duco ventilation boxes, including the DucoBox Silent Standard, DucoBox Silent Perilex, DucoBox Silent Connect, and DucoBox Focus (Note: Original Duco Valves are not supported). It can be fully controlled from Home Assistant, allowing you to set any value between 0-100% open or closed. Additionally, the valve can be connected to one sensor.

Example intergration in HA:

In the future, an external enclosure will be developed for the OpenAIR Valves. This housing can be conveniently installed alongside any ventilation unit, positioned between the unit and the air duct for seamless integration.

For more information about the Open AIR Valve see: Open AIR Valve

Open AIR Sensors

TODO

Progress:

Part: Done: Version: Duco Part Number: Backwards compatible: Active: Store Link:
Open AIR Mini ✔️ V1.3.0 - ✔️ ✔️ Click
Open AIR Pro - - -
Moisture Sensor ✔️ V2.0.0 0000-4218 ✔️ ✔️ Click
CO2 Sensor ✔️ V2.1.0 0000-4216 ✔️
Sense Board (RH,Co2,VOC, NOx) ✔️ V1.0.0 - ✔️ Click
Programmer ✔️ V1.1.0 - ✔️ ✔️
Open AIR Valve ✔️ V1.3.0 - ✔️ Click
External Open AIR Valve -

Backwards Compatibility

If there is a checkmark in the 'Backwards Compatible' column of the table above, it indicates that you can use the specified device in conjunction with the original Duco Silent ventilation box. For example, you can replace the original Duco moisture/humidity sensor with one of our offerings.

Special thanks:

@thomasvnl For writing the Valve firmware and valuable feedback.
@Septillion Thanks for providing valuable feedback.
@KristofRobberechts For providing a beautiful valve design!
@slurpgeit Helping write new firmware for the SHT-21 sensor + button software for the Open AIR Mini.

D.Smith For the first version of the installation manual

open-air's People

Contributors

flamingo-tech avatar mgsnuno avatar tbertels avatar thomasvnl avatar tverschoof-axians avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

open-air's Issues

Question Ducobox silent humidity sensor

Hi,

I just got the hardware and installed it in homeassistant, esphome. Now I cannot find how to configure my existing sensor on the esphome yaml.

It's the humidty sensor that came with the duco box silent, I assume uart as writen in the readme's here. But I cannot figure out what to use as sensor in the yaml to make it show up with valid data in homeassistant.

Thanks,

Can ping but not discovered by HA, no webserver

Just installed my Openair Mini. It connects to my wifi and I can ping the ip address but it's not discovered by HA and no webserver on port 80, any ideas ?

❯ sudo nmap -sT 192.168.1.202 Starting Nmap 7.80 ( https://nmap.org ) at 2024-03-30 12:51 CET Nmap scan report for 192.168.1.202 Host is up (0.011s latency). All 1000 scanned ports on 192.168.1.202 are closed

Improvement for Open Air Valve YAML

I think the YAML file for the open air valve could benefit from adding some more checks. I made some additions and added a load of comments to the file. Wasn't sure if I should post here, or on the open-air-valve page, opted for the open-air-valve page but here is a link to the thread.

Use ESPHome/Home Assitant valve component/entity

I updated my Open AIR Valve ESPHome code to use the newer valve component to control using a single entity, as opposed to the old two entities. I replaced the old "number" and "cover" blocks by:

valve:
  - platform: template
    name: "Valve"
    id: airvalve
    icon: mdi:valve
    has_position: true
    optimistic: true
    lambda: |-
      if (id(my_stepper).target_position == 0) {
        return VALVE_CLOSED;
      }
      else {
        return id(airvalve).position;
      }
    open_action:
      - stepper.set_target:
          id: my_stepper
          target: 525
    close_action:
      - stepper.set_target:
          id: my_stepper
          target: 0
    position_action:
      then:
        - stepper.set_target:
            id: my_stepper
            target: !lambda |-
              if (pos <= 0.0) { 
                return 0; 
              } else if(pos >= 1.0) {
                return 525;
              } else if (pos > 0.0 && pos < 1.0) {
                int steps = id(valve_capacity_lookup_table)[pos * 100];
                return steps;
              } else {
                return 0;
              }

Support for bypass

My ventilationbox with Heat-Exchange (Dutch: WTW) supports bypassing the heat exchange for hot days (so the heat from the house is not put back into the house).
Also there is a pre-heating option available for this device (I dont have that).

Can you add one or more relais (with according software options) for this? Maybe with configurable names?

A real life example

Hi, thank you so much for creating this piece of hardware! It is now so handy to overcome the "issues" I had with the original print. the fact the fan would always auto turn on to 100% >65% hum was annoying and hard to change. I had "arne mauer" his print to arrange thing outside via HA but this did not always work as intended.
Now with this ESP board I can from within ESPhome create automations and turn on "auto" (or off :-)).

I have to change some internals on sensors to get a "fast" reaction on automations. By default in the SHT20 file this was set to 30000. I changed that to 5000 (5 seconds). then I created new sensors for HA with a throttle to 60s.

The result:
image
image

I may not be able to quickly react if questions are asked. Don;t be mad then 👍
disclaimer: This is my setup. Feel free to use or copy. But do no blame me for anything going wrong. It's your responsibility.

the change in SHT20:

  // the temperature 5s-30s. So lets poll at 4s, or half the response time.
  SHT20() : PollingComponent(5000) { }
  //was origineel 30000

the YAML:

esphome:
  name: esp32-duco-01
  platform: ESP32
  board: esp32dev
  libraries:
    - Wire
    - u-fire/uFire SHT20@^1.1.1
  includes: 
    - custom_components/duco/sht20.h

substitutions:
  esp_name: esp32-duco-01

wifi:
  ssid: "IOT"
  password: !secret IOT_wifi_key
  use_address: 192.168.6.85
  domain: !secret domain
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "${esp_name} Fallback Hotspot"
    password: !secret Fallback_Hotspot

captive_portal:

# Enable logging
logger:
  level: DEBUG

# Enable Home Assistant API
api:

ota:

web_server:
  port: 80

time:
  - platform: homeassistant
    id: homeassistant_time

#esp32_ble_tracker:
#bluetooth_proxy:

# ! Warning ! the original Duco sensor can only be connected on sensor connector 1!

#
uart:
#UART For Sensor 1
# - rx_pin: GPIO13
#   tx_pin: GPIO12
#   baud_rate: 9600
#   id: uart_sensor_1
#UART For Sensor 2
 - rx_pin: GPIO25
   tx_pin: GPIO26
   baud_rate: 9600
   id: uart_sensor_2

i2c:
#I2C For Sensor 1
- id: i2c_sensor_1
  sda: GPIO19
  scl: GPIO18
  scan: false
  frequency: 400kHz
#I2C For Sensor 2
- id: i2c_sensor_2
  sda: GPIO16
  scl: GPIO4
  scan: false
  frequency: 400kHz

# Status led
status_led:
  pin:
    number: GPIO33

#PWM output for controlling the motor.
output:
  - platform: ledc
    pin: GPIO15
    inverted: true
    id: open_air_mini

fan:
  - platform: speed
    output: open_air_mini
    name: "${esp_name} - Fan"
    id: ducofan

sensor: 
  - <<: !include includes/include-wifi-signal.yaml
  - <<: !include includes/include-uptime-config.yaml
  
  - platform: pulse_counter
    pin: GPIO14
    unit_of_measurement: 'RPM'
    name: '${esp_name} - RPM'

  # SENSOR CONNECTOR 1 - original Duco sensor connected on sensor connector 1!
  - platform: custom
    lambda: |-
      auto sht20 = new SHT20();
      App.register_component(sht20);
      return {sht20->temperature_sensor, sht20->humidity_sensor, sht20->vpd_sensor, sht20->dew_point_sensor};
    sensors:
      - name: T
        internal: True
        id: sensor_temperature
        accuracy_decimals: 2
      - name: H
        id: sensor_humidity
        accuracy_decimals: 2
        internal: True
        on_value_range:
          - below: 65
            then:
              - if:
                  condition:
                    switch.is_on: ducoauto
                  then:
                    - fan.turn_on: 
                        id: ducofan
                        speed: 10
          - above: 65
            below: 70
            then:
              - if:
                  condition:
                    switch.is_on: ducoauto
                  then:
                    - fan.turn_on: 
                        id: ducofan
                        speed: 20
          - above: 70
            below: 75
            then:
              - if:
                  condition:
                    switch.is_on: ducoauto
                  then:
                    - fan.turn_on: 
                        id: ducofan
                        speed: 40
          - above: 75
            below: 80
            then:
              - if:
                  condition:
                    switch.is_on: ducoauto
                  then:
                    - fan.turn_on: 
                        id: ducofan
                        speed: 60
          - above: 80
            below: 85
            then:
              - if:
                  condition:
                    switch.is_on: ducoauto
                  then:
                    - fan.turn_on: 
                        id: ducofan
                        speed: 75
          - above: 85
            then:
              - if:
                  condition:
                    switch.is_on: ducoauto
                  then:
                    - fan.turn_on: 
                        id: ducofan
                        speed: 100
      - name: VPD
        id: sensor_vpd
        accuracy_decimals: 2
        internal: True
      - name: DP
        id: sensor_dew_point
        accuracy_decimals: 2
        internal: True

  # SENSOR CONNECTOR 2 - Combination of Senseair S8 & SHT-31 in one Sensor
  - platform: sht3xd
    i2c_id: i2c_sensor_2
    temperature:
      name: "${esp_name} - Sensor 2 - Temperature"
    humidity:
      name: "${esp_name} - Sensor 2 - Humidity"
      icon: mdi:water-percent
    address: 0x44
    update_interval: 30s
  - platform: senseair
    uart_id: uart_sensor_2
      #add sensor UART bus here
    co2:
      name: "${esp_name} - Sensor 2 - CO2"
    update_interval: 30s

  - platform: template
    name: "${esp_name} - Fan Speed"
    lambda: return id(ducofan).speed;
    update_interval: 3s
    unit_of_measurement: "%"
    accuracy_decimals: 0
    icon: mdi:fan

  - platform: copy
    name: "${esp_name} - Sensor 1 - Temperature"
    unit_of_measurement: °C
    accuracy_decimals: 2
    source_id: sensor_temperature
    filters:
      - throttle: 60s
  - platform: copy      
    name: "${esp_name} - Sensor 1 - Humidity"
    unit_of_measurement: "%"
    accuracy_decimals: 2
    icon: mdi:water-percent
    source_id: sensor_humidity
    filters:
      - throttle: 60s
  - platform: copy  
    name: "${esp_name} - Sensor 1 - Vapour-pressure deficit"
    unit_of_measurement: "kPa"
    accuracy_decimals: 2
    icon: mdi:air-humidifier
    source_id: sensor_vpd
    filters:
      - throttle: 60s
  - platform: copy
    name: "${esp_name} - Sensor 1 - Dew point"
    unit_of_measurement: °C
    accuracy_decimals: 2
    icon: mdi:water-thermometer-outline
    source_id: sensor_dew_point
    filters:
      - throttle: 60s

text_sensor:
  - <<: !include includes/include-uptime-human.yaml
  - <<: !include includes/include-esphome-version.yaml
  - <<: !include includes/include-wifi-info.yaml

switch:
  - <<: !include includes/include-generic-restart-switch.yaml

  - platform: template
    name: "${esp_name} - Automatisch"
    id: ducoauto
    optimistic : True
    restore_state: yes
    restore_mode: RESTORE_DEFAULT_ON
    icon: mdi:fan-auto

#https://github.com/Flamingo-tech/Open-AIR/tree/main/Open%20Air%20Mini/Software

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.