Read the statement by Michael Teeuw here.
SmartThings
-
I’m finally starting to make some progress on this. I’ve been doing development in a docker instance and found editing files while the container is running corrupts files. :-)
So I have it connecting and bringing back device information at this point. I still need to parse that info. I’m working through the steps get all the info in the correct order to model it (get device ids>>get device components>>get device capabilities>>statuses etc.)
I do have two hubs and found that it brings back devices for all hubs, so I’ll need to get the hub info too.
-
This is something that I want to seriously look at this winter. Time right now is very hard for me to do anything…but I am keeping an eye on this and I appreciate ALL the input!!!
I am trying first to get my thermostat to work via the mirror… module form. I can do it other ways but I want to learn how to use this IDE. But it gets to be too much… but you both have excellent ideas that I will be picking your brains soon!!! :)
Keep posting please!!
-
I’ve made a little more progress on this, but nothing to display the device info yet. I found the node-smarthings library uses promises to return results, which I’ve not worked with specifically, so been struggling with tying the device information to the device capability status results. I think I’ve finally worked passed it, but still have some testing to do.
I’ve been trying to pass the device object from the first call to the call back function for the capability status, but not figured out how to do that. All of the status results were tied to the last device processed from the device callback. I did finally move the looping of devices to where only one device was sent to the socket notification that calls the capability status and seems to be working that way.
-
@buzzkc so, with promises, you have a ‘then’, with a ‘resolve’ and an ‘error’ callback, and the resolve and reject methods of the promise can provide data to the resolve and error routines…
just a reminder, the return new Promise() returns IMMEDIATELY… the function inside the promise is called async sometime (milliseconds) later
function_name: function(parm1_in, parm2_in) { return new Promise( function (resolve,reject){ if( all_good) { resolve(data_item) } else { reject(error_data) } } )
then the method CALLING this function
function_name(parm1, parm2).then( resolve_func(data_item){ }, error_func(error_data){} )
a working example , using the arrow function (parm) => {
the arrow function insures that the data context of the outside caller is maintained,
where as function(parm) { does not (u had to use the ‘self =this’ thinglet promise = new Promise(function(resolve, reject) { if(!setTimeout(() => resolve("done!"), 1000)){ reject("settimeout_failed") } }); // resolve runs the first function in .then, reject runs the second function promise.then( // this will block until the function inside the promise call resolve or reject result => alert(result), // shows "done!" after 1 second error => alert(error) // doesn't run .. this will never occurr as settimeout never fails. );
-
Thanks Sam, That does help explain things. The grandkids are visiting, so will be a day or so before I get back to this, unless I just can’t sleep tonight. ;-)
-
@buzzkc no problem… i’ll be around
also, the function in the promise can also be arrow
return new Promise( (resolve,reject) =>{ if( all_good) { resolve(data_item) } else { reject(error_data) } })
-
and you can nest calls to functions that return Promises.
call_function_a(parm1, parm2).then( resolve_function(resolve_parm){ ... processing call function_b(resolve_parm).then(resolve_function(some_otherdata){ .... processing }) })
the 1st call_function_a routine will return a Promise object immediately
and when the function inside the promise resolves, then ‘.then (resolve’ function will be called.the ‘.then’ waits
you can also split it up and wait later
var p = call_function_a(parm1, parm2) processing processing Promise(p).then (... etc)
i have a piece of code that loads a list of images from multiple difference sources, and knowing these take a ‘long time’ I wrapped them in promises… and start multiple at the same time…
now I have a list (array) of promises… but need to wait for all of them to complete (to have the complete list of images)
Promise.all(list).then(() => { sort full list of images, note that resolve() can't send back the list as its not complete }
you can also wait for one
Promise.race(list).then( ... etc)
-
Still working on getting things to refresh, but here is a teaser…
Let me know if the pic isn’t showing or disappears, using google photos
-
@buzzkc looks good
-
I’ll start a new thread for this, but if anyone wants to try it out or PR it, keep in mind, it’s my first module. ;-)
https://github.com/buzzkc/MMM-SmartthingsCurrently I’m only supporting a subset of device capabilities. I can only run one instance of the module also since everything is returned to a global array. More than one instance all the devices from each module instances get put into the array and the full list of devices displays on all instances rather than what was specified for that instance.
For multiple capabilities in the list, the display is sorted by device name, then by capability alphabetically.
It also displays devices for all locations, I’ll see if I can make this selective in the future, but fits my needs as it is.