Aspetto
Profili di esempio
I profili seguenti mostrano ciascuno una tecnica su un dispositivo reale: HTTP, TCP (Modbus), UDP, MQTT e KNX. Sono abbreviati, così che l'essenziale resti visibile, e sono stati verificati dall'Editor profilo senza segnalazioni. I profili completi di questi dispositivi si trovano nella Libreria online. La struttura è spiegata in Formato del profilo e CommandServer.
Per provare un esempio: salvi il testo JSON come file con l'estensione .json, lo carichi in Competenze → Add-on → Profili con Caricamento manuale e crei un dispositivo con Crea dispositivo.
HTTP: go-eCharger
La wallbox go-eCharger ha un'interfaccia HTTP che fornisce JSON (API v2, da attivare localmente nell'app go-e). Il profilo interroga lo stato ogni 30 secondi e può forzare o bloccare la ricarica e impostare la corrente di carica.
json
{
"version": "1.0",
"author": "Muster Integration GmbH",
"description": "go-eCharger (HTTP-API v2)",
"manufacturer": "go-e",
"model": "go-eCharger",
"platform": "go-e",
"category": "Energy",
"type": "EV Charger",
"nomosCertified": false,
"compatibility": 50,
"className": "GOE_CHARGER",
"engineType": "",
"structure": {
"config": {
"ACTIVE": {"value": "YES", "editable": false},
"DEBUG": {"value": "NO", "editable": false},
"SERVERIP": {"value": "", "editable": {"type": "host", "default": ""}},
"SERVERPORT": {"value": "80", "editable": false},
"SERVERPROTOCOL": {"value": "HTTP", "editable": false},
"SERVERMODE": {"value": "ASCII", "editable": false},
"SERVERTIMEOUT_IN_MS": {"value": "8000", "editable": false},
"CMDPREFIX": {"value": "/api/", "editable": false},
"STARTUPCMD": {"value": "STATUS", "editable": false},
"MATCHING": {"value": "FULL", "editable": false},
"CONNECTEVENT": {"value": "REACHABLE=1", "editable": false},
"DISCONNECTEVENT": {"value": "REACHABLE=0", "editable": false}
},
"commands": {
"STATUS": {"sequence": "status?filter=rbt,frc,car,lmo,wh,tpa,eto,tma,alw,ama,cbl,cus,fup,awe,ust,cdi,rssi,modelStatus,error", "parameterCount": 0},
"SETFRC": {"sequence": "set?frc=\\#", "parameterCount": 1},
"SETAMA": {"sequence": "set?ama=\\#", "parameterCount": 1}
},
"mappings": {
"FRC": {"match": "\"frc\":\\*,", "onChange": true},
"CAR": {"match": "\"car\":\\*,", "onChange": true},
"CHARGING": {"match": "", "onChange": true, "condition": "{$CAR$,%in2}"},
"AMA": {"match": "\"ama\":\\*,", "onChange": true},
"TPA": {"match": "\"tpa\":\\*,", "onChange": true, "condition": "{%*1.0}"},
"WH": {"match": "\"wh\":\\*,", "onChange": true, "condition": "{%/1000.00}"}
}
},
"polling": {
"Status": {"interval": 30, "editableInterval": true, "command": "STATUS"}
},
"properties": {
"powerstate": {"method": "set", "property": "FRC", "datatype": "int", "valueList": [{"text": "Neutral", "value": "0"}, {"text": "Off", "value": "1"}, {"text": "On", "value": "2"}]},
"amperelimit": {"method": "set", "property": "AMA", "datatype": "int", "unit": "A", "min": 6, "max": 32, "internalMin": 6, "internalMax": 32, "stepValue": 1}
},
"propertiesMeta": {
"powerstate": {"text": "State", "properties": ["powerstate"]},
"amperelimit": {"text": "Charging current", "properties": ["amperelimit"]}
},
"mappings": {
"powerstate": {"method": "get", "property": "FRC", "datatype": "int", "valueList": [{"text": "Neutral", "value": "0"}, {"text": "Off", "value": "1"}, {"text": "On", "value": "2"}]},
"status": {"method": "get", "property": "CAR", "datatype": "int", "valueList": [{"text": "Unknown", "value": "0"}, {"text": "Idle", "value": "1"}, {"text": "Charging", "value": "2"}, {"text": "Waiting", "value": "3"}, {"text": "Completed", "value": "4"}, {"text": "Error", "value": "5"}]},
"charging": {"method": "get", "property": "CHARGING", "datatype": "bool", "defaultValue": false},
"amperelimit": {"method": "get", "property": "AMA", "datatype": "int", "unit": "A", "min": 6, "max": 32, "internalMin": 6, "internalMax": 32},
"power": {"method": "get", "property": "TPA", "datatype": "float", "unit": "W", "customFormat": {"format": {"Math.round": {"var": "value"}}}},
"e_connected": {"method": "get", "property": "WH", "datatype": "float", "unit": "kWh"},
"reachable": {"method": "get", "property": "REACHABLE", "datatype": "bool", "defaultValue": false}
},
"mappingsMeta": {
"powerstate": {"text": "State", "properties": ["powerstate"]},
"status": {"text": "Status", "properties": ["status"]},
"charging": {"text": "Charging", "properties": ["charging"]},
"amperelimit": {"text": "Charging current", "properties": ["amperelimit"]},
"power": {"text": "Power", "properties": ["power"]},
"e_connected": {"text": "Energy", "properties": ["e_connected"]},
"reachable": {"text": "Reachable", "properties": ["reachable"]}
},
"actionTemplates": [
{"templateid": "powerstate", "mapping": "powerstate", "text": "State", "icon": "toggle-on", "valueList": [{"text": "Neutral", "value": "0"}, {"text": "Off", "value": "1"}, {"text": "On", "value": "2"}]},
{"templateid": "amperelimit", "mapping": "amperelimit", "text": "Charging current", "icon": "adjust"}
],
"triggerTemplates": [
{"templateid": "status", "mapping": "status", "text": "Status", "icon": "info-circle", "valueList": [{"text": "Unknown", "value": "0"}, {"text": "Idle", "value": "1"}, {"text": "Charging", "value": "2"}, {"text": "Waiting", "value": "3"}, {"text": "Completed", "value": "4"}, {"text": "Error", "value": "5"}]},
{"templateid": "charging", "mapping": "charging", "text": "Charging", "icon": "bolt"},
{"templateid": "power", "mapping": "power", "text": "Power", "icon": "bolt"}
],
"hideProperties": true,
"hideMappings": true
}Che cosa mostra l'esempio:
CMDPREFIX/api/si trova prima di ogni comando.STATUSrichiama quindihttp://<IP>/api/status?filter=…,SETAMAcon il valore 16 richiama/api/set?ama=16.STARTUPCMDinterroga lo stato subito all'avvio, non solo dopo 30 secondi.- Pattern di risposta per JSON:
"\"car\":\\*,"cattura il valore tra"car":e la virgola successiva. L'interrogazione è la stessa del profilo completo della Libreria online e nomina più campi di quelli usati da questo esempio. Per l'ultimo campo di un oggetto JSON vedi Pattern. - Formato:
{%/1000.00}converte Wh in kWh con due decimali;{%/1000}darebbe kWh interi. - Valore calcolato:
CHARGINGè1seCARha il valore2(in carica). - Elenchi di valori:
powerstatepuò assumere solo0,1o2; lo stesso elenco si trova nel modello, così le automazioni mostrano una selezione. - Interrogazione con
editableInterval: alla creazione l'intervallo si può modificare. - Raggiungibilità: ogni interrogazione riuscita segnala
REACHABLE=1, ogni interrogazione non riuscitaREACHABLE=0.
TCP: Eastron SDM120 tramite Modbus TCP
Il contatore elettrico Eastron SDM120 parla Modbus RTU; un gateway Modbus TCP lo porta sulla rete. Il profilo legge tensione e potenza di rete ogni 5 secondi e i valori dei contatori ogni minuto.
json
{
"version": "1.0",
"author": "Muster Integration GmbH",
"description": "Eastron SDM120 über Modbus-TCP-Gateway",
"manufacturer": "Eastron",
"model": "SDM120 Modbus",
"platform": "Eastron",
"category": "Energy",
"type": "Smart Meter",
"nomosCertified": false,
"compatibility": 50,
"className": "EASTRON_SDM120",
"engineType": "",
"structure": {
"config": {
"ACTIVE": {"value": "YES", "editable": false},
"DEBUG": {"value": "NO", "editable": false},
"SERVERIP": {"value": "", "editable": {"type": "host", "default": ""}},
"SERVERPORT": {"value": "502", "editable": {"type": "integer", "default": "502"}},
"SERVERPROTOCOL": {"value": "TCP", "editable": false},
"SERVERMODE": {"value": "HEX", "editable": false},
"SERVERTIMEOUT_IN_MS": {"value": "NONE", "editable": false},
"SPACING": {"value": "1000", "editable": false},
"MATCHING": {"value": "FULL", "editable": false},
"CONNECTEVENT": {"value": "REACHABLE=1", "editable": false},
"DISCONNECTEVENT": {"value": "REACHABLE=0", "editable": false}
},
"commands": {
"READ_INSTANT": {"sequence": "000000000006010400000020", "parameterCount": 0, "tag": "instant"},
"READ_ENERGY": {"sequence": "000000000006010400480004", "parameterCount": 0, "tag": "energy"}
},
"mappings": {
"L1_VOLTAGE": {"match": "000000000043010440\\!0!\\^^^^^^^^", "onChange": true, "condition": "{%swap32,%float}", "tag": "instant"},
"GRID": {"match": "000000000043010440\\!48!\\^^^^^^^^", "onChange": true, "condition": "{%swap32,%float,%*-1}", "tag": "instant"},
"E_IMPORT": {"match": "00000000000B010408\\!0!\\^^^^^^^^", "onChange": true, "condition": "{%swap32,%float}", "tag": "energy"},
"E_EXPORT": {"match": "00000000000B010408\\!8!\\^^^^^^^^", "onChange": true, "condition": "{%swap32,%float}", "tag": "energy"}
}
},
"polling": {
"Instant": {"interval": 5, "editableInterval": false, "command": "READ_INSTANT"},
"Energy": {"interval": 60, "editableInterval": false, "command": "READ_ENERGY"}
},
"properties": {},
"propertiesMeta": {},
"mappings": {
"grid": {"method": "get", "property": "GRID", "datatype": "float", "unit": "W", "customFormat": {"format": {"Math.abs": {"Math.round": {"var": "value"}}}, "red-minus": {"<": [{"var": "value"}, 0]}, "green-plus": {">": [{"var": "value"}, 0]}}},
"l1_voltage": {"method": "get", "property": "L1_VOLTAGE", "datatype": "float", "unit": "V", "uihidden": true},
"meter_e_total_imp": {"method": "get", "property": "E_IMPORT", "datatype": "float", "unit": "kWh"},
"meter_e_total_exp": {"method": "get", "property": "E_EXPORT", "datatype": "float", "unit": "kWh"},
"reachable": {"method": "get", "property": "REACHABLE", "datatype": "bool", "defaultValue": false}
},
"mappingsMeta": {
"grid": {"text": "Grid", "properties": ["grid"]},
"l1_voltage": {"text": "Voltage", "properties": ["l1_voltage"]},
"meter_e_total_imp": {"text": "Total Import", "properties": ["meter_e_total_imp"]},
"meter_e_total_exp": {"text": "Total Export", "properties": ["meter_e_total_exp"]},
"reachable": {"text": "Reachable", "properties": ["reachable"]}
},
"hideProperties": false,
"hideMappings": false
}Che cosa mostra l'esempio:
SERVERMODEHEX: comandi e risposte sono cifre esadecimali.000000000006010400000020è una richiesta Modbus TCP: transazione0000, protocollo0000, lunghezza0006, dispositivo01, funzione04(leggere input register), dal registro0000,0020(32) registri.- Tag: entrambe le interrogazioni forniscono risposte con la stessa struttura. Tramite
tagogni risposta viene valutata solo dai pattern della sua interrogazione. - Pattern:
000000000043010440è l'intestazione della risposta (lunghezza0x43, dispositivo 1, funzione 4,0x40byte).\!48!salta 24 byte, cioè 6 registri;\^^^^^^^^cattura i 4 byte successivi. La potenza di rete si trova così dal registro 12 (0x000C). - Formato:
%swap32,%floatlegge i 4 byte come numero decimale (FLOAT32). Il contatore segnala il prelievo come positivo; in nomos pergridvale il punto di vista della casa, immissione positiva e prelievo negativo.%*-1inverte quindi il segno. SERVERTIMEOUT_IN_MSNONE: la connessione resta aperta, la raggiungibilità la segue.SPACING1000 lascia al gateway il tempo per la risposta prima che arrivi l'interrogazione successiva.- Porta modificabile: alla creazione la finestra richiede indirizzo IP e porta del gateway; la porta è precompilata con 502.
- Visualizzazione:
customFormatmostra la potenza di rete senza segno, in rosso in caso di prelievo e in verde in caso di immissione. - Feedback senza azioni: un contatore viene solo letto;
propertiesresta vuoto.
Per altri dispositivi Modbus modifichi nella sequenza numero del dispositivo, funzione (03 per gli holding register), registro iniziale e numero, e adatti lunghezza e numero di byte nell'intestazione del pattern. I registri interi con segno li legge con {%int16} o {%int32}.
UDP: KEBA KeContact P30
La wallbox KEBA KeContact P30 risponde tramite UDP sulla porta 7090 con JSON. Il profilo interroga stato e valori misurati, abilita la ricarica e imposta la corrente di carica.
json
{
"version": "1.0",
"author": "Muster Integration GmbH",
"description": "KEBA KeContact P30 (UDP)",
"manufacturer": "KEBA",
"model": "KeContact P30",
"platform": "KEBA",
"category": "Energy",
"type": "EV Charger",
"nomosCertified": false,
"compatibility": 50,
"className": "KEBA_P30",
"engineType": "",
"structure": {
"config": {
"ACTIVE": {"value": "YES", "editable": false},
"DEBUG": {"value": "NO", "editable": false},
"SERVERIP": {"value": "", "editable": {"type": "host", "default": ""}},
"SERVERPORT": {"value": "7090", "editable": false},
"LOCALPORT": {"value": "7090", "editable": false},
"SERVERPROTOCOL": {"value": "UDP", "editable": false},
"SERVERMODE": {"value": "ASCII", "editable": false},
"SERVERTIMEOUT_IN_MS": {"value": "NONE", "editable": false},
"SPACING": {"value": "200", "editable": false},
"HEARTBEATCMD": {"value": "REPORT2;30", "editable": false},
"HEARTBEATTIMEOUT": {"value": "2000", "editable": false},
"DISCONNECTEVENT": {"value": "REACHABLE=0", "editable": false},
"MATCHING": {"value": "FULL", "editable": false}
},
"commands": {
"REPORT2": {"sequence": "report 2", "parameterCount": 0},
"REPORT3": {"sequence": "report 3", "parameterCount": 0},
"SETENA": {"sequence": "ena \\#", "parameterCount": 1, "spacing": "2000"},
"SETCURR": {"sequence": "curr \\#", "parameterCount": 1}
},
"mappings": {
"REACHABLE": {"match": "\"ID\": \"\\*\",", "onChange": false, "condition": "{%in2|3}"},
"ENABLE_USER": {"match": "\"Enable user\": \\*,", "onChange": true, "condition": ""},
"PLUG": {"match": "\"Plug\": \\*,", "onChange": true, "condition": ""},
"MAX_CURR": {"match": "\"Max curr\": \\*,", "onChange": true, "condition": ""},
"P": {"match": "\"P\": \\*,", "onChange": true, "condition": "{%/1000}"}
}
},
"polling": {
"Status": {"interval": 10, "editableInterval": false, "command": "REPORT2"},
"Measurements": {"interval": 10, "editableInterval": false, "command": "REPORT3"}
},
"properties": {
"state": {"method": "set", "property": "ENA", "datatype": "bool", "sizeInBit": 1},
"switchon": {"method": "set", "property": "ENA", "value": 1, "datatype": "bool", "sizeInBit": 1, "uihidden": true},
"switchoff": {"method": "set", "property": "ENA", "value": 0, "datatype": "bool", "sizeInBit": 1, "uihidden": true},
"amperelimit": {"method": "set", "property": "CURR", "datatype": "int", "unit": "A", "min": 6, "max": 32, "internalMin": 6000, "internalMax": 32000, "stepValue": 1}
},
"propertiesMeta": {
"state": {"text": "Charging", "properties": ["state", "switchon", "switchoff"]},
"amperelimit": {"text": "Charging current", "properties": ["amperelimit"]}
},
"mappings": {
"state": {"method": "get", "property": "ENABLE_USER", "datatype": "bool", "defaultValue": false},
"plug": {"method": "get", "property": "PLUG", "datatype": "int", "valueList": [{"text": "Kein Kabel", "value": "0"}, {"text": "Kabel an Wallbox", "value": "1"}, {"text": "Kabel an Wallbox, verriegelt", "value": "3"}, {"text": "Fahrzeug verbunden", "value": "5"}, {"text": "Fahrzeug verbunden, verriegelt", "value": "7"}]},
"amperelimit": {"method": "get", "property": "MAX_CURR", "datatype": "int", "unit": "A", "min": 6, "max": 32, "internalMin": 6000, "internalMax": 32000},
"power": {"method": "get", "property": "P", "datatype": "float", "unit": "W", "customFormat": {"format": {"Math.round": {"var": "value"}}}},
"reachable": {"method": "get", "property": "REACHABLE", "datatype": "bool", "defaultValue": false}
},
"mappingsMeta": {
"state": {"text": "Charging", "properties": ["state"]},
"plug": {"text": "Cable Status", "properties": ["plug"]},
"amperelimit": {"text": "Charging current", "properties": ["amperelimit"]},
"power": {"text": "Power", "properties": ["power"]},
"reachable": {"text": "Reachable", "properties": ["reachable"]}
},
"actionTemplates": [
{"templateid": "switchon", "mapping": "switchon", "text": "Turn On", "icon": "toggle-on"},
{"templateid": "switchoff", "mapping": "switchoff", "text": "Turn Off", "icon": "toggle-off"},
{"templateid": "amperelimit", "mapping": "amperelimit", "text": "Charging current", "icon": "bolt"}
],
"triggerTemplates": [
{"templateid": "plug", "mapping": "plug", "text": "Cable Status", "icon": "plug", "valueList": [{"text": "Kein Kabel", "value": "0"}, {"text": "Kabel an Wallbox", "value": "1"}, {"text": "Kabel an Wallbox, verriegelt", "value": "3"}, {"text": "Fahrzeug verbunden", "value": "5"}, {"text": "Fahrzeug verbunden, verriegelt", "value": "7"}]},
{"templateid": "power", "mapping": "power", "text": "Power", "icon": "bolt"}
],
"hideProperties": true,
"hideMappings": true
}Che cosa mostra l'esempio:
LOCALPORT7090: la wallbox risponde sempre alla porta 7090; il Controller deve ricevere lì.- Raggiungibilità tramite UDP: poiché UDP non conosce connessioni,
HEARTBEATCMDinviareport 2ogni 30 secondi. Se entroHEARTBEATTIMEOUT(2 secondi) non arriva risposta,DISCONNECTEVENTsegnalaREACHABLE=0. UnCONNECTEVENTmanca di proposito: con UDP arriverebbe anche quando la wallbox è spenta. Invece il patternREACHABLEimposta il valore a1non appena arriva una risposta areport 2oreport 3({%in2|3}). - Comandi
SET: l'azione{"method": "set", "property": "ENA"}richiama il comandoSETENA,\#inena \#accoglie il valore. - state, switchon, switchoff: l'app commuta con
switchon/switchoff, le automazioni constate. - Scalatura: la wallbox calcola in mA, l'app in A.
internalMin/internalMax6000–32000 emin/max6–32 convertono in entrambe le direzioni, sia per l'azione sia per il feedback. - Formato: la wallbox segnala la potenza in mW;
{%/1000}dà W. - Testi:
Charging,Charging current,Cable StatusePowersono termini che nomos traduce. I testi dell'elenco di valori no; compaiono in ogni lingua così come nel profilo.
MQTT: dimmer con Tasmota
Un dimmer con il firmware Tasmota, collegato tramite il broker della competenza MQTT. Alla creazione inserisca come MQTT Topic il topic impostato in Tasmota.
json
{
"version": "1.0",
"author": "Muster Integration GmbH",
"description": "Dimmer mit Tasmota-Firmware",
"manufacturer": "Tasmota",
"model": "Dimmer",
"platform": "MQTT",
"category": "Lighting",
"type": "Lightbulb",
"nomosCertified": false,
"compatibility": 50,
"className": "",
"engineType": "MQTT",
"properties": {
"state": {"method": "command", "command": "power", "mqtt": "cmnd/%mqttTopic%/POWER", "datatype": "bool"},
"switchon": {"method": "command", "command": "power", "value": 1, "mqtt": "cmnd/%mqttTopic%/POWER", "datatype": "null", "uihidden": true},
"switchoff": {"method": "command", "command": "power", "value": 0, "mqtt": "cmnd/%mqttTopic%/POWER", "datatype": "null", "uihidden": true},
"level": {"method": "command", "command": "brightness", "mqtt": "cmnd/%mqttTopic%/Dimmer", "datatype": "int", "unit": "percent", "min": 0, "max": 100, "internalMin": 0, "internalMax": 100}
},
"propertiesMeta": {
"state": {"text": "State", "properties": ["state", "switchon", "switchoff"]},
"level": {"text": "Brightness", "properties": ["level"]}
},
"mappings": {
"state": {"method": "get", "property": "power", "mqtt": "stat/%mqttTopic%/RESULT", "mqttValue": "POWER", "datatype": "bool"},
"level": {"method": "get", "property": "dimmer", "mqtt": "stat/%mqttTopic%/RESULT", "mqttValue": "Dimmer", "datatype": "int", "unit": "percent", "min": 0, "max": 100, "internalMin": 0, "internalMax": 100},
"reachable": {"method": "get", "property": "reachable", "mqtt": "tele/%mqttTopic%/LWT", "mqttValue": "", "datatype": "bool", "defaultValue": true}
},
"mappingsMeta": {
"state": {"text": "State", "properties": ["state"]},
"level": {"text": "Brightness", "properties": ["level"]},
"reachable": {"text": "Reachable", "properties": ["reachable"]}
},
"actionTemplates": [
{"templateid": "switchon", "mapping": "switchon", "text": "Turn On", "icon": "toggle-on"},
{"templateid": "switchoff", "mapping": "switchoff", "text": "Turn Off", "icon": "toggle-off"},
{"templateid": "level", "mapping": "level", "text": "Brightness", "icon": "sun-o"}
],
"triggerTemplates": [
{"templateid": "state.on", "mapping": "state", "text": "Is Turned On", "value": "1", "icon": "toggle-on"},
{"templateid": "state.off", "mapping": "state", "text": "Is Turned Off", "value": "0", "icon": "toggle-off"},
{"templateid": "level", "mapping": "level", "text": "Brightness", "icon": "sun-o"}
],
"hideProperties": true,
"hideMappings": true
}Che cosa mostra l'esempio:
- Comandi: Tasmota riceve comandi su
cmnd/<Topic>/<Comando>.switchoninvia1acmnd/<Topic>/POWER,levelil valore acmnd/<Topic>/Dimmer. - Stesso comando, stesso topic:
state,switchoneswitchoffusano lo stessocommande quindi lo stesso topic. - Feedback da JSON: Tasmota risponde su
stat/<Topic>/RESULTad es. con{"POWER":"ON","Dimmer":60}.mqttValuePOWERoDimmersceglie il campo; con il tipo di datibool,ONvale come «acceso». - Raggiungibilità: Tasmota segnala su
tele/<Topic>/LWTOnlineoOffline.mqttValuevuoto prende l'intero payload. classNamevuoto: con MQTT ogni dispositivo riceve un proprio identificativo.
KNX: apparecchio di ventilazione a tre livelli
Un apparecchio di ventilazione che viene acceso e spento tramite KNX, accetta un livello da 0 a 3 e segnala la temperatura dell'aria di mandata e un allarme filtro. Il profilo non contiene indirizzi: Crea dispositivo apre la finestra della competenza KNX, dove assegna a ogni valore il suo indirizzo di gruppo.
json
{
"version": "1.0",
"author": "Muster Integration GmbH",
"description": "KNX Lüftungsgerät mit drei Stufen",
"manufacturer": "KNX",
"model": "Lüftung 3 Stufen",
"platform": "KNX",
"category": "Fans",
"type": "Fan",
"nomosCertified": false,
"compatibility": 50,
"className": "KNX",
"engineType": "KNX",
"properties": {
"state": {"method": "set", "property": "value", "datatype": "bool", "sizeInBit": 1, "filterDPT": ["1.001"]},
"switchon": {"method": "set", "property": "value", "value": 1, "datatype": "bool", "sizeInBit": 1, "uihidden": true},
"switchoff": {"method": "set", "property": "value", "value": 0, "datatype": "bool", "sizeInBit": 1, "uihidden": true},
"fanspeed": {"method": "set", "property": "value", "datatype": "int", "sizeInBit": 8, "filterDPT": ["5.010"], "valueList": [{"text": "Off", "value": "0"}, {"text": "Low", "value": "1"}, {"text": "Medium", "value": "2"}, {"text": "High", "value": "3"}]}
},
"propertiesMeta": {
"state": {"text": "State", "properties": ["state", "switchon", "switchoff"]},
"fanspeed": {"text": "Speed", "properties": ["fanspeed"]}
},
"mappings": {
"state": {"method": "get", "property": "value", "datatype": "bool", "sizeInBit": 1, "filterDPT": ["1.001"]},
"fanspeed": {"method": "get", "property": "value", "datatype": "int", "sizeInBit": 8, "filterDPT": ["5.010"], "valueList": [{"text": "Off", "value": "0"}, {"text": "Low", "value": "1"}, {"text": "Medium", "value": "2"}, {"text": "High", "value": "3"}]},
"temperature": {"method": "get", "property": "value", "datatype": "float", "unit": "temperature", "sizeInBit": 16, "filterDPT": ["9.001"]},
"filter": {"method": "get", "property": "value", "datatype": "bool", "sizeInBit": 1, "filterDPT": ["1.005"]}
},
"mappingsMeta": {
"state": {"text": "State", "properties": ["state"]},
"fanspeed": {"text": "Speed", "properties": ["fanspeed"]},
"temperature": {"text": "Temperature", "properties": ["temperature"]},
"filter": {"text": "Filter wechseln", "properties": ["filter"]}
},
"actionTemplates": [
{"templateid": "switchon", "mapping": "switchon", "text": "Turn On", "icon": "toggle-on"},
{"templateid": "switchoff", "mapping": "switchoff", "text": "Turn Off", "icon": "toggle-off"},
{"templateid": "fanspeed", "mapping": "fanspeed", "text": "Speed", "icon": "tachometer", "valueList": [{"text": "Off", "value": "0"}, {"text": "Low", "value": "1"}, {"text": "Medium", "value": "2"}, {"text": "High", "value": "3"}]}
],
"triggerTemplates": [
{"templateid": "state.on", "mapping": "state", "text": "Is Turned On", "value": "1", "icon": "toggle-on"},
{"templateid": "state.off", "mapping": "state", "text": "Is Turned Off", "value": "0", "icon": "toggle-off"},
{"templateid": "temperature", "mapping": "temperature", "text": "Temperature", "icon": "thermometer"},
{"templateid": "filter", "mapping": "filter", "text": "Filter wechseln", "value": "1", "icon": "exclamation-triangle"}
],
"hideProperties": true,
"hideMappings": true
}Che cosa mostra l'esempio:
- Campi degli indirizzi: da
propertiesMetanascono i campi State e Speed per gli indirizzi di gruppo per commutare, damappingsMetai campi per gli indirizzi di stato di accensione, livello, temperatura e allarme filtro. - Dimensione e tipo di punto dati:
sizeInBit1 per commutare (DPT 1.001) e per l'allarme (DPT 1.005), 8 per il livello (DPT 5.010), 16 per la temperatura (DPT 9.001).filterDPTpropone durante l'assegnazione solo gli indirizzi di gruppo adatti. - Elenco di valori come elenco dei valori ammessi: l'azione
fanspeedaccetta solo da0a3. - Nessun feedback
reachable: la raggiungibilità segue la connessione KNX. - Modelli: l'allarme filtro è creato come trigger con il valore fisso
1, quindi l'automazione non richiede alcun valore. - Testo senza traduzione: «Filter wechseln» non è un termine nomos e compare così in ogni lingua.
Luce, dimmer, ombreggiatura, termostato e molti sensori sono già inclusi nella competenza KNX; un profilo proprio conviene per i dispositivi che lì mancano.