I have been trying out the JSS functions. After reading several posts and taking up the hint to follow a npm tutorial, I am finally arriving at a state where is used npm install to install my own package. All errors referring to TypeError: Cannot load CommonJS module: 'openhab-tools' or Error: Invalid CommonJS root folder: /openhab/conf/automation/js/node_modules etc have gone which tells me that I am on the right track.
In my .js file concerning (future) timers I took a good peek at Rich Koshak’s openhab_rules_tools github page. My myTimers.js file now looks like this:
// Define array
let myTimers = [];
// Get a list of timers from the array
const listMyTimers = () => {
console.debug("listMyTimer script started")
for (var i = 0; i <myTimers.length; i++) {
return myTimers[i][0], ", ", myTimers[i][1], ", ", myTimers[i][2], "\n";
}
}
module.exports = {
listMyTimers
}
My index.js looks like this:
module.exports = {
get myTimers() { return('./myTimers.js') }
}
In my rules I have:
var {listMyTimers} = require('@arjan-io/openhab-tools');
But is throws the following error:
Failed to execute script:
org.graalvm.polyglot.PolyglotException: TypeError: insertMyTimers is not a function
After visiting various (Stackoverflow) topics I still can’t figure out what I did wrong here, hence I turn to the community to see if any of you guys might be able to help…
Ps. the point is not if the code inside listMyItems is correct or useful but why this does not work in the first place
myTimers.js => the return string is now correctly formatted
index.js => still the same
rule now reads var {myTimers} = require('@arjan-io/openhab-tools');
When I try to call var list = myTimers.listMyTimers(); I get the error. The problem lays somewhere in the file structure. This is confirmed by the fact that if I change var {myTimers} = require('@arjan-io/openhab-tools'); into var {myTimers} = require('@arjan-io/openhab-tools/myTimers.js'); it does work.
So the question becomes, why does the var {myTimers} = ... not pick up the myTimers.js file that sits in the same directory? a little help would be appreciated!
Valid point. I’ve commented out large sections of my myTimers.js file in order to rule out any coding errors as much as possible.
Looks like I’ve given you guys a log section where I indeed tried a different const myFunc = () => {} than I posted as my example. Not very handy and my apologies. In the mean time I rechecked the lot and it keeps giving me the error if I use var {myTimers} = require('@arjan-io/openhab-tools');.
If I use var {myTimers} = require('@arjan-io/openhab-tools/myTimers.js'); (exact path to the myTimers’js file) I don’t get an error and the function works as advertised. Hence I arrived at the point where I would consider the file structure.
After using the install command, my package was installed at /openhab/conf/automation/js/node-modules/@arjan-io/openhab-tools/. Would that be the correct folder for a (scoped) package?