eniris.nl

DB Description Language 101

Op deze pagina kunt u documentatie terugvinden van onze dashboarddescriptions. Deze worden geprogrammeerd in Pistron. 

 

Aggregatoren

delayedRange

Line-chart-widget

Afronden kan door in de “options” rechtstreeks te schrijven:

				
					 "options": {
		"valueFormat": ".1~f"
}
				
			

Afronden van values

In een simple value widget kun je via options het aantal digits specifieren. Dit is niet het geval bij al de rest, maar als uitzondering hierop mag het volgende niet gebruikt worden bij “custom-function”.  –> $.formatNumber(format, nr)

BV. afronden op 1 decimaal: $.formatNumber(‘,.1f’, value);

bv:

$.formatNumber(f, nr)  = d3.format(f)(nr)

d3.format(“.0%”)(0.123); // rounded percentage, “12%” d3.format(“($.2f”)(-3.5); // localized fixed-point currency, “(£3.50)” d3.format(“+20″)(42); // space-filled and signed, ” +42″ d3.format(“.^20”)(42); // dot-filled and centered, “………42………” d3.format(“.2s”)(42e6); // SI-prefix with two significant digits, “42M” d3.format(“#x”)(48879); // prefixed lowercase hexadecimal, “0xbeef” d3.format(“,.2r”)(4223); // grouped thousands with two significant digits, “4,200”

,

Simple value widget

Een tijdsreekswaarde tonen doe je met het simple value widget. Deze waarde kan het laatste punt zijn uit een tijdsreeks, een bewerking van een datapunt, …

De simple value widget heeft als input ‘data’.
Hieronder ziet u een voorbeeld waarbij de data wordt bewerkt met een custom function.
De functie “f” heeft als input data uit een tijdsreeks en extraInputs (een constante waarde). 

 

				
					{
"type": "simple-value-widget",
"class": "float-right h4",
"options": {
    "prefix": {
        "parameter": "derivativePrefix"
    },
    "suffix": {
        "parameter": "derivativeSuffix"
    },
    "digits": 0,
    "undefined": "-"
},
"data": {
    "function": "custom",
    "data": [{
            "aggregator": "delayedValue",
            "data": {
                "parameter": "electricityPowerImport"
            }
        }
    ],
    "extraInputs": [{
            "parameter": "unit"
        }
    ],
    "f": "(importRate, unit) => importRate === null? null : unit * importRate"
}
}
				
			

HTML invoegen, een constante weergeven

Om een waarde te tonen die niet uit tijdreeksdata komt (bv. de constante capaciteit van een device dat opgeslagen zit in devices.json) dien je op volgende manier te coderen:

Je haalt de constante op door de juiste devices via input in te laden.
Je gebruikt een custom-function om de waarde terug te geven. 

 

				
					{
	"type": "multi-column-card",
	"class": "col-sm-6 col-xl-4",
	"card-name": "alarm widgets",
	"card-header-style": "background-color: FireBrick;",
	"header": "Community",
	"card-header-class": "h4 m-0 font-weight-bold",
	"columns": [{
		"class": "col-4 align-self-center text-center",
		"elements": [
			"<i class="material-icons " style="font-size:60px">bolt</i>"
		]
	}, {
		"class": "col-8 align-self-center",
		"elements": [{
				"custom-function": "(devs) =&gt; { let a = 0; for(let i=0; i&lt;devs.length; i++) { let b = Number(devs[i].capacity); if(isNaN(b)==false){a+=b;}  }  return  &#039;<div class="h5 mb-0">Totale capaciteit:\t' + a+ ' kWh</div>';}",
				"inputs": [{
					"parameter": "devices"
				}]
			},
			"<div><br></div>"


		]
	}]
}
				
			

Textoverlay / valueoverlay plattegrond

Tutorial om een plattegrond af te leveren als SVG-file. De SVG-file wordt aangemaakt via inkscape: https://eniris.be/nl/inkscape/

 

In de description kunnen keys vervangen worden door hun values. Deze keys kun je niet revolven op basis van data. De values wel.

				
					{
    "type": "svg-widget",
    "svgUrl": "https://insights.eniris.be/afbeelding.svg",
    "options": {
        "parameterMap": {
            "custom-function": "(...data) =&gt; { let o = {}; for (let i = 0; i&lt;2; i++) {o[&#039;$&#039;+i+&#039;_MESSAGE$&#039;]=&#039;&#039;; o[&#039;$&#039;+i+&#039;_UNIT$&#039;]=&#039;&#039;; o[&#039;$&#039;+i+&#039;_VALUE$&#039;]=&#039;&#039;;} data = data.flat(); for (let i = 0; i { return imp&gt;exp?imp:exp;}"

                    }

                }

            ]

        }
    }

}
				
			

 

Alarmmanagement

Kenmerken alarmwidget:

> “type” : “alarm-management”  –> het gaat hier om een widget voor alarmen
> devices: hier definieer je welke gebouwen in aanmerkingen komen om een alarm voor in te stellen.
> template (hier bundel je de alarmafhandeling voor type van toestel)
>> id
>> label: Toestellen van het type ‘label’. Bv. toestellen van het type energiemeters.
>> deviceFilter: hiermee filter je op de toestellen die in aanmerking komen voor deze afhandeling.
>> alarms: uitwerking van de volledige alarmafhandeling.

				
					{
	"type": "alarm-management",
	"class": "col-12",
	"devices": {
		"parameter": "devices"
	},
	"templates": [{
			"id": "energyandtemp",
			"label": "Energie- of temperatuursmeter",
			"deviceFilter": "(devs) =&gt; { let out= []; let deviceTypes =['water', 'electricity', 'heat', 'gas']; for (let i=0; i JSON.parse(d.properties.get(deviceTypes[i])).map(r =&gt; ({'label': d.properties.get('name')+ ' - '+ r.subId+' - '+r.name, 'device': d, 'id': r.dbId + ' ' + r.subId})).flat()))} return out.flat();}",
			"alarms": [...]
		}

	]
}
				
			

‘Alarms’ bestaat uit een opsomming van alarmtypes.

Per alarmtype wordt gedefinieerd:
> id
> label: de naam voor het type alarm
> parameters: de parameters die je wenst te overwaken
> allowedActions: de acties die gekoppeld zijn bij het overscheiden van dit alarmtype

 

				
					"alarms": [{
					"id": "afwijkingtovdrempelwaarde",
					"label": "Afwijking t.o.v. drempelwaarde",

					"parameters": [{
						"id": "parameter",
						"label": "Parameter",
						"inputType": "select",

						"options": [{
								"label": "Temperature Flow (\u00B0C)",
								"value": "Th"
							}, {
								"label": "Temperature Return (\u00B0C)",
								"value": "Tr"
							}

						]
					}, {
						"id": "typeAfwijking",
						"label": "Type afwijking",
						"inputType": "select",
						"options": [{
							"label": "Groter dan",
							"value": "groterDan"
						}]
					}, {
						"id": "waarde",
						"label": "Drempelwaarde",
						"inputType": "number"

					}],
					"allowedActions": [...]
				}

			]
		}
				
			

allowedActions

Dit is een opsomming van manieren waarop het alarm wordt verstuurd. 


				
					"allowedActions": [{
						"id": "email",
						"label": "Email",
						"parameters": [{
							"id": "contacts",
							"label": "Ontvangers",
							"inputType": "chip-list-open"
						}, {
							"id": "language",
							"label": "Taal",
							"inputType": "select",
							"options": [{
								"label": "Nederlands",
								"value": "dutch"
							}]
						}, {
							"id": "interval",
							"label": "Om de hoeveel tijd een herinnering sturen zolang het probleem niet is opgelost?",
							"inputType": "select",
							"options": [{
								"label": "Iedere dag",
								"value": "D"
							}]
						}]
					}, {
						"id": "sms",
						"label": "SMS",
						"parameters": [{
							"id": "contacts",
							"label": "Ontvangers",
							"inputType": "chip-list-open"
						}, {
							"id": "language",
							"label": "Taal",
							"inputType": "select",
							"options": [{
								"label": "Nederlands",
								"value": "dutch"
							}]
						}]
					}]
				
			

In zijn geheel:

				
					{
	"type": "alarm-management",
	"class": "col-12",
	"devices": {
		"parameter": "devices"
	},
	"templates": [{
			"id": "energyandtemp",
			"label": "Energie- of temperatuursmeter",
			"deviceFilter": "(devs) =&gt; { let out= []; let deviceTypes =['water', 'electricity', 'heat', 'gas']; for (let i=0; i JSON.parse(d.properties.get(deviceTypes[i])).map(r =&gt; ({'label': d.properties.get('name')+ ' - '+ r.subId+' - '+r.name, 'device': d, 'id': r.dbId + ' ' + r.subId})).flat()))} return out.flat();}",
			"alarms": [{
					"id": "afwijkingtovdrempelwaarde",
					"label": "Afwijking t.o.v. drempelwaarde",

					"parameters": [{
						"id": "parameter",
						"label": "Parameter",
						"inputType": "select",

						"options": [{
								"label": "Temperature Flow (\u00B0C)",
								"value": "Th"
							}, {
								"label": "Temperature Return (\u00B0C)",
								"value": "Tr"
							}

						]
					}, {
						"id": "typeAfwijking",
						"label": "Type afwijking",
						"inputType": "select",
						"options": [{
							"label": "Groter dan",
							"value": "groterDan"
						}]
					}, {
						"id": "waarde",
						"label": "Drempelwaarde",
						"inputType": "number"

					}],
					"allowedActions": [{
						"id": "email",
						"label": "Email",
						"parameters": [{
							"id": "contacts",
							"label": "Ontvangers",
							"inputType": "chip-list-open"
						}, {
							"id": "language",
							"label": "Taal",
							"inputType": "select",
							"options": [{
								"label": "Nederlands",
								"value": "dutch"
							}]
						}, {
							"id": "interval",
							"label": "Om de hoeveel tijd een herinnering sturen zolang het probleem niet is opgelost?",
							"inputType": "select",
							"options": [{
								"label": "Iedere dag",
								"value": "D"
							}]
						}]
					}, {
						"id": "sms",
						"label": "SMS",
						"parameters": [{
							"id": "contacts",
							"label": "Ontvangers",
							"inputType": "chip-list-open"
						}, {
							"id": "language",
							"label": "Taal",
							"inputType": "select",
							"options": [{
								"label": "Nederlands",
								"value": "dutch"
							}]
						}]
					}]
				}

			]
		}

	]
}
				
			

Contactez-nous