# Firmware for the Sinara 8451 Thermostat - [x] [Continuous Integration](https://nixbld.m-labs.hk/job/stm32/stm32/thermostat) - [x] [Download latest firmware build](https://nixbld.m-labs.hk/job/stm32/stm32/thermostat/latest/download-by-type/file/binary-dist) ## Building ### Debian-based systems (tested on Ubuntu 19.10) - install git, clone this repository - install [rustup](https://rustup.rs/) ```shell rustup toolchain install nightly rustup update rustup target add thumbv7em-none-eabihf --toolchain nightly rustup default nightly cargo build --release ``` The resulting ELF file will be located under `target/thumbv7em-none-eabihf/release/thermostat` ## Network ### Connecting Ethernet, IP: 192.168.1.26/24 Use netcat to connect to port 23/tcp (telnet) ```sh nc -vv 192.168.1.26 23 ``` telnet clients send binary data after connect. Enter \n once to invalidate the first line of input. ### Reading ADC input Set report mode to `on` for a continuous stream of input data. The scope of this setting is per TCP session. ### Commands | Syntax | Function | | --- | --- | | `report` | Show current input | | `report mode` | Show current report mode | | `report mode ` | Set report mode | | `pwm` | Show current PWM settings | | `pwm <0/1> max_i_pos ` | Set PWM duty cycle for **max_i_pos** to *ampere* | | `pwm <0/1> max_i_neg ` | Set PWM duty cycle for **max_i_neg** to *ampere* | | `pwm <0/1> max_v ` | Set PWM duty cycle for **max_v** to *volt* | | `pwm <0/1> ` | Disengage PID, set **i_set** DAC to *ampere* | | `pwm <0/1> pid` | Set PWM to be controlled by PID | | `center <0/1> ` | Set the MAX1968 0A-centerpoint to *volts* | | `center <0/1> vref` | Set the MAX1968 0A-centerpoint to measure from VREF | | `pid` | Show PID configuration | | `pid <0/1> target ` | Set the PID controller target | | `pid <0/1> kp ` | Set proportional gain | | `pid <0/1> ki ` | Set integral gain | | `pid <0/1> kd ` | Set differential gain | | `pid <0/1> output_min ` | Set mininum output | | `pid <0/1> output_max ` | Set maximum output | | `pid <0/1> integral_min ` | Set integral lower bound | | `pid <0/1> integral_max ` | Set integral upper bound | | `s-h` | Show Steinhart-Hart equation parameters | | `s-h <0/1> ` | Set Steinhart-Hart parameter for a channel | | `postfilter <0/1> rate ` | Set postfilter output data rate | | `load` | Restore configuration from EEPROM | | `save` | Save configuration to EEPROM | | `reset` | Reset the device |