Block: Text Template
Type: text_template
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
- Keep it readable: Use line breaks and spacing for multi-line messages
- Test with sample data: Try your template with different values
- Use meaningful variable names: 'kitchen_temp' is better than 'temp1'
- 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)
Get Variable
Retrieve the value stored in a variable that was previously set using a Set Variable block.
Multiline Text
Create formatted text content with multiple lines, paragraphs, and line breaks.
Text
Enter any text content for use in your Actions - words, phrases, device commands, or messages.
Text Template
Create dynamic, personalized messages by combining static text with live data from your IoT system.
Join Text
Join two pieces of text into one combined string.
Text Compare
Compare two text values using different comparison operations.

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

Air Quality
Fetch current or forecast air quality conditions at the specified location using Open-Meteo Air Quality API.
Round/Floor/Ceiling
Convert decimal numbers to whole numbers using different rounding strategies.
Number
Enter any numerical value for use in your IoT Actions - whole numbers, decimals, positive, or negative.

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

Constrain
Keep any number within specified minimum and maximum boundaries.
Compare Numbers
Build mathematical conditions by comparing any two numerical values in your Action logic.
Arithmetic
Perform mathematical calculations using sensor data, feed values, or any numbers in your Actions.

Logic Operation
Combine multiple conditions to create sophisticated decision logic in your Actions.
Negate
Flip any condition to its opposite - turns true into false and false into true.
Boolean
A simple true or false value for building logic conditions and controlling digital outputs.
Get Feed Value
Resolves to the last value of this feed or component, always a String.

JSONPath Query
Extract specific values from JSON data using JSONPath query syntax.