devices.esphome.io
Athom Human Presence Sensor (PS01)
Athom Human Presence Sensor (PS01)
Device Type: sensorElectrical Standard: globalBoard: esp8266Difficulty: Comes with ESPhome, 1/5
      
  
        
Maker: https://www.athom.tech/
Available from
Note
Built-in CH340C serial port chip, connect the Type-C data cable to flash the firmware directly (the attached Type-C cable has no data cable, you need to prepare the Type-C data cable to flash the firmware)
GPIO Pinout
| Pin | Function | 
|---|---|
| GPIO0 | Button | 
| GPIO12 | Pir Output | 
| GPIO13 | Radar RX | 
| GPIO14 | Radar Output | 
| GPIO15 | Radar TX | 
| GPIO16 | LedLink | 
Basic Configuration
substitutions:  name: "athom-presence-sensor"  friendly_name: "presence sensor"  room: ""  device_description: "mmwave radar human presence sensor"  project_name: "Athom Technology.Presence Sensor"  project_version: "1.0"
esphome:  name: "${name}"  friendly_name: "${friendly_name}"  name_add_mac_suffix: true  project:    name: "${project_name}"    version: "${project_version}"
esp8266:  board: esp8285  restore_from_flash: true
preferences:  flash_write_interval: 1min
# Enable logginglogger:
api:
ota:
mdns:  disabled: false
web_server:  port: 80
wifi:  ssid: !secret wifi_ssid  password: !secret wifi_password  ap:
captive_portal:
dashboard_import:  package_import_url: github://athom-tech/athom-configs/athom-presence-sensor.yaml
light:  - platform: status_led    name: "Status LED"    id: led    pin: GPIO16    disabled_by_default: true    entity_category: config
i2c:  sda: GPIO4  scl: GPIO5  scan: true
uart:  tx_pin: GPIO15  rx_pin: GPIO13  baud_rate: 115200  # debug:  #   direction: BOTH  #   dummy_receiver: true  #   after:  #     delimiter: "\n"  #   sequence:  #     - lambda: UARTDebug::log_string(direction, bytes);
binary_sensor:  - platform: status    name: "Status"
  - platform: gpio    pin:      number: GPIO0      mode: INPUT_PULLUP      inverted: true    name: "Button"    disabled_by_default: true    on_multi_click:      - timing:          - ON for at least 4s        then:          - button.press: factory_reset_device
  - platform: gpio    pin:      number: GPIO14      mode:        input: true        pullup: true    name: "Pir Sensor"    id: pir    filters:      - delayed_on: 50ms      - delayed_off: 10s    device_class: motion    on_press:      then:        - light.turn_on: led
  - platform: gpio    pin:      number: GPIO12      mode:        input: true        pullup: true    name: "mmWave Sensor"    id: mmwave    filters:      - delayed_on: 50ms    device_class: motion    on_release:      then:        - light.turn_off: led
  - platform: template    name: "Occupancy"    id: occupancy    device_class: occupancy    lambda: |-      if ( id(mmwave).state and id(pir).state) {        return true;      }      else if (id(mmwave).state == 0) {        return false;      }      else {        return id(occupancy).state;      }
sensor:  - platform: uptime    name: "Uptime Sensor"
  - platform: wifi_signal    name: "WiFi Signal Sensor"    update_interval: 60s
  - platform: bh1750    name: "Light Sensor"    address: 0x23    update_interval: 5s
switch:  - platform: template    name: "mmWave Status"    id: "mmwave_sensor"    internal: true    entity_category: config    optimistic: true    restore_mode: DISABLED    turn_on_action:      - uart.write: "sensorStart\r\n"    turn_off_action:      - uart.write: "sensorStop\r\n"
number:  - platform: template    name: Farthest Detection          #Value range: 1.9 ~ 12m  Default: 6    id: Farthest_Detection    entity_category: config    min_value: 1.9    max_value: 12    initial_value: 6    optimistic: true    step: 0.1    restore_value: true    unit_of_measurement: m    mode: slider    set_action:      - switch.turn_off: mmwave_sensor      - delay: 500ms      - uart.write: !lambda          std::string ranges = "setRange 1.8 " + str_sprintf("%.1f",id(Farthest_Detection).state) + "\r\n";          return std::vector<uint8_t>(ranges.begin(), ranges.end());      - delay: 500ms      - uart.write: "saveConfig\r\n"      - delay: 500ms      - switch.turn_on: mmwave_sensor
  - platform: template    name: Maintain Sensitivity                 #Value range: 0 ~ 9   Default Maintain sensitivity: 7    Default Trigger sensitivity: 5    id: Maintain_Sensitivity    entity_category: config    min_value: 0    max_value: 9    initial_value: 7    optimistic: true    step: 1    restore_value: true    mode: slider    set_action:      - switch.turn_off: mmwave_sensor      - delay: 500ms      - uart.write: !lambda          std::string sensitivitys = "setSensitivity " + str_sprintf("%.0f",id(Maintain_Sensitivity).state) + " " + str_sprintf("%.0f",id(Trigger_Sensitivity).state) + "\r\n";          return std::vector<uint8_t>(sensitivitys.begin(), sensitivitys.end());      - delay: 500ms      - uart.write: "saveConfig\r\n"      - delay: 500ms      - switch.turn_on: mmwave_sensor
  - platform: template    name: Trigger Sensitivity     #Value range: 0 ~ 9   Default Maintain sensitivity: 7    Default Trigger sensitivity: 5    id: Trigger_Sensitivity    entity_category: config    min_value: 0    max_value: 9    initial_value: 5    optimistic: true    step: 1    restore_value: true    mode: slider    set_action:      - switch.turn_off: mmwave_sensor      - delay: 500ms      - uart.write: !lambda          std::string sensitivityss = "setSensitivity " + str_sprintf("%.0f",id(Maintain_Sensitivity).state) + " " + str_sprintf("%.0f",id(Trigger_Sensitivity).state) + "\r\n";          return std::vector<uint8_t>(sensitivityss.begin(), sensitivityss.end());      - delay: 500ms      - uart.write: "saveConfig\r\n"      - delay: 500ms      - switch.turn_on: mmwave_sensor
  - platform: template    name: Detection Delay      #Confirmation delay      Value range: 0 ~ 100  default 0.050 seconds.    id: Detection_Delay    entity_category: config    min_value: 0.1    max_value: 60    initial_value: 0.1    optimistic: true    step: 0.1    restore_value: true    unit_of_measurement: seconds    mode: slider    set_action:      - switch.turn_off: mmwave_sensor      - delay: 500ms      - uart.write: !lambda |-          std::string detections = "setLatency " + str_sprintf("%.1f",id(Detection_Delay).state) + " " + str_sprintf("%.0f",id(Fading_Time).state) + "\r\n";          return std::vector<uint8_t>(detections.begin(),detections.end());      - delay: 500ms      - uart.write: "saveConfig\r\n"      - delay: 500ms      - switch.turn_on: mmwave_sensor
  - platform: template    name: Fading Time           #Fade-out delay        Value range: 0.5 ~ 1500, default 15 seconds.    id: Fading_Time    entity_category: config    min_value: 1    max_value: 300    initial_value: 15    optimistic: true    step: 1    restore_value: true    unit_of_measurement: seconds    mode: auto    set_action:      - switch.turn_off: mmwave_sensor      - delay: 500ms      - uart.write: !lambda |-          std::string fadings = "setLatency " + str_sprintf("%.1f",id(Detection_Delay).state) + " " + str_sprintf("%.0f",id(Fading_Time).state) + "\r\n";          return std::vector<uint8_t>(fadings.begin(), fadings.end());      - delay: 500ms      - uart.write: "saveConfig\r\n"      - delay: 500ms      - switch.turn_on: mmwave_sensor
  - platform: template    name: Blockade Time                  #Configure block time        Value range: 1 ~ 255, default 1 seconds.    id: Blockade_Time    entity_category: config    min_value: 1    max_value: 255    initial_value: 1    optimistic: true    step: 1    restore_value: true    unit_of_measurement: seconds    mode: slider    set_action:      - switch.turn_off: mmwave_sensor      - delay: 500ms      - uart.write: !lambda          std::string blockades = "setInhibit " + str_sprintf("%.0f",x) + "\r\n";          return std::vector<uint8_t>(blockades.begin(), blockades.end());      - delay: 500ms      - uart.write: "saveConfig\r\n"      - delay: 500ms      - switch.turn_on: mmwave_sensor
button:  - platform: factory_reset    name: Restart with Factory Default Settings    id: Reset    entity_category: config    internal: true  - platform: template    name: "Reset device"    id: "factory_reset_device"    entity_category: config    on_press:      - switch.turn_off: mmwave_sensor      - delay: 500ms      - uart.write: "resetCfg\r\n"      - delay: 1s      - switch.turn_on: mmwave_sensor      - button.press: Reset
  - platform: restart    name: Restart_esp    id: restart_esp    entity_category: config    internal: true  - platform: template    name: "Restart_mmWave"    id: "restart_mmwave"    entity_category: config    internal: true    on_press:      - uart.write: "resetSystem\r\n"
  - platform: template    name: Restart device    entity_category: config    on_press:      - button.press: restart_mmwave      - delay: 1s      - button.press: restart_esp
text_sensor:  - platform: wifi_info    ip_address:      name: "IP Address"    ssid:      name: "Connected SSID"    mac_address:      name: "Mac Address"
time:  - platform: sntp    id: my_time