recuperator fan control with esp32
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
esp-recuperator/main/fancontrol.h

103 lines
2.4 KiB

//
// Created by MightyPork on 2022/08/20.
//
#ifndef FANCTL_FANCONTROL_H
#define FANCTL_FANCONTROL_H
#include <stdint.h>
#include "actuators.h"
void fancontrol_init();
2 years ago
/** this is bit-based: IN:OUT:BLIND */
enum ventilation_mode {
VENT_MODE_OFF = 0,
VENT_MODE_FREE = 1,
VENT_MODE_OUT = 3,
VENT_MODE_IN = 5,
VENT_MODE_RECUP = 7,
};
enum recup_mode {
/** stricly time based recuperation switching */
RECUP_MODE_TIME = 0,
/** Temperature-based recuperation switching
* (switch direction when further blowing won't save energy) */
RECUP_MODE_TEMP = 1,
};
struct FanControlState {
/**
* Power requested trough register or as the default value.
* This value stays unchanged even if stopped, unlike gAct.power which reflects the actual output.
*/
uint16_t set_power;
/**
* rezim ventilace. Use fan_set_vent_mode() to change it!
*/
enum ventilation_mode set_vent_mode;
/** Status for the register */
enum ventilation_mode instantaneous_vent_mode;
/* sensors */
bool valid_t_indoor;
bool valid_t_outdoor;
2 years ago
bool valid_t_inflow;
bool valid_t_exhaust;
bool valid_t_actual_in;
bool valid_t_actual_out;
2 years ago
int16_t t_indoor;
int16_t t_outdoor;
int16_t t_inflow;
int16_t t_exhaust;
2 years ago
int16_t t_actual_in;
int16_t t_actual_out;
uint16_t real_recup_time_in;
uint16_t real_recup_time_out;
// Private
/**
* like vent_mode, but if power is 0, becomes OFF
*/
enum ventilation_mode effective_vent_mode;
/**
* skutecny aktualni pohyb motoru (zustava stejny, dokud ramp time nedosahne nuly)
*/
enum motor_direction real_direction;
/**
* Poloha roletky, 0<->blind_time, inkrement/dekrement 1 za sekundu.
* Pri zmene blind_time se musi hodnota aktualizovat, pokud je na doraze nebo za.
*/
uint16_t blind_position;
/**
* Cas chodu motoru v aktualnim smeru, inkrement 1 za sekundu.
*/
uint16_t run_time;
/**
* "stav chodu motoru". 0=stop, ramp_time = jede.
*/
uint16_t ramp;
2 years ago
int32_t t1_aggr;
int32_t t2_aggr;
uint32_t t_aggr_cnt;
2 years ago
// helper counters that increment hour counters when overflow
uint16_t uptime_secs;
uint16_t motor_secs;
uint16_t uptime_hours;
uint16_t motor_hours;
};
extern struct FanControlState gState;
void fan_set_vent_mode(enum ventilation_mode mode);
void fan_set_power(uint16_t power);
#endif //FANCTL_FANCONTROL_H