Starting to use WoT stuff to make AID better

This commit is contained in:
Daniel Kluge
2023-12-04 11:06:13 +01:00
parent 70645011a3
commit 43daad147f
+82 -10
View File
@@ -27,22 +27,78 @@ export type InterfaceMetadata = {
events: InterfaceEvent[];
}
/*
So here are some changes to the original spec:
IMO it is really redundant to have so many attributes for our property in the AID.
These attributes like min and max should be set on the actual attribute, not in the AID.
The AID should only contain the information about the endpoint and the type
(because the answer from the asset needs to be casted).
The WoT spec also has way less information for the elements and their forms.
Also their forms are using all the same interface (which is a good idea).
Multiple forms (like for read and write) can be added to the same property.
And last but not least: maybe we want some kind of transformation for the data.
Like if the answer we're looking for is part of a JSON object, we can use a JSONPath to get the value.
That does not seem to be included in the WoT so maybe add it to the AID?
As the WoT currently focuses on HTTP, CoAP and MQTT, and the AID focuses on HTTP, MQTT and Modbus
we focus on HTTP and MQTT for now.
It should be pretty easy to extend this.
So let's derive some of this from the WoT and see what we can achieve.
*/
export type InterfaceProperty = {
title?: string;
observable?: boolean;
forms: InterfacePropertyForm;
type?: string;
enum?: string[];
// enum?: string[];
const?: any;
default?: any;
//unit?: string;
minimum?: number; // TODO muss das gecapped werden?
maximum?: number;
minLength?: number;
maxLength?: number;
//items?: any[];
minItems?: number;
maxItems?: number;
// unit?: string;
// minimum?: number; // TODO muss das gecapped werden?
// maximum?: number;
// minLength?: number;
// maxLength?: number;
// items?: any[];
// minItems?: number;
// maxItems?: number;
}
type FormOp = "readproperty" |
"writeproperty" |
"observeproperty" |
"unobserveproperty" |
"invokeaction" |
"subscribeevent" |
"unsubscribeevent" |
"readallproperties" |
"writeallproperties" |
"readmultipleproperties" |
"writemultipleproperties";
type FormOpHTTP = "readproperty" |
"writeproperty" |
"invokeaction" |
"readallproperties" |
"writeallproperties" |
"readmultipleproperties" |
"writemultipleproperties";
type IForm = {
href: string;
op: FormOp;
contentType: string;
}
type IFormHTTP = IForm & {
"htv:methodName": "GET" | "PUT" | "POST" | "DELETE" | "PATCH";
"htv:headers": {
"htv:fieldName": string;
"htv:fieldValue": string;
}[];
op: FormOpHTTP;
}
export type InterfacePropertyForm = InterfacePropertyFormHTTP | InterfacePropertyFormMQTT | InterfacePropertyFormModbus;
@@ -79,7 +135,23 @@ type InterfacePropertyFormMQTT = InterfacePropertyFormBase & {
/** @alpha */
export type InterfaceAction = {
// TODO
title: string;
}
type InterfaceActionBase = {
title: string;
type: string;
const?: boolean;
}
type InterfaceActionSync = {
}
type InterfaceActionAsync = {
}
/** @alpha */