# AirVisual Node Binding

This is an openHAB binding for the AirVisual Node Air Quality Monitor (opens new window) (also known as IQAir AirVisual Pro).

# Supported Things

There is one supported Thing, the "avnode".

# Discovery

Binding will do autodiscovery for AirVisual Node by searching for a host advertised with the NetBIOS name AVISUAL-<SerialNumber>.

All discovered devices will be added to the inbox. Please note you will need to set the Node username and password in the configuration of the newly discovered thing before a connection can be made.

# Binding Configuration

The binding has no configuration options, all configuration is done at Thing level.

# Thing Configuration

The thing has a few configuration parameters:

Parameter Description
address Hostname or IP address of the Node
username The Node Samba share username. Default is 'airvisual'
password The Node Samba share password
share (Optional) The Node SMB share name. Default is 'airvisual'
refresh (Optional) The time (in seconds) to refresh the Node data. Default is 60, min is 30

Required configuration parameters can be obtained by pressing the center button on the Node for "Settings Menu" > "Network" > "Access Node data" tab.

# Channels

The binding supports the following channels:

Channel ID Item Type Description
co2 Number:Dimensionless CO2 level, ppm
humidity Number:Dimensionless Relative humidity, %
aqi Number:Dimensionless Air Quality Index (US)
pm_25 Number:Density PM2.5 level, µg/m³
temperature Number:Temperature Temperature
used_memory Number Used memory
timestamp DateTime Timestamp
battery-level Number Battery level, %
signal-strength Number Wi-Fi signal strength, 0-4

The Node updates measurements data every 5 minutes in active mode and every 15 minutes in power saving mode (screen off).

# Example

# Thing

The preferred way to add AirVisual Node to the openHAB installation is autodiscovery, but the AirVisual Node also can be configured using .things file:

airvisualnode:avnode:1a2b3c4 [ address="192.168.1.32", username="airvisual", password="12345", share="airvisual", refresh=60 ]

# Items

Here is an example of items for the AirVisual Node:

Number:Temperature Livingroom_Temperature "Temperature [%.1f %unit%]" <temperature> {channel="airvisualnode:avnode:1a2b3c4:temperature"}
Number:Dimensionless Livingroom_Humidity "Humidity [%d %unit%]" <humidity> {channel="airvisualnode:avnode:1a2b3c4:humidity"}
Number:Dimensionless Livingroom_CO2_Level "CO₂" {channel="airvisualnode:avnode:1a2b3c4:co2"}
Number:Dimensionless Livingroom_Aqi_Level "Air Quality Index" { channel="airvisualnode:avnode:1a2b3c4:aqi" }
Number:Density Livingroom_Pm25_Level "PM2.5 Level" { channel="airvisualnode:avnode:1a2b3c4:pm_25" }
DateTime Livingroom_Aqi_Timestamp "AQI Timestamp [%1$tH:%1$tM]" { channel="airvisualnode:avnode:1a2b3c4:timestamp" }

# Rules

Example rules:

rule "AirVisual Node Temperature Rule"
when
    Item Livingroom_Temperature changed
then
    if (Livingroom_Temperature.state > 25.0|°C) {
        logInfo("avnode.rules", "Temperature is above 25°C")
    }
end

rule "AirVisual Node Humidity Rule"
when
    Item Livingroom_Humidity changed
then
    if (Livingroom_Humidity.state < 35.0|%) {
        logInfo("avnode.rules", "Humidity is below 35%")
    }
end

rule "AirVisual Node CO₂ Level Rule"
when
    Item Livingroom_CO2_Level changed
then
    if (Livingroom_CO2_Level.state > 1000.0|"ppm") {
        logInfo("avnode.rules", "CO₂ level is above 1000 ppm")
    }
end

rule "AirVisual Node PM2.5 Level Rule"
when
    Item Livingroom_Pm25_Level changed
then
    if (Livingroom_Pm25_Level.state > 25.0|"µg/m³") {
        logInfo("avnode.rules", "PM2.5 level is above 25 µg/m³")
    }
end

# Sitemap

Example sitemap:

sitemap home label="Home" {
    Frame label="Living Room" {
        Text item=Livingroom_Temperature
        Text item=Livingroom_Humidity
        Text item=Livingroom_CO2_Level
        Text item=Livingroom_Aqi_Level
        Text item=Livingroom_Pm25_Level
    }
}