We went with the FireAngel solution again in the new house, I have mains and battery units monitoring heat, smoke and CO2.
Where can I get one of the boards?
We went with the FireAngel solution again in the new house, I have mains and battery units monitoring heat, smoke and CO2.
Where can I get one of the boards?
Thanks for such a great project. In case it helps someone else, here’s how I did it.
I initially soldered it all up and it didn’t work. I then had to messily unsolder everything before doing it on the breadboard to test all my componentas properly. Lesson learnt - do a proper bench test first……
I based my yaml config around this updated-format post from:
I also created a separate binary_sensor for the gateway module’s connectivity with a delay_off period of 1hr, which is then referenced in the availabilty sections of all the different alarms. This means that if the gateway module is unplugged from my HA server for <1hr, the status of all the radios remains unchanged and I don’t have to go through the faff of testing each individual radio again. There is a small assumption of course that a status update for one individual radio hasn’t occured during that time….
Anyway, I’ve posted the yaml here for all the template bits of my configuration, along with a few improvements. I’m sure there are some things which could be tightened up on still though: any suggestions gratefully received!
################################# FireAngel Template Sensors ###################
# See shell_command.yaml for shell commands and service calls etc
# See sensor.yaml for sensor.fireangel_data. This is the serial sensor from which all data travels and feeds these templaes
# 3 group helper binary_sensors which monitor for problems - binary_sensor.fireangel_fire, binary_sensor.fireangel_batteries & binary_sensor.fireangel_network_status. These feed into alerts and front dashboard
# | Bridge Device ID (letters need to be in lower case in YAML)
# WiSafe2-to-HomeAssistant-Bridge | a5b813
# Downstairs Hallway Smoke Alarm | WST-632 | ffe204
# Upstairs Landing Smoke Alarm | WST-632 | 6c7704
# Spare Room Hallway Smoke Alarm | WST-632 | 78d604
# Emily’s Room Smoke Alarm | WST-632 | 2cd604
# Garage Smoke Alarm | WST-632 | efD003
# Sitting Room CO Alarm | W2-CO-10X | 1beb05
# Kitchen Heat Alarm | WHT-630 | 6e481a
#-------------------------
#HeartBeat
#Sets state to Online / Offline, based on heartbeat messages
#-------------------------
- binary_sensor:
- name: "FireAngel Gateway Connectivity"
unique_id: fireangel_heartbeat
icon: mdi:heart-pulse
device_class: connectivity
state: >
{% if states('sensor.fireangel_data') !='unknown' and (now() - states.sensor.fireangel_data.last_changed).total_seconds() < 125 %}
on
{% else %}
off
{% endif %}
# If gateway module is unplugged or HA server switched off for short time, individual alarms' connectivity stays on line (as far as HA is concerned), as otherwise would need to do a test on each alarm to get HA status back again. Feeds availability for individual alarms
# Compromise required, as gateway can't poll other radios/alarms to check their status when it's back online, as they only report a status change when something happens, to preserve battery life
# So small assumption is that if gateway module is unplugged then re-connected briefly (less than delay_off), there hasn't simultaneously been a change in the status of one of the other radios
# Trade off advantage is avoiding the big faff of doing a test or base unplug on every radio in the network otherwise
# Fiddle with delay here if required
- name: "FireAngel Connectivity with Grace Period"
unique_id: fireangel_connectivity_with_grace_period
icon: mdi:check-network-outline
device_class: connectivity
delay_off:
minutes: 60
state: >
{{ is_state('binary_sensor.fireangel_gateway_connectivity', 'on') and not is_state('binary_sensor.fireangel_radio', 'off') }}
# These two triggers trigger all other template sensors below
- trigger:
- trigger: state
entity_id: sensor.fireangel_data
not_to:
- unknown
- unavailable
- trigger: state
entity_id: binary_sensor.fireangel_gateway_connectivity
not_to:
- unknown
- unavailable
sensor:
- name: "FireAngel Messages"
unique_id: fireangel_messages
icon: mdi:message-processing
state: >
{% if not '{' in states('sensor.fireangel_data') %}
{{states('sensor.fireangel_data')}}
{% endif %}
- # This is for display purposes, to show when there is a test
name: "FireAngel Built in Test Function"
unique_id: fireangel_pseudo_firmware_alarm
state: >
{% if state_attr('sensor.fireangel_data', 'device')=='a5b813'.upper() %}
{{ state_attr('sensor.fireangel_data', 'event') }}
{% endif %}
binary_sensor:
- name: "FireAngel Radio"
unique_id: fireangel_radio
device_class: connectivity
availability: "{{ is_state('binary_sensor.fireangel_gateway_connectivity', 'on')}}"
state: >
{% if 'INIT OK' in states('sensor.fireangel_data') %}
on
{% elif 'Radio not ready - Trying to reset' in states('sensor.fireangel_data') or states('sensor.fireangel_data') == 'Initializing radio' %}
off
{% else %}
{{this.state}}
{% endif %}
#------------------------------------
# Downstairs Hallway | Smoke Alarm | WST-632 | ffe204 heat
#------------------------------------
- name: "FireAngel Smoke Alarm Downstairs Hallway Connectivity"
unique_id: fireangel_downstairs_hallway_connectivity
device_class: connectivity
availability: "{{ is_state('binary_sensor.fireangel_connectivity_with_grace_period', 'on')}}"
state: >
{% if state_attr('sensor.fireangel_data', 'device')=='ffe204'.upper() %}
{% if state_attr('sensor.fireangel_data', 'event')=='MISSING' %}
off
{% else %}
on
{% endif %}
{% else %}
{{this.state}}
{% endif %}
- name: "FireAngel Smoke Alarm Downstairs Hallway Smoke Status"
unique_id: fireangel_downstairs_hallway_smoke_status
device_class: smoke
availability: "{{ is_state('binary_sensor.fireangel_smoke_alarm_downstairs_hallway_connectivity', 'on')}}"
state: >
{% if state_attr('sensor.fireangel_data', 'event')=='SILENCE' %}
off
{% elif state_attr('sensor.fireangel_data', 'device')=='ffe204'.upper() %}
{% if state_attr('sensor.fireangel_data', 'event')=='FIRE EMERGENCY' %}
on
{% else %}
{{this.state}}
{% endif %}
{% else %}
{{this.state}}
{% endif %}
- name: "FireAngel Smoke Alarm Downstairs Hallway Smoke Test"
unique_id: fireangel_downstairs_hallway_smoke_test
device_class: problem
icon: mdi:thermometer
availability: "{{ is_state('binary_sensor.fireangel_smoke_alarm_downstairs_hallway_connectivity', 'on')}}"
state: >
{% if state_attr('sensor.fireangel_data', 'device')=='ffe204'.upper() %}
{% if state_attr('sensor.fireangel_data', 'event')=='FIRE TEST' %}
{% if state_attr('sensor.fireangel_data', 'result')=='PASS' %}
off
{% else %}
on
{% endif %}
{% else %}
{{this.state}}
{% endif %}
{% else %}
{{this.state}}
{% endif %}
- name: "FireAngel Smoke Alarm Downstairs Hallway Battery"
unique_id: fireangel_downstairs_hallway_battery
device_class: battery
availability: "{{ is_state('binary_sensor.fireangel_smoke_alarm_downstairs_hallway_connectivity', 'on')}}"
state: >
{% if state_attr('sensor.fireangel_data', 'device')=='ffe204'.upper() and states.sensor.fireangel_data.attributes.battery is defined %}
{% if state_attr('sensor.fireangel_data', 'battery')=='LOW' %}
on
{% else %}
off
{% endif %}
{% else %}
{{this.state}}
{% endif %}
- name: "FireAngel Smoke Alarm Downstairs Hallway On Base"
unique_id: fireangel_downstairs_hallway_onbase
device_class: presence
availability: "{{ is_state('binary_sensor.fireangel_smoke_alarm_downstairs_hallway_connectivity', 'on')}}"
state: >
{% if state_attr('sensor.fireangel_data', 'device')=='ffe204'.upper() and states.sensor.fireangel_data.attributes.base is defined %}
{% if state_attr('sensor.fireangel_data', 'base')=='OFF' %}
off
{% else %}
on
{% endif %}
{% else %}
{{this.state}}
{% endif %}
#------------------------------------
# Sitting Room | CO Alarm | W2-CO-10X | 1beb05
#------------------------------------
- name: "FireAngel CO Alarm Sitting Room Connectivity"
unique_id: fireangel_sitting_room_connectivity
device_class: connectivity
availability: "{{ is_state('binary_sensor.fireangel_connectivity_with_grace_period', 'on')}}"
state: >
{% if state_attr('sensor.fireangel_data', 'device')=='1beb05'.upper() %}
{% if state_attr('sensor.fireangel_data', 'event')=='MISSING' %}
off
{% else %}
on
{% endif %}
{% else %}
{{this.state}}
{% endif %}
- name: "FireAngel CO Alarm Sitting Room CO Status"
unique_id: fireangel_sitting_room_co_status
device_class: carbon_monoxide
availability: "{{ is_state('binary_sensor.fireangel_co_alarm_sitting_room_connectivity', 'on')}}"
state: >
{% if state_attr('sensor.fireangel_data', 'event')=='SILENCE' %}
off
{% elif state_attr('sensor.fireangel_data', 'device')=='1beb05'.upper() %}
{% if state_attr('sensor.fireangel_data', 'event')=='CARBON MONOXIDE EMERGENCY' %}
on
{% else %}
{{this.state}}
{% endif %}
{% else %}
{{this.state}}
{% endif %}
- name: "FireAngel CO Alarm Sitting Room CO Test"
unique_id: fireangel_sitting_room_co_test
device_class: problem
icon: mdi:molecule-co
availability: "{{ is_state('binary_sensor.fireangel_co_alarm_sitting_room_connectivity', 'on')}}"
state: >
{% if state_attr('sensor.fireangel_data', 'device')=='1beb05'.upper() %}
{% if state_attr('sensor.fireangel_data', 'event')=='CARBON MONOXIDE TEST' %}
{% if state_attr('sensor.fireangel_data', 'result')=='PASS' %}
off
{% else %}
on
{% endif %}
{% else %}
{{this.state}}
{% endif %}
{% else %}
{{this.state}}
{% endif %}
- name: "FireAngel CO Alarm Sitting Room Battery"
unique_id: fireangel_sitting_room_battery
device_class: battery
availability: "{{ is_state('binary_sensor.fireangel_co_alarm_sitting_room_connectivity', 'on')}}"
state: >
{% if state_attr('sensor.fireangel_data', 'device')=='1beb05'.upper() and states.sensor.fireangel_data.attributes.battery is defined %}
{% if state_attr('sensor.fireangel_data', 'battery')=='LOW' %}
on
{% else %}
off
{% endif %}
{% else %}
{{this.state}}
{% endif %}
- name: "FireAngel CO Alarm Sitting Room On Base"
unique_id: fireangel_sitting_room_onbase
device_class: presence
availability: "{{ is_state('binary_sensor.fireangel_co_alarm_sitting_room_connectivity', 'on')}}"
state: >
{% if state_attr('sensor.fireangel_data', 'device')=='1beb05'.upper() and states.sensor.fireangel_data.attributes.base is defined %}
{% if state_attr('sensor.fireangel_data', 'base')=='OFF' %}
off
{% else %}
on
{% endif %}
{% else %}
{{this.state}}
{% endif %}
#------------------------------------
# Kitchen | Heat Alarm | WHT-630 | 6e481a
#------------------------------------
- name: "FireAngel Heat Alarm Kitchen Connectivity"
unique_id: fireangel_kitchen_connectivity
device_class: connectivity
availability: "{{ is_state('binary_sensor.fireangel_connectivity_with_grace_period', 'on')}}"
state: >
{% if state_attr('sensor.fireangel_data', 'device')=='6e481a'.upper() %}
{% if state_attr('sensor.fireangel_data', 'event')=='MISSING' %}
off
{% else %}
on
{% endif %}
{% else %}
{{this.state}}
{% endif %}
- name: "FireAngel Heat Alarm Kitchen Heat Status"
unique_id: fireangel_kitchen_heat_status
device_class: heat
availability: "{{ is_state('binary_sensor.fireangel_heat_alarm_kitchen_connectivity', 'on')}}"
state: >
{% if state_attr('sensor.fireangel_data', 'event')=='SILENCE' %}
off
{% elif state_attr('sensor.fireangel_data', 'device')=='6e481a'.upper() %}
{% if state_attr('sensor.fireangel_data', 'event')=='FIRE EMERGENCY' %}
on
{% else %}
{{this.state}}
{% endif %}
{% else %}
{{this.state}}
{% endif %}
- name: "FireAngel Heat Alarm Kitchen Heat Test"
unique_id: fireangel_kitchen_heat_test
device_class: problem
icon: mdi:thermometer
availability: "{{ is_state('binary_sensor.fireangel_heat_alarm_kitchen_connectivity', 'on')}}"
state: >
{% if state_attr('sensor.fireangel_data', 'device')=='6e481a'.upper() %}
{% if state_attr('sensor.fireangel_data', 'event')=='FIRE TEST' %}
{% if state_attr('sensor.fireangel_data', 'result')=='PASS' %}
off
{% else %}
on
{% endif %}
{% else %}
{{this.state}}
{% endif %}
{% else %}
{{this.state}}
{% endif %}
- name: "FireAngel Heat Alarm Kitchen Battery"
unique_id: fireangel_kitchen_battery
device_class: battery
availability: "{{ is_state('binary_sensor.fireangel_heat_alarm_kitchen_connectivity', 'on')}}"
state: >
{% if state_attr('sensor.fireangel_data', 'device')=='6e481a'.upper() and states.sensor.fireangel_data.attributes.battery is defined %}
{% if state_attr('sensor.fireangel_data', 'battery')=='LOW' %}
on
{% else %}
off
{% endif %}
{% else %}
{{this.state}}
{% endif %}
- name: "FireAngel Heat Alarm Kitchen On Base"
unique_id: fireangel_kitchen_onbase
device_class: presence
availability: "{{ is_state('binary_sensor.fireangel_heat_alarm_kitchen_connectivity', 'on')}}"
state: >
{% if state_attr('sensor.fireangel_data', 'device')=='6e481a'.upper() and states.sensor.fireangel_data.attributes.base is defined %}
{% if state_attr('sensor.fireangel_data', 'base')=='OFF' %}
off
{% else %}
on
{% endif %}
{% else %}
{{this.state}}
{% endif %}
Sorry to resurrect an old thread, but thanks to a faulty heat alarm I now have a radio.
I would like to know if there have been any breaking change to this project.
I would obviously incorporate all the yaml improvements such as that from James above.
I assume the hardware should still be ok. Thanks Geoff
Yup mine still works fine!
Thanks for the update. No more excuses. I need to did out my 50 year old soldering iron.
No excuses for me either! I originally created this topic about 5 years ago, but have never gone onto build this, following the great work of @chopwood. But I have recently acquired all the parts. So absolutley no excuses now!
Any chance time might have graced us with other new out of the box alternative products to having to open heart surgery our own?
What hardware is needed to go with a wireless unit from one of my spare alarms?
Do you think the announcement of an RF Proxy is going to improve things in this field?
I’ve just installed 4 Fireangel devices to replace my much loved Nest protect here in the UK. Stumbled across this thread as I’ve been testing the gateway and mostly been disappointed! Turned off mains to 2 of the alarms and no alerts! put it back on and disconnected one and did get an email almost straight away, but the other gave no alarms! Fireangle suggested I replace it under warranty which I did and the same issue, so have to suspect the gateway!
Does anyone have any pre-made setups I can buy? I’m hopeless with a soldering iron!
Hi James, just wondering if you would have the time to help me out
I have built the board, programmed the Nano successfully and “unlearned” the Wi2 module. When I plug the Nano into my HA server, I cannot get any button press to cause the Wi2 module to blink then stay lit for 5 seconds. I tried the Wi2module out of my CO alarm and although I could unlearn that module, when I plugged it into my PCB, I could not get it to give me the 5 second LED lit up. However, when I plugged it back into the CO alarm, it performed as expected.
I therefore have to suspect that the issue is with my PCB setup. I bought a new W2-SVP-603L and I have tried the red PCB from the base unit as well as the blue PCB (with battery) from the strobe unit. Same result with both. I bought some different level converters (sparkfun) and replaced the others I had used as some people stated they were an issue. This made no difference.
Any help would be really appreciated. In HA the sensor shows as…
…Radio not ready - Trying to reset
Here is my setup. I had to take a photo to remind myself! It’s been a while. I had the same problem. From what I can remember, it was down to the level converters (first batch I bought didn’t work) and the soldering. You can’t see from the photo but the soldering on the back of the board isn’t that great in places. I had to redo it a few times before I got it perfect. So I would guess that either of those two problems is the most likely culprit. Good luck!
Hi, I have all the parts. Soldering is a virtually new thing for me. Not done it since School! And i’m ancient now. Should I try it on a breadboard first? Thing is there is no schematic. Should one use the pcb diagram as a schematic. Or am I missing something?
Or will it be easier just to go for it straight on the pcb!?
Thank you ![]()
Ignore me. I think I need to just look at the EasyEDA diagram of course. I’ll give that a go… Thanks!
I think in general it is a good idea to try it on a bread board first, because then you know that all of your components will work together as expected. If you go for solder first time round you might get lucky, but if you aren’t then you end up having to unsolder everything which is a right PITA.
Thanks James.
I shall give it a go on the breadboard first. Trying to avoid a pita mainly! ![]()
Will, how did it go in the end? I soldered it all up first and its not working. Luckily I have multiples of everything so I will try again from the breadboard up to see if I can get success that way. I haven’t soldered for about 45 years so I did check all adjacent pins for shorts and verified that all the PCB connections were good between the pins that should be connected but still no luck.
Hi Moray. That’s bad luck. I’m sure it’s something simple… I think the breadboard is the way forward and will give you some flexibility during testing.
I seem to be in the same situation apart from not getting as far as you yet. Last time soldering was in GCSE Design & Technology many, many years ago!
I started to set it up at the weekend and found that I need a couple more breadboards so I can do it side by side and copy the layout exactly. The less to think about means less chances of error. Only issue is that I need to wait a couple of weeks for the Velleman breadboards to come back into stock at CPC! So onwards at that stage and I will post some updates here with some helpful photos (assuming I actually get it to work). Would be good to see how you get on too. ![]()
Not to derail this thread about the Wi-Safe2 alarms but I see that Fireangel have a new connected set of alarms coming soon, “Fireangel One”, this time using BLE. Anyone else seen these? Explore Our Fire & CO Safety Products | FireAngel
Pre-order and showing a release date of 20th.
Pricing info for if it changes:
I wonder if they’ll integrate with Home Assistant easily enough?
After having the Connected Pro alarms for a good while, I never got around to getting a board and integrating them
Will, Finally got it working. I had 1 of my 4 converters working and when I used that and the jumper across the two pins of the other converter slot it worked. I’m pretty pissed that 3 out of the 4 were inoperable but for the price, I’m not going to bitch too much. All works now, in a case and mounted next to my Pi5 without issue. Now I just have to find out how I can stop the dashboard showing all alarms as disconnected when I reboot the server. Its a pan, and noisy, having to run a test on all the alarms each time this happens.