Decode hex string to bytes: from_hex
The from_hex filter converts a hexadecimal string into a bytes object. Each pair of hex characters in the input string is converted to a single byte. For example, “48656c6c6f” decodes to the bytes representing “Hello”.
This is useful when working with IoT devicesA device is a model representing a physical or logical unit that contains entities. and protocols that represent binary data as hex strings. Many BLE (Bluetooth Low Energy) sensorsSensors return information about a thing, for instance the level of water in a tank. [Learn more], Zigbee devices, and serial protocols report their data as hexadecimal strings. The from_hex filter converts these hex strings into bytes that you can then process further with unpack to extract numeric values, or decode to a text string.
Usage
Here’s how to use this template function. Copy any example and adjust it to your setup.
{{ "48656c6c6f" | from_hex }}
b'Hello'
Function signature
The signature is a technical summary of this template function. It shows the name of the function, the values (called parameters) it accepts, and what type of data each parameter expects (for example, a piece of text or a number).
Function parameters that have a = with a value after them are optional. If you leave them out, the default value shown is used automatically. Function parameters without a default are required.
value | from_hex() -> bytes
Function parameters
The following parameters can be provided to this filter.
Good to know
- The input must have an even number of hex characters. Odd-length strings raise an error.
- The result is raw bytes. Pipe to
stringfor text, orunpackfor numeric values. - A
0xprefix on the input raises an error; strip it first.
Try it yourself
Ready to test this? Open Developer tools > Template, paste the example into the Template editor, and watch the result update on the right. Edit the values to see how the function adapts to your own entitiesAn entity represents a sensor, actor, or function in Home Assistant. Entities are used to monitor physical properties or to control other entities. An entity is usually part of a device or a service. [Learn more].
More examples
Real scenarios where this function comes up in automations and templates. Copy any example and adapt it to your setup.
Decode a hex sensor value to an integer
Convert a hex string from a sensor into an integer using unpack.
{{ "04d2" | from_hex | unpack(">H") }}
1234
Decode hex to a text string
Convert a hex-encoded string to readable text by decoding the resulting bytes.
{{ "486f6d65" | from_hex | string }}
Home
Process BLE advertisement data
Extract a temperature value from a BLE sensor that reports data as a hex string. The first two bytes (4 hex characters) contain the temperature as a big-endian signed short.
{% set hex_data = states("sensor.ble_advertisement") %}
{{ hex_data[:4] | from_hex | unpack(">h") / 100 }}
21.5
Still stuck?
The Home Assistant community is quick to help: join Discord for real-time chat, post on the community forum with your template and expected result, or share on our subreddit /r/homeassistant.
AI assistants like ChatGPT or Claude can also explain or fix templates when you describe what you want in plain language.
Related template functions
These functions work well alongside this one:
-
Pack value to bytes: pack - Packs a value into bytes using a Python struct format string.
-
Unpack bytes to value: unpack - Unpacks bytes into a value using a Python struct format string.
-
Decode from base64: base64_decode - Decodes a base64-encoded string.