+def auto_air():
+ global st
+ tii = st.get_sensor('air/inside-intake')
+ tie = st.get_sensor('air/inside-exhaust')
+ toi = st.get_sensor('air/outside-intake')
+ tmix = st.get_sensor('air/mixed')
+ house_warm = st.hysteresis('house_warm', tii, 23.5, 24.5)
+ house_hot = st.hysteresis('house_hot', tii, 24.5, 25)
+
+ # Is AC currently on (mixed air is significantly colder than inside exhaust)?
+ if tie is None or tmix is None:
+ ac_off = 1
+ else:
+ ac_off = st.hysteresis('ac_off', tmix, tie - 5, tie - 4)
+
+ # Do we want to bypass the heat exchanger?
+ if toi is None or tie is None:
+ st.set('air/bypass', 0)
+ else:
+ outside_warmer = (st.hysteresis('bypass', toi, tii - 0.5, tii + 0.5) >= 0)
+ if (house_warm >= 0) == outside_warmer:
+ st.set('air/bypass', 0)
+ else:
+ st.set('air/bypass', 1)
+
+ # Is mixed air colder than air from the inside?
+ if tii is None or tmix is None:
+ mixed_warmer = 0
+ else:
+ mixed_warmer = st.hysteresis('mixed_warmer', tmix, tii - 1, tii)
+
+ # Do we want to boost heat exchanger fan?
+ if ac_off < 0 or (house_hot > 0 and mixed_warmer < 0):
+ st.set('air/exchanger-fan', 255)
+ else:
+ st.set('air/exchanger-fan', 0)
+
+ debug("Air: house_warm={} house_hot={} ac_off={} outside_warmer={} mixed_warmer={}".format(house_warm, house_hot, ac_off, outside_warmer, mixed_warmer))
+