Skip to content

Exemples de profils ​

Les profils suivants montrent chacun une technique sur un appareil réel : HTTP, TCP (Modbus), UDP, MQTT et KNX. Ils sont abrégés pour que l'essentiel reste visible, et vérifiés sans résultat par l'Éditeur de profils. Vous trouverez les profils complets de ces appareils dans la Bibliothèque en ligne. La structure est expliquée sous Format de profil et CommandServer.

Pour essayer un exemple : enregistrez le texte JSON dans un fichier avec l'extension .json, chargez-le sous Compétences → Add-ons → Profils avec Téléchargement manuel et créez un appareil avec Créer un appareil.

HTTP : go-eCharger ​

La borne de recharge go-eCharger dispose d'une interface HTTP qui fournit du JSON (API v2, à activer en local dans l'app go-e). Le profil interroge l'état toutes les 30 secondes et peut forcer ou bloquer la charge et définir le courant de charge.

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
}

Ce que montre l'exemple :

  • CMDPREFIX /api/ précède chaque commande. STATUS appelle donc http://<IP>/api/status?filter=…, SETAMA avec la valeur 16 appelle /api/set?ama=16.
  • STARTUPCMD interroge l'état dès le démarrage, et pas seulement après 30 secondes.
  • Motifs de réponse pour JSON : "\"car\":\\*," capture la valeur entre "car": et la virgule suivante. L'interrogation est la même que dans le profil complet de la Bibliothèque en ligne et demande plus de champs que cet exemple n'en utilise. Pour le dernier champ d'un objet JSON, voir Motifs.
  • Format : {%/1000.00} convertit les Wh en kWh avec deux décimales ; {%/1000} donnerait des kWh entiers.
  • Valeur calculée : CHARGING vaut 1 lorsque CAR a la valeur 2 (en charge).
  • Listes de valeurs : powerstate ne peut prendre que 0, 1 ou 2 ; la même liste figure dans le modèle, afin que les automatisations affichent un choix.
  • Interrogation avec editableInterval : l'intervalle peut être modifié à la création.
  • Joignabilité : chaque interrogation réussie signale REACHABLE=1, chaque interrogation échouée REACHABLE=0.

TCP : Eastron SDM120 via Modbus TCP ​

Le compteur électrique Eastron SDM120 utilise Modbus RTU ; une passerelle Modbus TCP le transpose sur le réseau. Le profil lit la tension et la puissance réseau toutes les 5 secondes et les index de compteur toutes les minutes.

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
}

Ce que montre l'exemple :

  • SERVERMODE HEX : les commandes et les réponses sont des chiffres hexadécimaux. 000000000006010400000020 est une requête Modbus TCP : transaction 0000, protocole 0000, longueur 0006, appareil 01, fonction 04 (lire des registres d'entrée), à partir du registre 0000, 0020 (32) registres.
  • Tags : les deux interrogations fournissent des réponses de même structure. Grâce à tag, chaque réponse n'est évaluée que par les motifs de son interrogation.
  • Motifs : 000000000043010440 est l'en-tête de la réponse (longueur 0x43, appareil 1, fonction 4, 0x40 octets). \!48! saute 24 octets, soit 6 registres ; \^^^^^^^^ capture les 4 octets suivants. La puissance réseau se trouve ainsi à partir du registre 12 (0x000C).
  • Format : %swap32,%float lit les 4 octets comme nombre décimal (FLOAT32). Le compteur signale le soutirage en positif ; dans nomos, grid est vu du point de vue de la maison, injection positive et soutirage négatif. %*-1 inverse donc le signe.
  • SERVERTIMEOUT_IN_MS NONE : la connexion reste ouverte, la joignabilité la suit. SPACING 1000 laisse à la passerelle le temps de répondre avant l'interrogation suivante.
  • Port modifiable : à la création, la boîte de dialogue demande l'adresse IP et le port de la passerelle ; le port est pré-rempli avec 502.
  • Affichage : customFormat affiche la puissance réseau sans signe, en rouge pour le soutirage et en vert pour l'injection.
  • Retours sans actions : un compteur est seulement lu ; properties reste vide.

Pour d'autres appareils Modbus, modifiez dans la séquence le numéro d'appareil, la fonction (03 pour les registres de maintien), le registre de départ et le nombre, et adaptez la longueur et le nombre d'octets dans l'en-tête du motif. Lisez les registres entiers signés avec {%int16} ou {%int32}.

UDP : KEBA KeContact P30 ​

La borne de recharge KEBA KeContact P30 répond via UDP sur le port 7090 avec du JSON. Le profil interroge l'état et les valeurs mesurées, autorise la charge et définit le courant de charge.

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
}

Ce que montre l'exemple :

  • LOCALPORT 7090 : la borne de recharge répond toujours sur le port 7090 ; le contrôleur doit recevoir sur ce port.
  • Joignabilité via UDP : comme UDP ne connaît pas de connexion, HEARTBEATCMD envoie report 2 toutes les 30 secondes. Si aucune réponse n'arrive dans le délai HEARTBEATTIMEOUT (2 secondes), DISCONNECTEVENT signale REACHABLE=0. Il n'y a volontairement pas de CONNECTEVENT : en UDP, il arriverait même si la borne de recharge est éteinte. À la place, le motif REACHABLE met la valeur à 1 dès qu'une réponse à report 2 ou report 3 arrive ({%in2|3}).
  • Commandes SET : l'action {"method": "set", "property": "ENA"} appelle la commande SETENA, \# dans ena \# reçoit la valeur.
  • state, switchon, switchoff : l'app commute avec switchon/switchoff, les automatisations avec state.
  • Mise à l'échelle : la borne de recharge calcule en mA, l'app en A. internalMin/internalMax 6000–32000 et min/max 6–32 convertissent dans les deux sens, pour l'action comme pour le retour.
  • Format : la borne de recharge signale la puissance en mW ; {%/1000} donne des W.
  • Textes : Charging, Charging current, Cable Status et Power sont des termes que nomos traduit. Ce n'est pas le cas des textes de la liste de valeurs ; ils apparaissent dans chaque langue tels qu'ils figurent dans le profil.

MQTT : variateur avec Tasmota ​

Un variateur avec le firmware Tasmota, connecté via le broker du skill MQTT. À la création, saisissez comme MQTT Topic le topic configuré dans 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
}

Ce que montre l'exemple :

  • Commandes : Tasmota reçoit les commandes sur cmnd/<Topic>/<Commande>. switchon envoie 1 à cmnd/<Topic>/POWER, level envoie la valeur à cmnd/<Topic>/Dimmer.
  • Même commande, même topic : state, switchon et switchoff utilisent le même command et donc le même topic.
  • Retours depuis JSON : Tasmota répond sur stat/<Topic>/RESULT avec par ex. {"POWER":"ON","Dimmer":60}. mqttValue POWER ou Dimmer choisit le champ ; avec le type de données bool, ON est considéré comme « marche ».
  • Joignabilité : Tasmota signale Online ou Offline sur tele/<Topic>/LWT. Un mqttValue vide prend toute la charge utile.
  • className vide : avec MQTT, chaque appareil reçoit son propre identifiant.

KNX : unité de ventilation à trois vitesses ​

Une unité de ventilation qui est allumée et éteinte via KNX, accepte une vitesse de 0 à 3 et signale la température de l'air soufflé ainsi qu'une alarme de filtre. Le profil ne contient aucune adresse : Créer un appareil ouvre la boîte de dialogue du skill KNX, dans laquelle vous attribuez à chaque valeur son adresse de groupe.

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
}

Ce que montre l'exemple :

  • Champs d'adresse : propertiesMeta donne les champs State et Speed pour les adresses de groupe de commande, mappingsMeta les champs pour les adresses d'état de l'état, de la vitesse, de la température et de l'alarme de filtre.
  • Taille et type de point de données : sizeInBit 1 pour la commutation (DPT 1.001) et l'alarme (DPT 1.005), 8 pour la vitesse (DPT 5.010), 16 pour la température (DPT 9.001). filterDPT ne propose lors de l'attribution que les adresses de groupe adaptées.
  • Liste de valeurs comme liste d'autorisation : l'action fanspeed n'accepte que 0 à 3.
  • Pas de retour reachable : la joignabilité suit la connexion KNX.
  • Modèles : l'alarme de filtre est créée comme déclencheur avec la valeur fixe 1 ; l'automatisation ne demande donc aucune valeur.
  • Texte sans traduction : « Filter wechseln » n'est pas un terme nomos et apparaît tel quel dans chaque langue.

Le skill KNX fournit déjà la lumière, le variateur, le store, le thermostat et de nombreux capteurs ; un profil propre est utile pour les appareils qui n'y figurent pas.