Skip to content

Voorbeeldprofielen ​

De volgende profielen tonen elk één techniek aan de hand van een echt apparaat: HTTP, TCP (Modbus), UDP, MQTT en KNX. Ze zijn ingekort, zodat het belangrijkste zichtbaar blijft, en door de Profiel Editor zonder bevindingen gecontroleerd. De volledige profielen van deze apparaten vindt u in de Online bibliotheek. De opbouw lichten Profielformaat en CommandServer toe.

Zo probeert u een voorbeeld uit: sla de JSON-tekst op als bestand met de extensie .json, upload het onder Skills → Add-ons → Profielen met Handmatig uploaden en maak met Apparaat aanmaken een apparaat aan.

HTTP: go-eCharger ​

De wallbox go-eCharger heeft een HTTP-interface die JSON levert (API v2, lokaal in te schakelen in de go-e-app). Het profiel vraagt elke 30 seconden de status op. Het kan het laden afdwingen of blokkeren en de laadstroom instellen.

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
}

Wat het voorbeeld laat zien:

  • CMDPREFIX /api/ staat voor elke opdracht. STATUS vraagt dus http://<IP>/api/status?filter=… op, SETAMA met de waarde 16 roept /api/set?ama=16 aan.
  • STARTUPCMD vraagt de status al bij de start op, niet pas na 30 seconden.
  • Antwoordpatronen voor JSON: "\"car\":\\*," vangt de waarde tussen "car": en de volgende komma. De polling is dezelfde als in het volledige profiel van de online bibliotheek en noemt meer velden dan dit voorbeeld gebruikt. Over het laatste veld van een JSON-object, zie Patronen.
  • Formaat: {%/1000.00} rekent Wh om naar kWh met twee decimalen; {%/1000} zou hele kWh geven.
  • Berekende waarde: CHARGING is 1 als CAR de waarde 2 (laadt) heeft.
  • Waardenlijsten: powerstate mag alleen 0, 1 of 2 aannemen. Dezelfde lijst staat in het sjabloon, zodat automatiseringen een keuze tonen.
  • Polling met editableInterval: bij het aanmaken kunt u het interval wijzigen.
  • Bereikbaarheid: elke geslaagde polling meldt REACHABLE=1, elke mislukte REACHABLE=0.

TCP: Eastron SDM120 via Modbus TCP ​

De elektriciteitsmeter Eastron SDM120 spreekt Modbus RTU. Een Modbus-TCP-gateway zet dat om naar het netwerk. Het profiel leest spanning en netvermogen elke 5 seconden en de meterstanden elke minuut.

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
}

Wat het voorbeeld laat zien:

  • SERVERMODE HEX: opdrachten en antwoorden zijn hexadecimale cijfers. 000000000006010400000020 is een Modbus-TCP-verzoek: transactie 0000, protocol 0000, lengte 0006, apparaat 01, functie 04 (input registers lezen), vanaf register 0000, 0020 (32) registers.
  • Tags: beide pollings leveren gelijk opgebouwde antwoorden. Via tag evalueert elk antwoord alleen de patronen van zijn eigen polling.
  • Patronen: 000000000043010440 is de kop van het antwoord (lengte 0x43, apparaat 1, functie 4, 0x40 bytes). \!48! slaat 24 bytes over, dus 6 registers; \^^^^^^^^ vangt de volgende 4 bytes. Het netvermogen staat daarmee vanaf register 12 (0x000C).
  • Formaat: %swap32,%float leest de 4 bytes als decimaal getal (FLOAT32). De meter meldt afname positief. In nomos geldt voor grid het standpunt van het huis: teruglevering positief en afname negatief. %*-1 draait daarom het teken om.
  • SERVERTIMEOUT_IN_MS NONE: de verbinding blijft open en de bereikbaarheid volgt haar. SPACING 1000 geeft de gateway tijd voor het antwoord voordat de volgende polling komt.
  • Bewerkbare poort: bij het aanmaken vraagt het dialoogvenster het IP-adres en de poort van de gateway. De poort is vooraf ingevuld met 502.
  • Weergave: customFormat toont het netvermogen zonder teken, rood bij afname en groen bij teruglevering.
  • Terugmeldingen zonder acties: een meter wordt alleen gelezen; properties blijft leeg.

Voor andere Modbus-apparaten wijzigt u apparaatnummer, functie (03 voor holding registers), startregister en aantal in de sequentie. Pas ook lengte en aantal bytes in de kop van het patroon aan. Registers met gehele getallen met teken leest u met {%int16} of {%int32}.

UDP: KEBA KeContact P30 ​

De wallbox KEBA KeContact P30 antwoordt via UDP op poort 7090 met JSON. Het profiel vraagt status en meetwaarden op, geeft het laden vrij en stelt de laadstroom in.

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
}

Wat het voorbeeld laat zien:

  • LOCALPORT 7090: de wallbox antwoordt altijd op poort 7090; de controller moet daar ontvangen.
  • Bereikbaarheid via UDP: omdat UDP geen verbinding kent, verzendt HEARTBEATCMD elke 30 seconden report 2. Komt er binnen HEARTBEATTIMEOUT (2 seconden) geen antwoord, dan meldt DISCONNECTEVENT REACHABLE=0. Een CONNECTEVENT ontbreekt bewust: bij UDP zou het ook komen als de wallbox uit staat. In plaats daarvan zet het patroon REACHABLE de waarde op 1 zodra er een antwoord op report 2 of report 3 komt ({%in2|3}).
  • SET-opdrachten: de actie {"method": "set", "property": "ENA"} roept de opdracht SETENA aan; \# in ena \# neemt de waarde op.
  • state, switchon, switchoff: de app schakelt met switchon/switchoff, automatiseringen met state.
  • Schaling: de wallbox rekent in mA, de app in A. internalMin/internalMax 6000–32000 en min/max 6–32 rekenen in beide richtingen om, voor de actie en voor de terugmelding.
  • Formaat: de wallbox meldt het vermogen in mW; {%/1000} geeft W.
  • Teksten: Charging, Charging current, Cable Status en Power zijn termen die nomos vertaalt. De teksten van de waardenlijst niet; die verschijnen in elke taal zoals in het profiel.

MQTT: dimmer met Tasmota ​

Een dimmer met de firmware Tasmota, gekoppeld via de broker van de MQTT-skill. Bij het aanmaken vult u als MQTT Topic het topic in dat in Tasmota is ingesteld.

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
}

Wat het voorbeeld laat zien:

  • Opdrachten: Tasmota ontvangt opdrachten op cmnd/<Topic>/<opdracht>. switchon verzendt 1 naar cmnd/<Topic>/POWER, level de waarde naar cmnd/<Topic>/Dimmer.
  • Zelfde opdracht, zelfde topic: state, switchon en switchoff gebruiken hetzelfde command en daarom hetzelfde topic.
  • Terugmeldingen uit JSON: Tasmota antwoordt op stat/<Topic>/RESULT met bijv. {"POWER":"ON","Dimmer":60}. mqttValue POWER of Dimmer kiest het veld; ON geldt bij het datatype bool als "aan".
  • Bereikbaarheid: Tasmota meldt op tele/<Topic>/LWT Online of Offline. Een lege mqttValue neemt de hele payload.
  • className leeg: bij MQTT krijgt elk apparaat zijn eigen ID.

KNX: ventilatie-unit met drie standen ​

Een ventilatie-unit die via KNX wordt in- en uitgeschakeld, een stand van 0 tot 3 aanneemt en de toevoerluchttemperatuur en een filteralarm meldt. Het profiel bevat geen adressen: Apparaat aanmaken opent het dialoogvenster van de KNX-skill. Daar wijst u elke waarde haar groepsadres toe.

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
}

Wat het voorbeeld laat zien:

  • Adresvelden: uit propertiesMeta ontstaan de velden State en Speed voor de groepsadressen om te schakelen, uit mappingsMeta de velden voor de statusadressen van toestand, stand, temperatuur en filteralarm.
  • Grootte en datapunttype: sizeInBit 1 voor schakelen (DPT 1.001) en het alarm (DPT 1.005), 8 voor de stand (DPT 5.010), 16 voor de temperatuur (DPT 9.001). filterDPT biedt bij het toewijzen alleen passende groepsadressen aan.
  • Waardenlijst als toegestane lijst: de actie fanspeed accepteert alleen 0 tot en met 3.
  • Geen terugmelding reachable: de bereikbaarheid volgt de KNX-verbinding.
  • Sjablonen: het filteralarm is als trigger met de vaste waarde 1 aangemaakt. De automatisering vraagt dus geen waarde.
  • Tekst zonder vertaling: "Filter wechseln" is geen nomos-term en verschijnt in elke taal zo.

Licht, dimmer, zonwering, thermostaat en veel sensoren heeft de KNX-skill al aan boord. Een eigen profiel loont voor apparaten die daar ontbreken.