167 lines
6.7 KiB
Markdown
167 lines
6.7 KiB
Markdown
# Overview
|
|
|
|
![aircon.sh in action](https://cube.nethack.net/images/aircon_control.png "aircon.sh in action")
|
|
|
|
Script to automate control of an home reverse cycle aircon system based on custom logic and temperature measurements.
|
|
|
|
This was originally written for an [AdvantageAir](https://www.advantageair.com.au/) system. It just calls an external script to interface with the aircon, so should be easily adaptable to other systems.
|
|
|
|
# Requirements
|
|
- [pymyair](https://github.com/smallsam/pymyair)
|
|
|
|
|
|
# Features
|
|
|
|
- Log temperature measurements to a CSV file or InfluxDB
|
|
- Control zone temperature by opening/closing its vents
|
|
- Control zone temperature by opening/closing vents in adjacent zones
|
|
- Automatically adjust aircon settings based on defined temperature thresholds
|
|
- Turn zones on/off based on ARP table entires for specific MAC addresses (for example, if a TV is turned on or a person's phone is detected)
|
|
- Define temperature rules based on weekday and/or time
|
|
|
|
# Usage
|
|
|
|
root@gridbug:~# scripts/aircon.sh -h
|
|
usage: scripts/aircon.sh [options]
|
|
|
|
Modifies aircon based on configured parameters in /root/.airconrc.
|
|
|
|
-h Show this text.
|
|
-c Cron mode. Only show output if actions were taken.
|
|
-i x.x.x.x Specify IP address for aircon (default is 10.99.99.1)
|
|
-I db Log all zone temperatures to given influxdb database, then exit (see -o).
|
|
-A db Log actions to given influxdb database.
|
|
-f file Specify an alternate config file.
|
|
-k file If file exists, never change aircon settings (default: /root/.aircon_noaction).
|
|
-l num Set number of too hot/cold zones at which to taking action.
|
|
-L Log all zone temperatures to CSV file, then exit (see -o).
|
|
-o file Specify CSV output file. Default: /root/acstats.csv
|
|
-m Generate a config file based on current aircon setup.
|
|
-p Profiler mode.
|
|
-w List which zone owners' devices are available then exit.
|
|
-t num Specify degrees below min temperature before taking action.
|
|
-T num Specify degrees above max temperature before taking action.
|
|
-y Actually run commands/db inserts. By default, commands are just displayed.
|
|
|
|
|
|
# Examples
|
|
|
|
## Sample .airconrc file
|
|
|
|
root@gridbug:~# cat .airconrc
|
|
|
|
options -t 0.5
|
|
|
|
modelock heat
|
|
|
|
constant Family
|
|
|
|
owner Study robsphone
|
|
owner Rob&Beth robsphone bethsphone
|
|
owner Brendan brendansphone
|
|
owner Media lgtv_wifi
|
|
|
|
@Thu-Fri;0830-1630 force Nursery close # Childcare hours
|
|
@1830-0630 temp Nursery 17-19
|
|
|
|
|
|
@0600-2359 temp Family 18-21
|
|
temp Media 18-22
|
|
temp Rob&Beth 18-22
|
|
@Mon-Fri;0830-1730 temp Study 18-22 # Rob working
|
|
@Sat-Sun ignore Study # Not working
|
|
2000-0700 temp Ben/Sewing 18-22
|
|
@Mon-Fri;0830-1730 temp Ben/Sewing 17-22 # Brendan working
|
|
|
|
adj Brendan Family
|
|
adj Media Brendan
|
|
adj Rob&Beth Family
|
|
adj Study Family
|
|
|
|
person Rob robsphone
|
|
person Beth bethsphone
|
|
person Brendan brendansphone
|
|
|
|
## Generate ~/.airconrc based on your a tual aircon zones
|
|
bash$ aircon.sh -m
|
|
|
|
## Log temperature for each zone to csv then exit
|
|
bash$ aircon.sh -L -o /root/acstats.csv -x /usr/local/bin/pymyair -f /root/.airconrc
|
|
|
|
## Preview influxdb inserts for zone temperatures
|
|
bash$ aircon.sh -I myinfluxdb
|
|
/usr/local/bin/influx -database myinfluxdb -execute INSERT temperature,room=Family value=18.7
|
|
/usr/local/bin/influx -database myinfluxdb -execute INSERT temperature,room=Brendan value=19.1
|
|
/usr/local/bin/influx -database myinfluxdb -execute INSERT temperature,room=Media value=21
|
|
/usr/local/bin/influx -database myinfluxdb -execute INSERT temperature,room=Rob&Beth value=18.4
|
|
/usr/local/bin/influx -database myinfluxdb -execute INSERT temperature,room=Study value=19.2
|
|
/usr/local/bin/influx -database myinfluxdb -execute INSERT temperature,room=Nursery value=17.8
|
|
/usr/local/bin/influx -database myinfluxdb -execute INSERT attendance,person=Rob value=1
|
|
/usr/local/bin/influx -database myinfluxdb -execute INSERT attendance,person=Beth value=1
|
|
/usr/local/bin/influx -database myinfluxdb -execute INSERT aircon running=0
|
|
/usr/local/bin/influx -database myinfluxdb -execute INSERT aircon mode=0
|
|
|
|
## Log temperature for each zone to local influxdb then exit
|
|
bash$ aircon.sh -I myinfluxdb -y
|
|
|
|
## Determine required aircon changes and display them only (dry run)
|
|
bash$ aircon.sh
|
|
Aircon mode: heat (locked to heat)
|
|
Current myzone: Family (zone 1)
|
|
Tolerance: 0.5 degrees low, 0 degrees high
|
|
Valid Set Actual Proposed
|
|
Zone Temp State Temp Temp Action
|
|
Family (C) 18-21 open 19 21.6 close_vent
|
|
Brendan n/a close 19 19.3 n/a
|
|
Media 18-22 close 20 21.6 n/a
|
|
Rob&Beth 18-22 close 18 19.5 n/a
|
|
Study n/a close 19 20.6 n/a
|
|
Mel&Rob 18-21 close 18 19.5 n/a
|
|
Nursery 17-19 open 19 18.9 set_myzone
|
|
Ben/Sewing n/a close 18 17.6 n/a
|
|
|
|
Analysis:
|
|
- Family is too hot (constant zone)
|
|
|
|
Proposed commands:
|
|
myair 10.99.99.1 set --zone 1 --state off --temp 19 # In zone Family, close vent
|
|
myair 10.99.99.1 myzone --zone 7 # Set MyZone to Nursery
|
|
|
|
## Make required aircon changes
|
|
bash$ aircon.sh -y
|
|
Aircon mode: heat (locked to heat)
|
|
Current myzone: Family (zone 1)
|
|
Tolerance: 0.5 degrees low, 0 degrees high
|
|
Valid Set Actual Proposed
|
|
Zone Temp State Temp Temp Action
|
|
Family (C) 18-21 open 19 21.6 close_vent
|
|
Brendan n/a close 19 19.3 n/a
|
|
Media 18-22 close 20 21.6 n/a
|
|
Rob&Beth 18-22 close 18 19.5 n/a
|
|
Study n/a close 19 20.6 n/a
|
|
Mel&Rob 18-21 close 18 19.5 n/a
|
|
Nursery 17-19 open 19 18.9 set_myzone
|
|
Ben/Sewing n/a close 18 17.6 n/a
|
|
|
|
Analysis:
|
|
- Family is too hot (constant zone)
|
|
|
|
Proposed commands:
|
|
myair 10.99.99.1 set --zone 1 --state off --temp 19 # In zone Family, close vent
|
|
myair 10.99.99.1 myzone --zone 7 # Set MyZone to Nursery
|
|
|
|
Running action: In zone Family, close vent
|
|
RUNNING myair 10.99.99.1 set --zone 1 --state off --temp 19
|
|
Running action: Set MyZone to Nursery
|
|
RUNNING myair 10.99.99.1 myzone --zone 7
|
|
|
|
|
|
## Make required aircon changes and log actions to influxdb
|
|
bash$ aircon.sh -y -A myinfluxdb
|
|
|
|
## Make required aircon changes and only produce output if actions taken (cron mdoe)
|
|
bash$ aircon.sh -y -c
|
|
|
|
|
|
|