Introduction
channelBar is a macOS application that lives in the menu bar and allows you to receive, display, and organize messages from various sources. The app serves as a central hub for notifications and status messages from your tools, automations, and smart home systems.
What makes channelBar special:
- Multiple channels: Organize messages into thematic categories
- Flexible inputs: Receive messages via URLs, webhooks, MQTT, files, and more
- Customizable outputs: Menu bar, system notifications, audio, or command-line application
- Powerful templates: Format messages exactly the way you want
Basic Concepts
Channels
A channel is a container for related messages. Think of channels as thematic folders:
work– Messages from build systems, CI/CD pipelineshome– Smart home notificationsweather– Weather alerts and updatesserver– Monitoring alerts
Each channel has:
- A unique identifier (name)
- A position in the menu bar (order)
- Its own providers (inputs)
- Its own outputs (menu bar, notifications, audio)
- Its own templates for message formatting
- Retention rules (how many/how long messages are stored)
Messages
A message is the actual content that arrives in a channel via a provider. Each message contains:
| Field | Description |
|---|---|
text | The message content |
provider | Where the message came from (Webhook, MQTT, etc.) |
source | Optional label (e.g., "Jenkins", "GitHub Actions") |
createdAt | Timestamp |
link | Optional URL (opened in browser) |
open | Optional command/path to execute |
openArgs | Optional arguments for the command |
messageContext | Optional context data (for templates) |
Providers (Inputs)
Providers are the ways messages reach channelBar. There are eight different provider types:
| Provider | Description |
|---|---|
| URL Scheme | channelbar:// URLs from other apps |
| Webhook | HTTP endpoint for remote systems |
| MQTT | Pub/Sub protocol for IoT and automation |
| File Watcher | Monitor local files |
| Apple Shortcuts | Apple Shortcuts integration |
| Home Assistant | Smart home integration |
| Command-Line Application | Local command-line application |
| Cloud | channelBar Cloud Service |
Each channel can have multiple providers active at the same time.
Outputs
Outputs define how and where messages are displayed. Each channel has four independently configurable outputs:
| Output | Description |
|---|---|
| Menu Bar | Display in the macOS menu bar |
| Notifications | macOS system notifications |
| Audio | Sound output for new messages |
| Command-Line Application | Output to the command-line application |
Templates
Templates determine how messages are formatted and displayed. With variables like {message}, {date}, or {source}, you can customize the appearance individually.
The User Interface
Menu Bar
channelBar displays an element in the macOS menu bar for each active channel. Clicking opens the channel menu with:
- The current message (formatted according to template)
- The message history as a submenu
- Optional actions like "New Message..." or "Clear History..."
Menu Bar Icon: When enabled, a permanent channelBar icon also appears, giving you quick access to settings.
Settings Window
You can access the settings window via:
- Click on the channelBar icon → "Settings..."
- Right-click on any channel element → "Settings..."
The window has four tabs:
- General – Global app settings
- Channels – Channel and provider management
- Connections – Server connections (MQTT, Home Assistant, Cloud)
- Servers – Local servers (gRPC, Webhook)
General Settings
In the General tab you'll find:
Language
Choose the app's display language. Available options:
- System (automatic based on macOS setting)
- Deutsch
- English
- Español
- Français
The language change takes effect immediately, without restart.
Launch at Login
Enable this option so channelBar starts automatically when you log into macOS.
Always Show Menu Bar Icon
When enabled, channelBar always shows an icon in the menu bar – even when no channels are active. Useful for quick access to settings.
App Version
Shows the current version and build number of channelBar.
Command-Line Application
Shows the status of the connected command-line application, including version information and compatibility.
Configuration
Here you'll find the functions for exporting and importing your channelBar configuration. More on this in the chapter Exporting and Importing Configuration.
Managing Channels
Creating a Channel
- Open Settings → Channels tab
- Click on + (Plus) below the channel list
- Enter an identifier (e.g., "work", "home")
- Configure the desired settings
- Click Save
A new channel is enabled by default and displayed in the menu bar.
Editing a Channel
Select a channel in the list to edit its settings. The settings are divided into several areas:
Basic Settings
| Setting | Description |
|---|---|
| Identifier | The channel name (displayed in the menu bar) |
| Enabled | On/Off toggle for the channel |
| Display Limit | How many messages are shown in the menu (1-1000) |
| Channel Context | Optional metadata for templates |
Changing Position
Change the order of channels in the menu bar via drag & drop in the channel list.
Deleting a Channel
- Select the channel in the list
- Click on − (Minus) below the channel list
- Confirm the deletion
Warning
When deleting a channel, all associated messages are also permanently deleted.
Configuring Retention
Retention settings determine how long and how many messages are stored:
| Setting | Description | Options |
|---|---|---|
| Retention (Count) | Maximum number of stored messages | 100, 500, 1000, 2500, 5000, Unlimited |
| Retention (Days) | Delete messages older than X days | 1, 3, 5, 7, 14, 30, 120, 240, 365, Unlimited |
| Display Limit | Messages shown in menu | 1, 2, 3, 5, 10, 25, 50, 100, 250, 500, 1000 |
Cleanup happens automatically in the background. Both retention rules (count and days) are applied independently.
Providers in Detail
Providers are the inputs through which messages reach channelBar. Each channel can use multiple providers simultaneously.
URL Scheme
The URL scheme enables sending messages via URLs. This is ideal for:
- Automations with Automator or AppleScript
- Links in documents
- Other apps that can open URLs
Sending a Message
Format:
channelbar://set?channel=CHANNEL&text=MESSAGE
Parameters:
| Parameter | Required | Description |
|---|---|---|
channel | Yes | Target channel (identifier) |
text | Yes | Message text (alternatively: message) |
source | No | Source label |
link | No | URL (opened on click) |
open | No | Command/app to open |
args | No | Arguments for the open command |
message_context | No | Context data for the message |
channel_context | No | Channel context |
Note
Both text and message are accepted. text takes priority.
Examples:
Simple message:
channelbar://set?channel=work&text=Build%20successful
With source and link:
channelbar://set?channel=work&text=PR%20merged&source=GitHub&link=https://github.com/...
With open action:
channelbar://set?channel=logs&text=Error%20occurred&open=/Applications/Console.app&args=--search%20error
Setting Channel Context
Sets the context of a channel (without sending a message):
channelbar://context-set?channel=CHANNEL&context=VALUE
Removing Channel Context
Removes the context of a channel:
channelbar://context-remove?channel=CHANNEL
AppleScript Example
open location "channelbar://set?channel=test&text=Hello%20World"
Activation: The URL scheme provider is active by default and requires no additional configuration.
Webhook
The webhook provider provides an HTTP endpoint through which external systems can send messages.
Endpoint:
http://localhost:8080/message/{channel}
The channel name is specified as part of the path (URL-encoded if necessary).
HTTP Method: POST
Request Body (JSON):
{
"text": "Deployment completed",
"source": "CI/CD",
"link": "https://ci.example.com/build/123",
"open": "/Applications/Terminal.app",
"message_context": "build_id=123",
"channel_context": "env=production"
}
Only text is required. The channel is determined via the URL path.
| Parameter | Required | Description |
|---|---|---|
text | Yes | The message text |
source | No | Source label (e.g., "Jenkins") |
link | No | URL (opened on click) |
open | No | Command/app to open |
message_context | No | Context data for the message |
channel_context | No | Channel context |
Authentication
You can configure an API key per channel. When set, the request must include an X-API-Key header:
X-API-Key: YOUR_API_KEY
Configuration
- Go to Settings → Channels → select channel
- Switch to the Providers section
- Enable Webhook
- Optional: Set an API key
Server Settings (under Settings → Servers):
- Port: Default 8080 (changeable)
- Enable CORS: For browser-based clients
- Rate Limit: Requests per minute (default: 100)
cURL Examples
Simple message:
curl -X POST http://localhost:8080/message/work \
-H "Content-Type: application/json" \
-d '{"text":"Build successful"}'
With API key and all options:
curl -X POST http://localhost:8080/message/work \
-H "Content-Type: application/json" \
-H "X-API-Key: my-api-key" \
-d '{"text":"PR #42 merged","source":"GitHub","link":"https://github.com/..."}'
MQTT
MQTT is a lightweight pub/sub protocol, ideal for IoT devices and home automation.
Configuration per channel:
| Setting | Description |
|---|---|
| Connection | Selection of a configured MQTT connection |
| Topic Pattern | MQTT topic to subscribe |
Topic Patterns with Wildcards
channelBar supports MQTT wildcards:
+– Any single segment:home/+/temperature#– All following segments:sensors/#
Examples:
home/livingroom/temperature– Exact topichome/+/temperature– All rooms: home/kitchen/temperature, home/bathroom/temperaturealerts/#– All alert topics
Setting up connection:
MQTT connections are managed centrally under Settings → Connections. See MQTT Connections.
Message format:
The message text is taken directly from the MQTT payload. For JSON payloads, you can use templates to extract specific fields.
File Watcher
The file watcher provider monitors local files and creates messages when changes occur.
Configuration:
| Setting | Description |
|---|---|
| Watched Paths | List of files to monitor |
| Delete After Reading | Clear file content after processing |
Adding Paths
- Click + next to "Watched Paths"
- Select a file in the Finder dialog
- channelBar automatically receives the necessary access permissions (sandbox bookmark)
How It Works
- The file is read line by line
- Each non-empty line becomes a separate message
- Only new content is processed (since last change)
- With "Delete After Reading" enabled, the file is cleared after reading
- File doesn't need to exist – channelBar waits for its creation
Message Format
Since the provider is assigned to a channel, each line is used directly as a message:
Backup completed at 14:30
Server status: OK
New email received
Each of these lines becomes a separate message in the configured channel.
Example Workflow
# Script writes lines to watched file
echo "Backup completed: $(date)" >> ~/channelbar-inbox.txt
echo "Next backup: tomorrow 03:00" >> ~/channelbar-inbox.txt
Note
Use >> (append) instead of > (overwrite) to collect multiple messages before they are processed.
Apple Shortcuts
The Shortcuts integration enables sending messages via Apple Shortcuts (Shortcuts.app).
Available Action: "Send to channelBar"
Parameters:
| Parameter | Description |
|---|---|
| Message | The text to send |
| Channel | Target channel |
| Link | Optional URL |
| Open Path | Optional command/app |
| Open Arguments | Arguments for the command |
| Source | Source label |
| Message Context | Context data |
| Channel Context | Channel context |
Creating a Shortcut
- Open Shortcuts (Shortcuts.app)
- Create a new shortcut
- Search for "channelBar" in actions
- Add "Send to channelBar"
- Configure the parameters
Activation
- Go to Settings → Channels → select channel
- Switch to the Providers section
- Enable Apple Shortcuts
Home Assistant
The Home Assistant integration enables displaying entity states from your smart home.
Configuration per channel:
| Setting | Description |
|---|---|
| Connection | Selection of a configured HA connection |
| Entity ID | The entity to monitor (e.g., sensor.temperature) |
| Show Unit | Display measurement unit (°C, %, etc.) |
Finding Entity ID
- Open Home Assistant
- Go to Settings → Devices & Services → Entities
- Find the desired entity
- The Entity ID is shown in the detail view
Example Entity IDs:
sensor.livingroom_temperaturebinary_sensor.front_doorweather.homeswitch.desk_lamp
Setting up connection:
Home Assistant connections are managed under Settings → Connections. See Home Assistant Connections.
Command-Line Application
The provider receives messages from the local channelBar command-line application.
Activation
- Go to Settings → Channels → select channel
- Switch to the Providers section
- Enable Command-Line Application
Communication:
The command-line application communicates via gRPC with the app (default: localhost:51515). Server settings are found under Settings → Servers → gRPC Server.
Note
The command-line application is installed and documented separately.
Cloud
The Cloud provider receives messages from the channelBar Cloud Service.
Concept:
The Cloud Service provides buffers – remote queues that can be filled by external tools. Each buffer can be assigned to a channel.
Configuration
- Make sure the Cloud connection is active (see Cloud Connection)
- Go to Settings → Channels → select channel
- Switch to the Providers section
- Enable Cloud
- Select the buffers from which the channel should receive
Buffer Properties:
- Each buffer has a name and an API key
- External tools send messages to buffers via Cloud API
- The app receives messages in real-time
Note
Cloud setup and buffer management are documented separately.
Outputs in Detail
Each channel has four independently configurable outputs.
Menu Bar Output
The primary output displays messages in the macOS menu bar.
Configuration:
| Setting | Description |
|---|---|
| Show in Menu Bar | Show/hide channel in menu bar |
| Show History Menu | Submenu with message history |
| Show History Circle | Indicator for new messages |
| Show Link Icon | Icon for messages with link |
| Link Icon | Custom icon (e.g., 🔗) |
| Show Open Icon | Icon for messages with open action |
| Open Icon | Custom icon (e.g., 🚀) |
Menu Structure
▶ Current Message
├── 📜 Message History
│ ├── Message 1
│ ├── Message 2
│ └── ...
├── ➕ New Message... (optional)
└── 🗑 Clear History... (optional)
You can configure the history menu display in detail under Customizing Submenu Display.
Notifications
Shows macOS system notifications for new messages.
Configuration:
| Setting | Description |
|---|---|
| Enabled | Turn notifications on/off |
| Template | Message format for notification |
| Custom Icon | Optional custom icon |
Selecting Icon
- Enable "Use Custom Icon"
- Click "Select..."
- Choose an image file (PNG, JPG recommended)
Template examples:
{message}– Message text only{channel}: {message}– With channel name{source}: {message}– With source
Note
Make sure channelBar has permission to send notifications in macOS System Settings under Notifications.
Audio
Plays a sound for new messages.
Configuration:
| Setting | Description |
|---|---|
| Enabled | Turn sound on/off |
| Sound Source | System sound or custom file |
| System Sound | Selection from macOS system sounds |
| Custom File | Path to an audio file |
System Sounds:
macOS offers numerous system sounds like:
- Basso, Blow, Bottle, Frog
- Funk, Glass, Hero, Morse
- Ping, Pop, Purr, Sosumi
- Submarine, Tink
Custom Audio File
- Select "Custom File" as sound source
- Click "Select..."
- Choose an audio file (MP3, WAV, AIFF, etc.)
Preview: Use the Play button to test the selected sound.
Command-Line Application
For querying channel messages via the terminal.
Configuration:
| Setting | Description |
|---|---|
| Enabled | Turn command-line output on/off |
How It Works:
When enabled, the command-line application can query messages in the channel.
Templates for Command-Line Application:
The command-line application output uses its own templates:
- channelbar get – Formatting for current message
- channelbar list – Formatting for history
See Template Contexts for details.
Configuring Templates
Templates determine how messages are formatted. Each channel has its own templates for different contexts.
Template Variables
The following variables are available in templates:
| Variable | Description | Example |
|---|---|---|
{message} | Message text | "Build successful" |
{channel} | Channel name | "work" |
{provider} | Provider type | "webhook" |
{source} | Source label | "Jenkins" |
{message_id} | Unique ID | "abc123..." |
{link} | Message URL | "https://..." |
{open} | Open command | "/Applications/..." |
{relativeTime} | Relative time | "5 minutes ago" |
{date} | Date | "01/26/2026" |
{time} | Time | "14:30:00" |
{message_context} | Message context | "build_id=123" |
{channel_context} | Channel context | "env=prod" |
Formatting Date and Time
Date and time can be displayed with custom formats:
{date#FORMAT}
{time#FORMAT}
Format Characters:
| Character | Meaning | Example |
|---|---|---|
yyyy | Year (4-digit) | 2026 |
yy | Year (2-digit) | 26 |
MMMM | Month (name) | January |
MMM | Month (short) | Jan |
MM | Month (number) | 01 |
dd | Day | 26 |
EEEE | Weekday | Monday |
E | Weekday (short) | Mon |
HH | Hour (24h) | 14 |
hh | Hour (12h) | 02 |
mm | Minute | 30 |
ss | Second | 45 |
a | AM/PM | PM |
Examples:
| Template | Output |
|---|---|
{date#MM/dd/yyyy} | 01/26/2026 |
{date#E, MMMM d, yyyy} | Mon, January 26, 2026 |
{time#HH:mm} | 14:30 |
{time#HH:mm:ss} | 14:30:45 |
{date#yyyy-MM-dd} {time#HH:mm} | 2026-01-26 14:30 |
Template Contexts
Each channel has four different templates, divided into two groups:
App Templates:
| Template | Usage | Default |
|---|---|---|
| Menu Bar | Current message in menu bar | ▶ {message} |
| History Menu | Messages in history submenu | {message} |
Command-Line Templates:
| Template | Usage | Default |
|---|---|---|
| channelbar get | Output of channelbar get command | {message} ({relativeTime}) |
| channelbar list | Output of channelbar list command | [{date#yyyy-MM-dd} / {time#HH:mm:ss}] {message} |
Editing Templates
- Go to Settings → Channels → select channel
- Switch to the Templates section
- Edit the desired templates under "App Templates" or "CLI Templates"
- Changes are saved automatically
Example Templates:
# With source and time
[{source}] {message} ({relativeTime})
# Compact with date
{date#MM/dd} {time#HH:mm} - {message}
# With icon based on provider
{provider}: {message}
# Detailed for logs
[{date#yyyy-MM-dd}T{time#HH:mm:ss}] [{source}] {message}
Customizing Submenu Display
The history menu (submenu) can be configured in detail. These settings determine what information is displayed for each message in the history.
Display Options
| Option | Description |
|---|---|
| Show Relative Time | "5 minutes ago" |
| Show Timestamp | Full date and time |
| Show Source | Message source |
| Show Message Context | Message context data |
| Show Channel Context | Channel context data |
| Show Open | Open command as menu item |
| Show Link | Link as menu item |
Menu Functions
| Option | Description |
|---|---|
| Show "New Message..." | Menu item to create new messages |
| Show "Clear History..." | Menu item to clear history |
| Show "Copy to Clipboard" | Option to copy messages |
| Show "Delete Entry..." | Option to delete individual messages |
Submenu Element Templates
Each submenu element has its own template:
| Element | Default | Example Output |
|---|---|---|
| Relative Time | {relativeTime} | 5 minutes ago |
| Timestamp | {date#E MMM d, YYYY}, {time#HH:mm:ss} | Mon Jan 26, 2026, 14:30:00 |
| Source | 🏷 {source} | 🏷 Jenkins |
| Message Context | 📝 {message_context} | 📝 build_id=123 |
| Channel Context | 📁 {channel_context} | 📁 env=prod |
| Open | 🚀 {open} | 🚀 /Applications/Terminal.app |
| Link | 🔗 {link} | 🔗 https://example.com |
Customizing
- Go to Settings → Channels → select channel
- Switch to the Menu Bar section
- Enable/disable the desired options
- Customize templates as needed
Managing Connections
Under Settings → Connections you manage reusable server connections. These can be shared by multiple channels.
MQTT Connections
MQTT connections define the connection parameters to an MQTT broker.
Creating a New Connection
- Click + next to MQTT Connections
- Enter a name (e.g., "Local Mosquitto")
- Configure the connection parameters
Parameters:
| Setting | Description | Default |
|---|---|---|
| Host:Port | Broker host and port | localhost:1883 |
| Username | Optional for authentication | – |
| Password | Optional for authentication | – |
| Use TLS | Encrypted connection | Off |
| Insecure TLS | Allow self-signed certificates | Off |
Example URLs:
localhost:1883– Local brokermqtt.example.com:8883– Remote with TLS192.168.1.100:1883– IP address
Test Connection:
Click "Test Connection" to check broker reachability.
Security:
The MQTT password is securely stored in Apple Keychain – encrypted and only accessible to channelBar.
Home Assistant Connections
Home Assistant connections enable integration with your smart home hub.
Prerequisites:
- Home Assistant instance reachable on the network
- Long-Lived Access Token
Creating Access Token in Home Assistant
The access token allows channelBar secure access to your Home Assistant instance.
- Open Home Assistant in browser (e.g.,
http://homeassistant.local:8123) - Click on your username at bottom left (your profile)
- Scroll to the Long-Lived Access Tokens section at the bottom
- Click Create Token
- Enter a name, e.g., "channelBar"
- Click OK
- Important: Copy the displayed token immediately – it's only shown once!
The token looks something like:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI...
Security Notes
- Treat the token like a password
- The token grants full access to your Home Assistant instance
- You can revoke the token at any time in Home Assistant
- channelBar stores the token securely in Apple Keychain
Creating New Connection in channelBar
- Go to Settings → Connections
- Click + next to Home Assistant Connections
- Enter a name (e.g., "Home Assistant")
- Configure the connection parameters
Parameters:
| Setting | Description | Default |
|---|---|---|
| Host:Port | HA instance address | homeassistant.local:8123 |
| Access Token | Long-lived token | – |
| Use TLS | HTTPS connection | On |
| Insecure TLS | Self-signed certificates | Off |
Cloud Connection
The Cloud connection enables use of the channelBar Cloud Service.
Status:
- Connected – Active connection to Cloud Service
- Disconnected – No connection
- Connecting... – Connection in progress
Activating Connection
- Go to Settings → Connections
- Enable "Cloud Connection"
- Authentication happens automatically
Managing Buffers:
Once connected, your Cloud buffers are displayed:
- Buffer name
- API key (for sending from external tools)
New buffers can be created via the Cloud web interface.
Note
Cloud setup details are documented separately.
Configuring Servers
Under Settings → Servers you configure channelBar's local server services.
CLI Server (Command-Line Application)
The CLI server enables communication with the channelBar command-line application.
Settings:
| Setting | Description | Default |
|---|---|---|
| Enabled | Turn server on/off | On |
| Port | Local port | 51515 |
Valid Port Range: 1024 – 65535
Status Display:
- Running – Server is active and ready
- Stopped – Server is disabled
- Error – Startup error (e.g., port in use)
Version:
Shows the version of the connected command-line application and checks compatibility.
Webhook Server
The Webhook server receives HTTP requests from external systems.
Settings:
| Setting | Description | Default |
|---|---|---|
| Port | HTTP port | 8080 |
| Enable CORS | Allow cross-origin requests | Off |
| Rate Limit | Max requests per minute | 100 |
CORS (Cross-Origin Resource Sharing):
Enable CORS if you want to send webhooks from browser-based applications. When CORS is enabled, the appropriate HTTP headers are set.
Rate Limiting:
Protects against excessive load. Requests over the limit are answered with HTTP 429 (Too Many Requests).
Endpoints:
| Endpoint | Description |
|---|---|
POST /message/{channel} | Send message to channel |
GET /health | Check server status |
Security Note
The Webhook server is only locally accessible (127.0.0.1 / localhost). This is an intentional security decision – the server does not accept connections from outside your Mac.
It would technically be possible to expose the server to the internet via a reverse proxy (e.g., nginx). However, this is strongly discouraged as it creates an attack surface. For receiving messages from the internet, use the channelBar Cloud Service instead – it offers secure authentication and requires no open ports on your system.
Exporting and Importing Configuration
channelBar allows exporting and importing your entire configuration. Ideal for:
- Backing up your settings
- Migrating to a new Mac
- Sharing configurations
Exporting
- Go to Settings → General
- Click Export
- Choose a save location
- The configuration is saved as a
.channelbarfile
Exported Data:
- All channels with settings
- All provider configurations
- All output configurations
- All templates
- All connections (MQTT, Home Assistant)
- General settings (language, launch at login, etc.)
Not Exported:
- Message history
- Cloud connection status
- Passwords, API keys, and other credentials – these must be re-entered after import
Importing
- Go to Settings → General
- Click Import
- Select a
.channelbarfile - Confirm the import
Warning: Import Behavior
When importing a configuration, the existing configuration is completely replaced:
- All existing channels are deleted
- All messages are deleted
- The imported channels are newly created
- Connections with the same name are reused, new connections are added
Note
After import, all providers are restarted to apply the new settings.
Tips and Best Practices
Channel Organization
- Thematic Separation: One channel per topic area (work, home, monitoring)
- Clear Names: Choose descriptive identifiers
- Sensible Order: Important channels to the left
Provider Selection
| Use Case | Recommended Provider |
|---|---|
| Shell scripts | URL Scheme, Command-Line Application |
| CI/CD systems | Webhook |
| IoT devices | MQTT |
| Apple Shortcuts | Apple Shortcuts |
| Smart home | Home Assistant |
| Log files | File Watcher |
| Remote systems | Cloud, Webhook |
Template Tips
- Short and concise: The menu bar has limited space
- Relative time:
{relativeTime}is often more useful than absolute timestamps - Label source: With multiple providers,
{source}helps - Use emojis: Visual distinction (⚠ warning, ✅ success, etc.)
Performance
- Limit retention: Don't store more than necessary
- Adjust display limit: 25-50 messages usually suffice
- Disable unused providers: Saves resources
Security
- Set API keys: Secure webhook endpoints
- Use TLS: For MQTT and Home Assistant when possible