Summary
Escea LFS80 family network-enabled fireplace controlled over UDP on the local LAN. Remote sends 15-byte command packets to UDP port 3300; fireplace replies with 15-byte response packets. Covers power, fan boost, flame effect, temperature set, and status query. Protocol spec authored by Kamahi Electronics Ltd (v0.3, 11 March 2014).
Transport
protocols:
- udp
addressing:
port: 3300
broadcast_address: "192.168.0.255" # example subnet broadcast used for SEARCH_FOR_FIRES discovery
auth:
# UNRESOLVED: source describes an optional PIN check - remote "may wish to compare"
# the fireplace PIN (returned in I_AM_A_FIRE) against a user-provided PIN and deny
# further comms if mismatch. Procedure is optional, not a hard login. No credentials
# or token format mandated.
type: none # inferred: no mandatory auth/login procedure in source (PIN check optional)
Packet Structure
# All commands and responses are 15 bytes:
# byte 1: StartByte 0x47 ('G')
# byte 2: Command/Response ID
# byte 3: DataSize
# bytes 4-13: Data (10 bytes; unused bytes ignored)
# byte 14: CRC = sum of bytes 2..13 modulo 256 (overflow at 256)
# byte 15: EndByte 0x46 ('F')
frame_length: 15
start_byte: "0x47"
end_byte: "0x46"
crc:
algorithm: sum_mod_256
covers_bytes: "2..13"
Traits
traits:
- powerable # inferred: POWER_ON / POWER_OFF commands present
- queryable # inferred: STATUS_PLEASE returns device status
- levelable # inferred: NEW_SET_TEMP sets target temperature
Actions
# All payloads are 15-byte hex packets, verbatim per source packet structure.
# Zero-data commands: DataSize=0x00, CRC = ID byte (single-byte sum).
- id: status_please
label: Status Request
kind: query
command: "47 31 00 00 00 00 00 00 00 00 00 00 00 31 46" # STATUS_PLEASE 0x31
params: []
- id: power_on
label: Power On
kind: action
command: "47 39 00 00 00 00 00 00 00 00 00 00 00 39 46" # POWER_ON 0x39
params: []
- id: power_off
label: Power Off
kind: action
command: "47 3A 00 00 00 00 00 00 00 00 00 00 00 3A 46" # POWER_OFF 0x3A
params: []
- id: search_for_fires
label: Search For Fires (Discovery Broadcast)
kind: action
command: "47 50 00 00 00 00 00 00 00 00 00 00 00 50 46" # SEARCH_FOR_FIRES 0x50
params: []
- id: fan_boost_on
label: Fan Boost On
kind: action
command: "47 37 00 00 00 00 00 00 00 00 00 00 00 37 46" # FAN_BOOST_ON 0x37
params: []
- id: fan_boost_off
label: Fan Boost Off
kind: action
command: "47 38 00 00 00 00 00 00 00 00 00 00 00 38 46" # FAN_BOOST_OFF 0x38
params: []
- id: flame_effect_on
label: Flame Effect Only On
kind: action
command: "47 56 00 00 00 00 00 00 00 00 00 00 00 56 46" # FLAME_EFFECT_ON 0x56
params: []
- id: flame_effect_off
label: Flame Effect Only Off
kind: action
command: "47 55 00 00 00 00 00 00 00 00 00 00 00 55 46" # FLAME_EFFECT_OFF 0x55
params: []
- id: new_set_temp
label: Set Target Temperature
kind: action
command: "47 57 01 {temp_c} 00 00 00 00 00 00 00 00 00 {crc} 46" # NEW_SET_TEMP 0x57, DataSize=1
params:
- name: temp_c
type: integer
description: "Desired room temperature in °C. Source constraint: 3 < °C < 31 (i.e. 4..30)."
- name: crc
type: integer
description: "CRC byte = (0x57 + temp_c) mod 256, over bytes 2..13."
Feedbacks
# Response packets from fireplace. Status byte 2 = response ID.
# CRC in each response = sum of bytes 2..13 mod 256 (compute on receive to verify).
- id: status_response
label: STATUS Response
response_id: "0x80"
data_size: 6
fields:
- index: 0
name: has_new_timers
type: boolean
- index: 1
name: fire_on
type: boolean
- index: 2
name: fan_boost_on
type: boolean
- index: 3
name: flame_effect_on
type: boolean
- index: 4
name: desired_temperature_c
type: integer
unit: °C
- index: 5
name: room_temperature_c
type: integer
unit: °C
example: "47 80 06 00 01 00 00 1B 18 00 00 00 00 BA 46" # from source: fire on, desired 27°C, room 24°C
- id: power_on_ack
label: Power On Acknowledgement
response_id: "0x8D"
data_size: 0
- id: power_off_ack
label: Power Off Acknowledgement
response_id: "0x8F"
data_size: 0
- id: fan_boost_on_ack
label: Fan Boost On Acknowledgement
response_id: "0x89"
data_size: 0
- id: fan_boost_off_ack
label: Fan Boost Off Acknowledgement
response_id: "0x8B"
data_size: 0
- id: flame_effect_on_ack
label: Flame Effect On Acknowledgement
response_id: "0x61"
data_size: 0
- id: flame_effect_off_ack
label: Flame Effect Off Acknowledgement
response_id: "0x60"
data_size: 0
- id: new_set_temp_ack
label: New Set Temp Acknowledgement
response_id: "0x66"
data_size: 0
- id: i_am_a_fire
label: I Am A Fire (Discovery Response)
response_id: "0x90"
data_size: 6
fields:
- index: "0..3"
name: serial_number
type: unsigned_long
endian: big
- index: "4..5"
name: pin
type: unsigned_short
endian: big
Variables
- id: target_temperature
label: Target Room Temperature
type: integer
unit: °C
range: "4..30" # source: 3 < °C < 31
set_via: new_set_temp
read_via: status_response.desired_temperature_c
- id: room_temperature
label: Current Room Temperature
type: integer
unit: °C
read_only: true
read_via: status_response.room_temperature_c
Events
# UNRESOLVED: source documents no unsolicited notifications. All fireplace responses
# are replies to remote commands.
Macros
# UNRESOLVED: no multi-step sequences described in source.
Safety
confirmation_required_for: []
interlocks: []
# UNRESOLVED: this refined excerpt contains no safety warnings, interlock procedures,
# or power-on sequencing requirements. Device is a heat-producing appliance; confirm
# full manual for thermal/runtime limits before implementing autonomous control.
Notes
- Source document is the generic "Fireplace LAN Communications Protocol Specification" (Kamahi Electronics Ltd, v0.3, 11 March 2014) for "network enabled Escea gas fireplace". It predates and does not name the LFS800 Holographic Electric Fireplace model; command set assumed shared but unverified against the actual LFS800.
- Input context listed "Known protocol: RS-232C" but the supplied source text describes UDP/IP on port 3300 only. This spec reflects the source (UDP). If the LFS800 also exposes RS-232C, a separate source document is required.
- Discovery: broadcast SEARCH_FOR_FIRES to subnet broadcast (e.g. 192.168.0.255:3300); fireplaces reply with I_AM_A_FIRE containing Serial Number (big-endian u32) and PIN (big-endian u16). Typical response time < 3 seconds.
- Optional soft auth: remote may compare returned PIN against a user-supplied PIN and ignore non-matching fireplaces. Not enforced by the fireplace.
- CRC: single-byte additive checksum over bytes 2..13, mod 256. For zero-data commands this equals the command ID byte.
- Example exchange from source: STATUS_PLEASE →
47 31 00 00 00 00 00 00 00 00 00 00 00 31 46; reply47 80 06 00 01 00 00 1B 18 00 00 00 00 BA 46(fire on, no fan boost, no flame effect, desired 27°C, room 24°C).
Provenance
source_domains:
- github.com
source_urls:
- https://github.com/snikch/escea/files/644165/630260_3.Escea.Fireplace.LAN.Comms.Spec.pdf
retrieved_at: 2026-07-04T18:30:39.610Z
last_checked_at: 2026-07-07T11:36:51.644Z
Verification Summary
verdict: verified
checked_at: 2026-07-07T11:36:51.644Z
matched_actions: 9
action_count: 9
confidence: medium
summary: "All nine spec action opcodes (0x31-0x57) match verbatim to Table 1 source commands; transport (UDP port 3300) verified; no missing or extra source commands. (9 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "input context declared \"Known protocol: RS-232C\" but the supplied source document (\"Fireplace LAN Communications Protocol Specification\") describes UDP/IP on port 3300 only — no RS-232C content present in source. Spec populated from source (UDP). Confirm which interface applies to LFS800."
- "protocol spec version 0.3 dated 2014; LFS800 (Holographic, a newer product line) not named in source — exact model coverage unverified."
- "source describes an optional PIN check - remote \"may wish to compare\""
- "source documents no unsolicited notifications. All fireplace responses"
- "no multi-step sequences described in source."
- "this refined excerpt contains no safety warnings, interlock procedures,"
- "LFS800 model-specific behaviour, flame holographic controls, dimmer/colour commands not present in source."
- "firmware/hardware revision compatibility not stated."
- "whether electric LFS800 supports gas-only commands (FAN_BOOST, FLAME_EFFECT) unchanged."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0