Compare commits

...

15 Commits

Author SHA1 Message Date
Adrian Jagielak
7e3d56cec1
v1.2.1 2025-09-27 02:26:33 +02:00
Adrian Jagielak
a8c61c4658
Revert "Use light entity for out_lvl_switch if the device type is "light""
This reverts commit 50500e97be95ec3dfde929e27e776242848b5425.
2025-09-27 02:25:52 +02:00
Adrian Jagielak
653df93807
v1.2.0 2025-09-26 20:00:52 +02:00
Adrian Jagielak
50500e97be
Use light entity for out_lvl_switch if the device type is "light" 2025-09-26 20:00:11 +02:00
Adrian Jagielak
f216f4b719
v1.1.2 2025-09-25 00:41:48 +02:00
dependabot[bot]
e7cab97142
Bump home-assistant/builder from 2025.03.0 to 2025.09.0 (#6) 2025-09-25 00:41:47 +02:00
dependabot[bot]
e39bfbcde8
Bump actions/checkout from 4.2.2 to 5.0.0 (#2) 2025-09-25 00:41:47 +02:00
dependabot[bot]
060ae593f8
Bump docker/login-action from 3.4.0 to 3.5.0 (#1) 2025-09-25 00:41:47 +02:00
Adrian Jagielak
383980d5f8
v1.1.1 2025-09-25 00:41:47 +02:00
Adrian Jagielak
41cd550225
Add error handling for invalid FIMP messages 2025-09-25 00:41:47 +02:00
Andreas
060947e06b
Update installation.md (#7)
Clarify that users must select the MQTT Integration instead of the hub’s MQTT server, with step-by-step guidance provided.
2025-09-25 00:41:47 +02:00
Adrian Jagielak
a05e96bae0
v1.1.0 2025-09-25 00:41:47 +02:00
Adrian Jagielak
000537585d
Stop inclusion/exclusion after the first report 2025-09-25 00:41:47 +02:00
Adrian Jagielak
351274f56e
Allow empty Thingsplex credentials (#3) 2025-09-25 00:41:47 +02:00
Andreas
a8e5b00275
Improve GUI security by hiding passwords by default (#5)
Replaced 'str?' with 'password?' for fh_password and tp_password
2025-09-25 00:41:47 +02:00
37 changed files with 295 additions and 21 deletions

View File

@ -21,7 +21,7 @@ jobs:
changed: ${{ steps.changed_addons.outputs.changed }} changed: ${{ steps.changed_addons.outputs.changed }}
steps: steps:
- name: Check out the repository - name: Check out the repository
uses: actions/checkout@v4.2.2 uses: actions/checkout@v5.0.0
- name: Get changed files - name: Get changed files
id: changed_files id: changed_files
@ -71,7 +71,7 @@ jobs:
steps: steps:
- name: Check out repository - name: Check out repository
uses: actions/checkout@v4.2.2 uses: actions/checkout@v5.0.0
- name: Get information - name: Get information
id: info id: info
@ -98,7 +98,7 @@ jobs:
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
if: env.BUILD_ARGS != '--test' if: env.BUILD_ARGS != '--test'
uses: docker/login-action@v3.4.0 uses: docker/login-action@v3.5.0
with: with:
registry: ghcr.io registry: ghcr.io
username: ${{ github.repository_owner }} username: ${{ github.repository_owner }}
@ -106,7 +106,7 @@ jobs:
- name: Build ${{ matrix.addon }} add-on - name: Build ${{ matrix.addon }} add-on
if: steps.check.outputs.build_arch == 'true' if: steps.check.outputs.build_arch == 'true'
uses: home-assistant/builder@2025.03.0 uses: home-assistant/builder@2025.09.0
with: with:
args: | args: |
${{ env.BUILD_ARGS }} \ ${{ env.BUILD_ARGS }} \

View File

@ -18,7 +18,7 @@ jobs:
addons: ${{ steps.addons.outputs.addons_list }} addons: ${{ steps.addons.outputs.addons_list }}
steps: steps:
- name: ⤵️ Check out code from GitHub - name: ⤵️ Check out code from GitHub
uses: actions/checkout@v4.2.2 uses: actions/checkout@v5.0.0
- name: 🔍 Find add-on directories - name: 🔍 Find add-on directories
id: addons id: addons
@ -33,7 +33,7 @@ jobs:
path: ${{ fromJson(needs.find.outputs.addons) }} path: ${{ fromJson(needs.find.outputs.addons) }}
steps: steps:
- name: ⤵️ Check out code from GitHub - name: ⤵️ Check out code from GitHub
uses: actions/checkout@v4.2.2 uses: actions/checkout@v5.0.0
- name: 🚀 Run Home Assistant Add-on Lint - name: 🚀 Run Home Assistant Add-on Lint
uses: frenck/action-addon-linter@v2.18 uses: frenck/action-addon-linter@v2.18

View File

@ -7,6 +7,8 @@ Futurehome add-on for Home Assistant. Designed to be a complete drop-in replacem
![Pairing example](https://raw.githubusercontent.com/adrianjagielak/home-assistant-futurehome/refs/heads/master/docs/assets/pairing.gif) ![Pairing example](https://raw.githubusercontent.com/adrianjagielak/home-assistant-futurehome/refs/heads/master/docs/assets/pairing.gif)
[Watch the official add-on demo video](https://www.youtube.com/watch?v=dmEy6R49CC0)
## Features ## Features
This add-on: This add-on:

View File

@ -27,7 +27,7 @@
4. **Enable MQTT Integration** 4. **Enable MQTT Integration**
In Home Assistant, go to **Settings > Devices & Services > Integrations** and enable **MQTT**. Add the MQTT integration by going to **Settings → Devices & Services → Integrations → Add integration**, search for and select **MQTT → MQTT**, then choose **"Use the official Mosquitto MQTT Broker add-on"**.
5. **Install the Futurehome Add-on** 5. **Install the Futurehome Add-on**

View File

@ -1,5 +1,28 @@
<!-- https://developers.home-assistant.io/docs/add-ons/presentation#keeping-a-changelog --> <!-- https://developers.home-assistant.io/docs/add-ons/presentation#keeping-a-changelog -->
## 1.2.1 (26.09.2025)
- Revert 'Use `light` entity for out_lvl_switch if the device type is "light"'.
## 1.2.0 (26.09.2025)
- Use `light` entity for out_lvl_switch if the device type is "light".
## 1.1.2 (24.09.2025)
- Bumped dependencies (#1, #2, #6).
## 1.1.1 (24.09.2025)
- Added error handling for invalid FIMP messages.
- Updated installation.md - clarified that users must select the MQTT Integration instead of the hubs MQTT server, with step-by-step guidance provided (@Andbli).
## 1.1.0 (24.09.2025)
- Stop inclusion/exclusion after the first device is added/removed, just like in the official app.
- Add configuration checkbox for allowing empty Thingsplex credentials (#3).
- Improved GUI security by hiding passwords by default (#4, #5) (thanks @Andbli !).
## 1.0.2 (16.09.2025) ## 1.0.2 (16.09.2025)
- Added logging the initial devices response. - Added logging the initial devices response.

View File

@ -6,6 +6,8 @@ Futurehome add-on for Home Assistant. Designed to be a complete drop-in replacem
![Pairing example](https://raw.githubusercontent.com/adrianjagielak/home-assistant-futurehome/refs/heads/master/docs/assets/pairing.gif) ![Pairing example](https://raw.githubusercontent.com/adrianjagielak/home-assistant-futurehome/refs/heads/master/docs/assets/pairing.gif)
[Watch the official add-on demo video](https://www.youtube.com/watch?v=dmEy6R49CC0)
## Features ## Features
This add-on: This add-on:

View File

@ -1,6 +1,6 @@
# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-config # https://developers.home-assistant.io/docs/add-ons/configuration#add-on-config
name: Futurehome name: Futurehome
version: '1.0.2' version: '1.2.0'
slug: futurehome slug: futurehome
description: Local Futurehome Smarthub integration description: Local Futurehome Smarthub integration
url: 'https://github.com/adrianjagielak/home-assistant-futurehome' url: 'https://github.com/adrianjagielak/home-assistant-futurehome'
@ -21,15 +21,17 @@ options:
fh_password: '' fh_password: ''
tp_username: '' tp_username: ''
tp_password: '' tp_password: ''
tp_allow_empty: false
demo_mode: false demo_mode: false
show_debug_log: false show_debug_log: false
schema: schema:
hub_ip: 'str?' hub_ip: 'str?'
fh_username: 'str?' fh_username: 'str?'
fh_password: 'str?' fh_password: 'password?'
tp_username: 'str?' tp_username: 'str?'
tp_password: 'str?' tp_password: 'password?'
tp_allow_empty: 'bool?'
demo_mode: 'bool?' demo_mode: 'bool?'
show_debug_log: 'bool?' show_debug_log: 'bool?'

View File

@ -10,6 +10,7 @@ export FH_USERNAME=$(bashio::config 'fh_username')
export FH_PASSWORD=$(bashio::config 'fh_password') export FH_PASSWORD=$(bashio::config 'fh_password')
export TP_USERNAME=$(bashio::config 'tp_username') export TP_USERNAME=$(bashio::config 'tp_username')
export TP_PASSWORD=$(bashio::config 'tp_password') export TP_PASSWORD=$(bashio::config 'tp_password')
export TP_ALLOW_EMPTY=$(bashio::config 'tp_allow_empty')
export DEMO_MODE=$(bashio::config 'demo_mode') export DEMO_MODE=$(bashio::config 'demo_mode')
export SHOW_DEBUG_LOG=$(bashio::config 'show_debug_log') export SHOW_DEBUG_LOG=$(bashio::config 'show_debug_log')

View File

@ -82,7 +82,24 @@ export async function sendFimpMsg({
}, timeoutMs); }, timeoutMs);
const onResponse = (topic: string, buffer: any) => { const onResponse = (topic: string, buffer: any) => {
const msg = JSON.parse(buffer.toString()); let bufferToString;
try {
bufferToString = buffer.toString();
} catch (e) {
log.warn('Invalid message received from hub MQTT broker', e);
return;
}
let msg;
try {
msg = JSON.parse(bufferToString);
} catch (e) {
log.warn(
`Invalid FIMP message received from hub MQTT broker\nMessage: ${bufferToString}`,
e,
);
return;
}
if (msg.corid === uid) { if (msg.corid === uid) {
if (msg.type === 'evt.error.report') { if (msg.type === 'evt.error.report') {

View File

@ -400,12 +400,150 @@ export function handleExclusionStatusReport(hubId: string, msg: FimpResponse) {
); );
} }
export function handleInclusionReport() { export async function handleInclusionReport(parameters: {
hubId: string;
demoMode: boolean;
hubIp: string;
thingsplexUsername: string;
thingsplexPassword: string;
thingsplexAllowEmpty: boolean;
}) {
const topicPrefix = `homeassistant/device/futurehome_${parameters.hubId}_hub`;
pollVinculum('device').catch((e) => log.warn('Failed to request devices', e)); pollVinculum('device').catch((e) => log.warn('Failed to request devices', e));
pollVinculum('state').catch((e) => log.warn('Failed to request state', e)); pollVinculum('state').catch((e) => log.warn('Failed to request state', e));
if (parameters.demoMode) {
ha?.publish(`${topicPrefix}/inclusion_exclusion_status/state`, 'Done', {
retain: true,
qos: 2,
});
return;
} }
export function handleExclusionReport() { if (
!parameters.thingsplexAllowEmpty &&
!parameters.thingsplexUsername &&
!parameters.thingsplexPassword
) {
return;
}
try {
const token = await loginToThingsplex({
host: parameters.hubIp,
username: parameters.thingsplexUsername,
password: parameters.thingsplexPassword,
});
await connectThingsplexWebSocketAndSend(
{
host: parameters.hubIp,
token: token,
},
[
{
address: 'pt:j1/mt:cmd/rt:ad/rn:zigbee/ad:1',
service: 'zigbee',
cmd: 'cmd.thing.inclusion',
val: false,
val_t: 'bool',
},
{
address: 'pt:j1/mt:cmd/rt:ad/rn:zw/ad:1',
service: 'zwave-ad',
cmd: 'cmd.thing.inclusion',
val: false,
val_t: 'bool',
},
],
);
ha?.publish(`${topicPrefix}/inclusion_exclusion_status/state`, 'Done', {
retain: true,
qos: 2,
});
} catch (e) {
log.error('Failed trying to stop inclusion/exclusion', e);
ha?.publish(
`${topicPrefix}/inclusion_exclusion_status/state`,
'Failed trying to stop inclusion/exclusion.',
{
retain: true,
qos: 2,
},
);
}
}
export async function handleExclusionReport(parameters: {
hubId: string;
demoMode: boolean;
hubIp: string;
thingsplexUsername: string;
thingsplexPassword: string;
thingsplexAllowEmpty: boolean;
}) {
const topicPrefix = `homeassistant/device/futurehome_${parameters.hubId}_hub`;
pollVinculum('device').catch((e) => log.warn('Failed to request devices', e)); pollVinculum('device').catch((e) => log.warn('Failed to request devices', e));
pollVinculum('state').catch((e) => log.warn('Failed to request state', e)); pollVinculum('state').catch((e) => log.warn('Failed to request state', e));
if (parameters.demoMode) {
ha?.publish(`${topicPrefix}/inclusion_exclusion_status/state`, 'Done', {
retain: true,
qos: 2,
});
return;
}
if (
!parameters.thingsplexAllowEmpty &&
!parameters.thingsplexUsername &&
!parameters.thingsplexPassword
) {
return;
}
try {
const token = await loginToThingsplex({
host: parameters.hubIp,
username: parameters.thingsplexUsername,
password: parameters.thingsplexPassword,
});
await connectThingsplexWebSocketAndSend(
{
host: parameters.hubIp,
token: token,
},
[
{
address: 'pt:j1/mt:cmd/rt:ad/rn:zigbee/ad:1',
service: 'zigbee',
cmd: 'cmd.thing.exclusion',
val: false,
val_t: 'bool',
},
{
address: 'pt:j1/mt:cmd/rt:ad/rn:zw/ad:1',
service: 'zwave-ad',
cmd: 'cmd.thing.exclusion',
val: false,
val_t: 'bool',
},
],
);
ha?.publish(`${topicPrefix}/inclusion_exclusion_status/state`, 'Done', {
retain: true,
qos: 2,
});
} catch (e) {
log.error('Failed trying to stop inclusion/exclusion', e);
ha?.publish(
`${topicPrefix}/inclusion_exclusion_status/state`,
'Failed trying to stop inclusion/exclusion.',
{
retain: true,
qos: 2,
},
);
}
} }

View File

@ -208,6 +208,7 @@ export function haPublishDevice(parameters: {
deviceInclusionReport: InclusionReport | undefined; deviceInclusionReport: InclusionReport | undefined;
thingsplexUsername: string; thingsplexUsername: string;
thingsplexPassword: string; thingsplexPassword: string;
thingsplexAllowEmpty: boolean;
}): { commandHandlers: CommandHandlers } { }): { commandHandlers: CommandHandlers } {
const components: { [key: string]: HaMqttComponent } = {}; const components: { [key: string]: HaMqttComponent } = {};
const handlers: CommandHandlers = {}; const handlers: CommandHandlers = {};
@ -261,8 +262,8 @@ export function haPublishDevice(parameters: {
} }
if ( if (
parameters.thingsplexUsername && (parameters.thingsplexAllowEmpty ||
parameters.thingsplexPassword && (parameters.thingsplexUsername && parameters.thingsplexPassword)) &&
parameters.vinculumDeviceData.fimp?.address && parameters.vinculumDeviceData.fimp?.address &&
parameters.vinculumDeviceData.fimp?.adapter parameters.vinculumDeviceData.fimp?.adapter
) { ) {

View File

@ -22,6 +22,7 @@ import { pollVinculum } from './fimp/vinculum';
const localApiPassword = process.env.FH_PASSWORD || ''; const localApiPassword = process.env.FH_PASSWORD || '';
const thingsplexUsername = process.env.TP_USERNAME || ''; const thingsplexUsername = process.env.TP_USERNAME || '';
const thingsplexPassword = process.env.TP_PASSWORD || ''; const thingsplexPassword = process.env.TP_PASSWORD || '';
const thingsplexAllowEmpty = (process.env.TP_ALLOW_EMPTY || '').toLowerCase().includes('true');
const demoMode = (process.env.DEMO_MODE || '').toLowerCase().includes('true'); const demoMode = (process.env.DEMO_MODE || '').toLowerCase().includes('true');
const showDebugLog = (process.env.SHOW_DEBUG_LOG || '') const showDebugLog = (process.env.SHOW_DEBUG_LOG || '')
.toLowerCase() .toLowerCase()
@ -166,6 +167,7 @@ import { pollVinculum } from './fimp/vinculum';
deviceInclusionReport, deviceInclusionReport,
thingsplexUsername, thingsplexUsername,
thingsplexPassword, thingsplexPassword,
thingsplexAllowEmpty,
}); });
await delay(50); await delay(50);
@ -189,7 +191,7 @@ import { pollVinculum } from './fimp/vinculum';
log.error('Failed publishing device', device, e); log.error('Failed publishing device', device, e);
} }
} }
if (demoMode || (thingsplexUsername && thingsplexPassword)) { if (demoMode || thingsplexAllowEmpty || (thingsplexUsername && thingsplexPassword)) {
Object.assign( Object.assign(
commandHandlers, commandHandlers,
exposeSmarthubTools({ exposeSmarthubTools({
@ -280,12 +282,26 @@ import { pollVinculum } from './fimp/vinculum';
} }
case 'evt.thing.inclusion_report': { case 'evt.thing.inclusion_report': {
handleInclusionReport(); handleInclusionReport({
hubId,
demoMode,
hubIp,
thingsplexUsername,
thingsplexPassword,
thingsplexAllowEmpty,
});
break; break;
} }
case 'evt.thing.exclusion_report': { case 'evt.thing.exclusion_report': {
handleExclusionReport(); handleExclusionReport({
hubId,
demoMode,
hubIp,
thingsplexUsername,
thingsplexPassword,
thingsplexAllowEmpty,
});
break; break;
} }

View File

@ -20,7 +20,7 @@ export function parameters__components(
const commandHandlers: CommandHandlers = {}; const commandHandlers: CommandHandlers = {};
const stateTopic = `${topicPrefix}/state`; const stateTopic = `${topicPrefix}/state`;
// Fetch cached state for this service to discover known parameters :contentReference[oaicite:2]{index=2} // Fetch cached state for this service to discover known parameters
const currentState = haGetCachedState({ topic: stateTopic })?.[svc.addr]; const currentState = haGetCachedState({ topic: stateTopic })?.[svc.addr];
const paramMap = currentState?.param; const paramMap = currentState?.param;
if (!paramMap) { if (!paramMap) {
@ -31,7 +31,7 @@ export function parameters__components(
// Single MQTT topic for setting any parameter // Single MQTT topic for setting any parameter
const setParamTopic = `${topicPrefix}${svc.addr}/set_param/command`; const setParamTopic = `${topicPrefix}${svc.addr}/set_param/command`;
// Iterate over each parameter in the cached state :contentReference[oaicite:3]{index=3} // Iterate over each parameter in the cached state
for (const [paramId, param] of Object.entries(paramMap)) { for (const [paramId, param] of Object.entries(paramMap)) {
const valueType = (param as any).value_type as string; const valueType = (param as any).value_type as string;
const uniqueId = `${svc.addr}_${paramId}`; const uniqueId = `${svc.addr}_${paramId}`;

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Пароль Thingsplex (неабавязкова) name: Пароль Thingsplex (неабавязкова)
description: Ваш пароль для Thingsplex. description: Ваш пароль для Thingsplex.
tp_allow_empty:
name: Дазволіць пустыя ўліковыя дадзеныя Thingsplex
description: Дазволіць пустое імя карыстальніка і/або пароль Thingsplex.
demo_mode: demo_mode:
name: Дэманстрацыйны рэжым name: Дэманстрацыйны рэжым
description: Выкарыстоўвайце запісаны стан з рэальнага Futurehome Smarthub для мадэлявання прылад. description: Выкарыстоўвайце запісаны стан з рэальнага Futurehome Smarthub для мадэлявання прылад.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Пароль Thingsplex (неабавязкова) name: Пароль Thingsplex (неабавязкова)
description: Ваш пароль для Thingsplex. description: Ваш пароль для Thingsplex.
tp_allow_empty:
name: Дазволіць пустыя ўліковыя дадзеныя Thingsplex
description: Дазволіць пустое імя карыстальніка і/або пароль Thingsplex.
demo_mode: demo_mode:
name: Дэманстрацыйны рэжым name: Дэманстрацыйны рэжым
description: Выкарыстоўвайце запісаны стан з рэальнага Futurehome Smarthub для мадэлявання прылад. description: Выкарыстоўвайце запісаны стан з рэальнага Futurehome Smarthub для мадэлявання прылад.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Heslo Thingsplex (volitelné) name: Heslo Thingsplex (volitelné)
description: Vaše heslo pro Thingsplex. description: Vaše heslo pro Thingsplex.
tp_allow_empty:
name: Povolit prázdné přihlašovací údaje Thingsplex
description: Povolit prázdné uživatelské jméno a/nebo heslo Thingsplex.
demo_mode: demo_mode:
name: Demo režim name: Demo režim
description: Použijte uložený stav ze skutečného Futurehome Smarthubu pro simulaci zařízení. description: Použijte uložený stav ze skutečného Futurehome Smarthubu pro simulaci zařízení.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Heslo Thingsplex (volitelné) name: Heslo Thingsplex (volitelné)
description: Vaše heslo pro Thingsplex. description: Vaše heslo pro Thingsplex.
tp_allow_empty:
name: Povolit prázdné přihlašovací údaje Thingsplex
description: Povolit prázdné uživatelské jméno a/nebo heslo Thingsplex.
demo_mode: demo_mode:
name: Demo režim name: Demo režim
description: Použijte uložený stav ze skutečného Futurehome Smarthubu pro simulaci zařízení. description: Použijte uložený stav ze skutečného Futurehome Smarthubu pro simulaci zařízení.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Thingsplex-adgangskode (valgfri) name: Thingsplex-adgangskode (valgfri)
description: Din Thingsplex-adgangskode. description: Din Thingsplex-adgangskode.
tp_allow_empty:
name: Tillad tomme Thingsplex-legitimationsoplysninger
description: Tillad tomt Thingsplex-brugernavn og/eller adgangskode.
demo_mode: demo_mode:
name: Demotilstand name: Demotilstand
description: Brug en optaget prøvetilstand fra en rigtig Futurehome Smarthub til at simulere enheder. description: Brug en optaget prøvetilstand fra en rigtig Futurehome Smarthub til at simulere enheder.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Thingsplex-Passwort (optional) name: Thingsplex-Passwort (optional)
description: Dein Thingsplex-Passwort. description: Dein Thingsplex-Passwort.
tp_allow_empty:
name: Leere Thingsplex-Anmeldedaten zulassen
description: Leeren Thingsplex-Benutzernamen und/oder Passwort zulassen.
demo_mode: demo_mode:
name: Demo-Modus name: Demo-Modus
description: Verwende einen aufgezeichneten Beispielzustand eines echten Futurehome Smarthubs, um Geräte zu simulieren. description: Verwende einen aufgezeichneten Beispielzustand eines echten Futurehome Smarthubs, um Geräte zu simulieren.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Thingsplex-adgangskode (valgfri) name: Thingsplex-adgangskode (valgfri)
description: Din Thingsplex-adgangskode. description: Din Thingsplex-adgangskode.
tp_allow_empty:
name: Tillad tomme Thingsplex-legitimationsoplysninger
description: Tillad tomt Thingsplex-brugernavn og/eller adgangskode.
demo_mode: demo_mode:
name: Demotilstand name: Demotilstand
description: Brug en optaget prøvetilstand fra en rigtig Futurehome Smarthub til at simulere enheder. description: Brug en optaget prøvetilstand fra en rigtig Futurehome Smarthub til at simulere enheder.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Thingsplexi parool (valikuline) name: Thingsplexi parool (valikuline)
description: Sinu Thingsplexi parool. description: Sinu Thingsplexi parool.
tp_allow_empty:
name: Luba tühjad Thingsplexi mandaadid
description: Luba tühi Thingsplexi kasutajanimi ja/või parool.
demo_mode: demo_mode:
name: Demorežiim name: Demorežiim
description: Kasuta päris Futurehome Smarthubist salvestatud näidisseisu seadmete simuleerimiseks. description: Kasuta päris Futurehome Smarthubist salvestatud näidisseisu seadmete simuleerimiseks.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Thingsplex Password (Optional) name: Thingsplex Password (Optional)
description: Your Thingsplex password. description: Your Thingsplex password.
tp_allow_empty:
name: Allow Empty Thingsplex Credentials
description: Allow empty Thingsplex username and/or password.
demo_mode: demo_mode:
name: Demo Mode name: Demo Mode
description: Use a sample recorded state from a real Futurehome Smarthub to simulate devices. description: Use a sample recorded state from a real Futurehome Smarthub to simulate devices.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Thingsplexi parool (valikuline) name: Thingsplexi parool (valikuline)
description: Sinu Thingsplexi parool. description: Sinu Thingsplexi parool.
tp_allow_empty:
name: Luba tühjad Thingsplexi mandaadid
description: Luba tühi Thingsplexi kasutajanimi ja/või parool.
demo_mode: demo_mode:
name: Demorežiim name: Demorežiim
description: Kasuta päris Futurehome Smarthubist salvestatud näidisseisu seadmete simuleerimiseks. description: Kasuta päris Futurehome Smarthubist salvestatud näidisseisu seadmete simuleerimiseks.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Thingsplex-salasana (valinnainen) name: Thingsplex-salasana (valinnainen)
description: Thingsplex-salasanasi. description: Thingsplex-salasanasi.
tp_allow_empty:
name: Salli tyhjät Thingsplex-tunnistetiedot
description: Salli tyhjä Thingsplex-käyttäjätunnus ja/tai salasana.
demo_mode: demo_mode:
name: Demotila name: Demotila
description: Käytä tallennettua tilanäytettä oikeasta Futurehome Smarthubista laitteiden simuloimiseen. description: Käytä tallennettua tilanäytettä oikeasta Futurehome Smarthubista laitteiden simuloimiseen.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Thingsplex lykilorð (valkvætt) name: Thingsplex lykilorð (valkvætt)
description: Lykilorðið þitt fyrir Thingsplex. description: Lykilorðið þitt fyrir Thingsplex.
tp_allow_empty:
name: Leyfa tómar Thingsplex-auðkenningar
description: Leyfa tómt Thingsplex-notandanafn og/eða lykilorð.
demo_mode: demo_mode:
name: Sýnishamur name: Sýnishamur
description: Notaðu upptaka af raunverulegu ástandi úr Futurehome Smarthub til að herma eftir tækjum. description: Notaðu upptaka af raunverulegu ástandi úr Futurehome Smarthub til að herma eftir tækjum.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Thingsplex slaptažodis (pasirinktinai) name: Thingsplex slaptažodis (pasirinktinai)
description: Jūsų Thingsplex slaptažodis. description: Jūsų Thingsplex slaptažodis.
tp_allow_empty:
name: Leisti tuščius „Thingsplex“ prisijungimo duomenis
description: Leisti tuščią „Thingsplex“ vartotojo vardą ir (arba) slaptažodį.
demo_mode: demo_mode:
name: Demonstracinis režimas name: Demonstracinis režimas
description: Naudokite įrašytą būsena iš tikro Futurehome Smarthub, kad imituotumėte įrenginius. description: Naudokite įrašytą būsena iš tikro Futurehome Smarthub, kad imituotumėte įrenginius.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Thingsplex parole (pēc izvēles) name: Thingsplex parole (pēc izvēles)
description: Tava Thingsplex parole. description: Tava Thingsplex parole.
tp_allow_empty:
name: Atļaut tukšus Thingsplex akreditācijas datus
description: Atļaut tukšu Thingsplex lietotājvārdu un/vai paroli.
demo_mode: demo_mode:
name: Demonstrācijas režīms name: Demonstrācijas režīms
description: Izmanto ierakstītu stāvokli no īsta Futurehome Smarthub, lai simulētu ierīces. description: Izmanto ierakstītu stāvokli no īsta Futurehome Smarthub, lai simulētu ierīces.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Thingsplex-passord (valgfritt) name: Thingsplex-passord (valgfritt)
description: Ditt passord for Thingsplex. description: Ditt passord for Thingsplex.
tp_allow_empty:
name: Tillat tomme Thingsplex-legitimasjoner
description: Tillat tomt Thingsplex-brukernavn og/eller passord.
demo_mode: demo_mode:
name: Demomodus name: Demomodus
description: Bruk en forhåndsopptatt tilstand fra en ekte Futurehome Smarthub for å simulere enheter. description: Bruk en forhåndsopptatt tilstand fra en ekte Futurehome Smarthub for å simulere enheter.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Thingsplex-passord (valfritt) name: Thingsplex-passord (valfritt)
description: Ditt passord for Thingsplex. description: Ditt passord for Thingsplex.
tp_allow_empty:
name: Tillat tomme Thingsplex-legitimasjonar
description: Tillat tomt Thingsplex-brukarnamn og/eller passord.
demo_mode: demo_mode:
name: Demomodus name: Demomodus
description: Bruk ein førehandsopptak frå ein ekte Futurehome Smarthub for å simulere einingar. description: Bruk ein førehandsopptak frå ein ekte Futurehome Smarthub for å simulere einingar.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Thingsplex-passord (valgfritt) name: Thingsplex-passord (valgfritt)
description: Ditt passord for Thingsplex. description: Ditt passord for Thingsplex.
tp_allow_empty:
name: Tillat tomme Thingsplex-legitimasjoner
description: Tillat tomt Thingsplex-brukernavn og/eller passord.
demo_mode: demo_mode:
name: Demomodus name: Demomodus
description: Bruk en forhåndsopptatt tilstand fra en ekte Futurehome Smarthub for å simulere enheter. description: Bruk en forhåndsopptatt tilstand fra en ekte Futurehome Smarthub for å simulere enheter.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Hasło do Thingsplex (opcjonalne) name: Hasło do Thingsplex (opcjonalne)
description: Twoje hasło do Thingsplex. description: Twoje hasło do Thingsplex.
tp_allow_empty:
name: Zezwól na puste dane logowania Thingsplex
description: Zezwól na puste nazwy użytkownika i/lub hasła Thingsplex.
demo_mode: demo_mode:
name: Tryb demonstracyjny name: Tryb demonstracyjny
description: Użyj zapisanego stanu z prawdziwego Futurehome Smarthub, aby symulować urządzenia. description: Użyj zapisanego stanu z prawdziwego Futurehome Smarthub, aby symulować urządzenia.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Пароль Thingsplex (необязательно) name: Пароль Thingsplex (необязательно)
description: Ваш пароль Thingsplex. description: Ваш пароль Thingsplex.
tp_allow_empty:
name: Разрешить пустые учетные данные Thingsplex
description: Разрешить пустое имя пользователя и/или пароль Thingsplex.
demo_mode: demo_mode:
name: Демонстрационный режим name: Демонстрационный режим
description: Используйте сохранённое состояние от настоящего Futurehome Smarthub для имитации устройств. description: Используйте сохранённое состояние от настоящего Futurehome Smarthub для имитации устройств.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Thingsplex-lösenord (valfritt) name: Thingsplex-lösenord (valfritt)
description: Ditt lösenord för Thingsplex. description: Ditt lösenord för Thingsplex.
tp_allow_empty:
name: Tillåt tomma Thingsplex-uppgifter
description: Tillåt tomt Thingsplex-användarnamn och/eller lösenord.
demo_mode: demo_mode:
name: Demoläge name: Demoläge
description: Använd ett inspelat exempel från en riktig Futurehome Smarthub för att simulera enheter. description: Använd ett inspelat exempel från en riktig Futurehome Smarthub för att simulera enheter.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Heslo Thingsplex (voliteľné) name: Heslo Thingsplex (voliteľné)
description: Vaše heslo pre Thingsplex. description: Vaše heslo pre Thingsplex.
tp_allow_empty:
name: Povoliť prázdne prihlasovacie údaje Thingsplex
description: Povoliť prázdne používateľské meno a/alebo heslo Thingsplex.
demo_mode: demo_mode:
name: Demo režim name: Demo režim
description: Použite uložený stav zo skutočného Futurehome Smarthubu na simuláciu zariadení. description: Použite uložený stav zo skutočného Futurehome Smarthubu na simuláciu zariadení.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Thingsplex-lösenord (valfritt) name: Thingsplex-lösenord (valfritt)
description: Ditt lösenord för Thingsplex. description: Ditt lösenord för Thingsplex.
tp_allow_empty:
name: Tillåt tomma Thingsplex-uppgifter
description: Tillåt tomt Thingsplex-användarnamn och/eller lösenord.
demo_mode: demo_mode:
name: Demoläge name: Demoläge
description: Använd ett inspelat exempel från en riktig Futurehome Smarthub för att simulera enheter. description: Använd ett inspelat exempel från en riktig Futurehome Smarthub för att simulera enheter.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Пароль Thingsplex (необов’язково) name: Пароль Thingsplex (необов’язково)
description: Ваш пароль для Thingsplex. description: Ваш пароль для Thingsplex.
tp_allow_empty:
name: Дозволити порожні облікові дані Thingsplex
description: Дозволити порожнє ім’я користувача та/або пароль Thingsplex.
demo_mode: demo_mode:
name: Демонстраційний режим name: Демонстраційний режим
description: Використовуйте записаний стан із реального Futurehome Smarthub для імітації пристроїв. description: Використовуйте записаний стан із реального Futurehome Smarthub для імітації пристроїв.

View File

@ -14,6 +14,9 @@ configuration:
tp_password: tp_password:
name: Пароль Thingsplex (необов’язково) name: Пароль Thingsplex (необов’язково)
description: Ваш пароль для Thingsplex. description: Ваш пароль для Thingsplex.
tp_allow_empty:
name: Дозволити порожні облікові дані Thingsplex
description: Дозволити порожнє ім’я користувача та/або пароль Thingsplex.
demo_mode: demo_mode:
name: Демонстраційний режим name: Демонстраційний режим
description: Використовуйте записаний стан із реального Futurehome Smarthub для імітації пристроїв. description: Використовуйте записаний стан із реального Futurehome Smarthub для імітації пристроїв.