Skip to content

Block: Text Template

Type: text_template

the Text Template block

Create dynamic, personalized messages by combining static text with live data from your IoT system. Perfect for intelligent notifications like "Hello {{ user.name }}, your temperature sensor read {{ feeds['sensors.temperature'].value }}°F" or automated reports that include current sensor values, user information, and real-time data. Uses the powerful Liquid templating language for advanced formatting and logic.

What is a Text Template?

Think of a text template like a form letter where you leave blanks to fill in with specific information. Instead of writing "Dear _____", you write "Dear {{ user.name }}" and the system automatically fills in the actual name when the message is sent.

How It Works

This block renders (processes) a text template, replacing special placeholders with actual values. Anything surrounded by {{ double curly braces }} gets replaced with real data when your action runs.

For example:

  • Template: "Hello {{ user.name }}!"
  • Becomes: "Hello John!"

These templates use the Liquid templating language from Shopify, which includes many helpful built-in functions. Learn more: Liquid Documentation

Template Variables Reference

User Information

  • {{ user.name }} - Your full name (e.g., "John Smith")
  • {{ user.username }} - Your username (e.g., "jsmith123")

Custom Variables

  • {{ variables.var_name }} - Get value of variable named 'var_name'
  • {{ vars.var_name }} - Shorthand version (same as above)
  • {{ variables['var name'] }} - Use brackets for names with spaces
  • {{ vars['my special var'] }} - Shorthand with spaces

Feed Data (Sensors & Devices)

  • {{ feeds['group_key.feed_key'].value }} - Current value from a feed
  • {{ feeds['group_key.feed_key'].name }} - Feed's display name
  • {{ feeds['group_key.feed_key'].key }} - Feed's unique key
  • {{ feeds['group_key.feed_key'].updated_at }} - Last update timestamp

Real-World IoT Examples

🌡️ Temperature Alerts

Basic Alert:"Temperature Alert: {{ feeds['sensors.temp'].value }}°F detected!" Output: "Temperature Alert: 85°F detected!"

Detailed Alert with Location:"⚠️ HIGH TEMP WARNING Location: {{ feeds['sensors.temp'].name }} Current: {{ feeds['sensors.temp'].value }}°F Time: {{ feeds['sensors.temp'].updated_at }} Please check your {{ vars.device_location }} immediately!"

📊 Daily Status Reports

Simple Report:"Daily Report for {{ user.name }}: • Temperature: {{ feeds['home.temp'].value }}°F • Humidity: {{ feeds['home.humidity'].value }}% • Battery: {{ vars.battery_level }}%"

Comprehensive Home Report: `"Good morning {{ user.name }}! Here's your home status:

🌡️ Climate Control:

  • Living Room: {{ feeds['climate.living_temp'].value }}°F
  • Bedroom: {{ feeds['climate.bedroom_temp'].value }}°F
  • Humidity: {{ feeds['climate.humidity'].value }}%

🔋 Device Status:

  • Door Sensor Battery: {{ feeds['security.door_battery'].value }}%
  • Motion Detector: {{ vars.motion_status }}
  • Last Activity: {{ feeds['security.last_motion'].updated_at }}

Have a great day!"`

🚪 Security Notifications

Door Alert:"🚪 {{ feeds['security.front_door'].name }} is {{ feeds['security.front_door'].value }} Time: {{ feeds['security.front_door'].updated_at }} User: {{ user.name }}"

🌱 Garden Monitoring

Watering Reminder:"Hey {{ user.name }}, your {{ vars.plant_name }} needs attention! Soil Moisture: {{ feeds['garden.moisture'].value }}% Last Watered: {{ vars.last_water_date }} Recommendation: Water {{ vars.water_amount }}ml"

🔔 Smart Doorbell Messages

Visitor Notification:"{{ user.name }}, someone is at your door! Camera: {{ feeds['doorbell.camera'].name }} Motion Level: {{ feeds['doorbell.motion'].value }} Time: {{ feeds['doorbell.motion'].updated_at }}"

Advanced Liquid Features

Conditional Logic

Use if/else statements for smart messages: "{% if feeds['sensors.temp'].value > 80 %} 🔥 It's hot! {{ feeds['sensors.temp'].value }}°F {% else %} ❄️ Nice and cool: {{ feeds['sensors.temp'].value }}°F {% endif %}"

Formatting Numbers

Round numbers or add decimal places: "Temperature: {{ feeds['sensors.temp'].value | round: 1 }}°F" "Battery: {{ vars.battery | round }}%"

Date Formatting

Format timestamps for readability: "Last updated: {{ feeds['sensor.temp'].updated_at | date: '%B %d at %I:%M %p' }}" Output: "Last updated: January 15 at 03:45 PM"

Math Operations

Perform calculations in templates: "Temperature in Celsius: {{ feeds['sensors.temp'].value | minus: 32 | times: 5 | divided_by: 9 | round: 1 }}°C"

Common Patterns & Tips

1. Fallback Values

Provide defaults when data might be missing: "Temperature: {{ feeds['sensors.temp'].value | default: 'No reading' }}"

2. Multiple Feed Access

Combine data from multiple sources: "Indoor: {{ feeds['home.inside_temp'].value }}°F Outdoor: {{ feeds['home.outside_temp'].value }}°F Difference: {{ feeds['home.inside_temp'].value | minus: feeds['home.outside_temp'].value }}°F"

3. Status Indicators

Use emoji based on values (keep in mind emoji will not work with displays): "Battery: {{ vars.battery_level }}% {% if vars.battery_level < 20 %}🔴{% elsif vars.battery_level < 50 %}🟡{% else %}🟢{% endif %}"

4. Time-Based Greetings

"{% assign hour = 'now' | date: '%H' | plus: 0 %} {% if hour < 12 %}Good morning{% elsif hour < 17 %}Good afternoon{% else %}Good evening{% endif %}, {{ user.name }}!"

Troubleshooting Common Issues

Problem: Variable shows as blank

Solution: Check that:

  • Variable name is spelled correctly (case-sensitive!)
  • Feed key matches exactly (including group.feed format)
  • Variable has been set before this template runs

Problem: Template shows raw {{ }} text

Solution: Make sure:

  • You're using double curly braces {{ }}
  • No extra spaces inside braces
  • Feed keys use square brackets and quotes: feeds['key']

Problem: Timestamp looks weird

Solution: Format dates using Liquid filters: {{ feeds['sensor'].updated_at | date: '%Y-%m-%d %H:%M' }}

Best Practices

  1. Keep it readable: Use line breaks and spacing for multi-line messages
  2. Test with sample data: Try your template with different values
  3. Use meaningful variable names: 'kitchen_temp' is better than 'temp1'
  4. Add context: Include units (°F, %, etc.) and location names

Inputs

Template

Create your template text with static content and dynamic {{ variable }} placeholders.

Examples:

  • 'Alert: {{ feeds['temp.kitchen'].value }}°F detected'
  • 'Daily Report for {{ user.name }}: Battery at {{ vars.battery_level }}%'

Use {{ }} to insert live data into your message.

Compatible Blocks (click to expand)
the Get Variable block

Get Variable

Retrieve the value stored in a variable that was previously set using a Set Variable block.

the Multiline Text block

Multiline Text

Create formatted text content with multiple lines, paragraphs, and line breaks.

the Text block

Text

Enter any text content for use in your Actions - words, phrases, device commands, or messages.

the Text Template block

Text Template

Create dynamic, personalized messages by combining static text with live data from your IoT system.

the Join Text block

Join Text

Join two pieces of text into one combined string.

the Text Compare block

Text Compare

Compare two text values using different comparison operations.

the Weather block

Weather

Fetch the current or forecast weather conditions at the specified location.

the Air Quality block

Air Quality

Fetch current or forecast air quality conditions at the specified location using Open-Meteo Air Quality API.

the Round/Floor/Ceiling block

Round/Floor/Ceiling

Convert decimal numbers to whole numbers using different rounding strategies.

the Number block

Number

Enter any numerical value for use in your IoT Actions - whole numbers, decimals, positive, or negative.

the Map block

Map

Transform sensor readings and data values by scaling them from one number range to another.

the Constrain block

Constrain

Keep any number within specified minimum and maximum boundaries.

the Compare Numbers block

Compare Numbers

Build mathematical conditions by comparing any two numerical values in your Action logic.

the Arithmetic block

Arithmetic

Perform mathematical calculations using sensor data, feed values, or any numbers in your Actions.

the Logic Operation block

Logic Operation

Combine multiple conditions to create sophisticated decision logic in your Actions.

the Negate block

Negate

Flip any condition to its opposite - turns true into false and false into true.

the Boolean block

Boolean

A simple true or false value for building logic conditions and controlling digital outputs.

the Get Feed Value block

Get Feed Value

Resolves to the last value of this feed or component, always a String.

the JSONPath Query block

JSONPath Query

Extract specific values from JSON data using JSONPath query syntax.