@trevor_hms
Apologies on the delay preparing this. In order to do what you would like to do, we are going to need to interface with the BASIC scripting engine inside of the eWON. By using the scripting engine we are able to directly add, delete or update new and existing tags.
It is important to note however that of the two examples below, only one is directly integrated into the Flexy meaning you do not have to update anything on the Flexy. I personally recommend the pre-written solution as it results in far shorter API calls.
Option 1 - Embedded Functions:
In this solution I have pre-written 3 functions that need to be imported into your Flexy. These functions can exist anywhere in the Flexy, though I recommend creating a section specifically for API scripts.
Create Tag:
The create tag script accepts a tag name, address and an existing tag to mirror from. It is important to note that this function directly depends on another tag to clone existing information into. This negates the need to pass in the IOServer name, Topic and other small details, though please note that you can pass these as well.
In this example, the new tag will receive all properties (IOServer name, topic, alarming etc) from the existingTag parameter.
REM - Create a new tag in your eWON (usage guide on hms.how)
REM - PARAMS
REM - tagname - Name of the new tag to create
REM - address - The address of the tag
REM - existingTag - The existing tag to copy
REM - #########################################
FUNCTION createNewTag($tagname$, $address$, $existingTag$)
SETSYS TAG, "LOAD", $existingTag$
SETSYS TAG, "NAME", $tagname$
SETSYS TAG, "Address", $address$
SETSYS TAG, "SAVE"
CFGSAVE
ENDFN
Delete Tag:
As the name states, this function simply deletes a tag by the passed tag name.
REM - Delete a tag by the tag name
REM - PARAMS
REM - tagname - Name of tag to delete
REM - ########################################
FUNCTION deleteTag($tagname$)
SETSYS TAG, "LOAD", $tagname$
SETSYS TAG, "DODelete", 1
SETSYS TAG, "SAVE"
CFGSAVE
ENDFN
Modify Tag:
The tag modification function accepts three parameters, the tag name, the parameter to modify and finally the new value. So for example, say I wanted to update the address of a tag, I would simply call:
@modifyTag('myTag', 'Address', 'NewAddress')
REM - Modify a tag by the tag name
REM - PARAMS
REM - tagname - The tag name to modify
REM - modify - The parameter to edit
REM - newVal - The value to update the modify parameter to
REM - #############################################
FUNCTION modifyTag($tagname$, $modify$, $newVal$)
SETSYS TAG, "LOAD", $tagname$
SETSYS TAG, $modify, $newVal$
SETSYS TAG, "SAVE"
CFGSAVE
ENDFN
API Integration:
I can imagine by this point you are wondering how does this help with the API, well lets discuss that. The M2Web API offers an script execution endpoint. This endpoint is: rcgi.bin/ExeScriptForm?
The script form can take raw BASIC commands and executes them on the Flexy. Here is an example API call to execute the add tag function from above:
https://m2web.talk2m.com/t2mapi/get/yourewon/rcgi.bin/ExeScriptForm?Command1=@createNewTag("tagname", "address", "existing")&t2mdeveloperid=yourid&t2maccount=account&t2mpassword=password&t2mdeviceusername=adm&t2mdeviceusername=password
In order to make this easier to test, here is a Postman entry that you can simply import into postman and update the values inside of the body.
Download: M2Web API.postman_collection.json (1.4 KB)
Option 2 - Directly Calling Scripts:
As previously mentioned, the second solution is essentially the same as the first however instead of calling a single function we have to pass each parameter manually in the API call. I will not go over the commands again as those were discussed earlier, however here is an example API call to update the tag.
https://m2web.talk2m.com/t2mapi/get/yourewon/rcgi.bin/ExecScriptForm?Command1=SETSYS "TAG", "LOAD", "YourTag"&Command2=SETSYS TAG, "NAME", "newname"&Command3=SETSYS TAG, "Address", "new address"&Command4=SETSYS TAG, "SAVE"&command4=cfgsave&t2mdeveloperid=yourid&t2maccount=account&t2mpassword=password&t2mdeviceusername=adm&t2mdeviceusername=password
I hope this helps! Let me know if you need any clarification.