With our new models we will now create a list of 2 equipments. We will create an organ for each equipment. Each one will have an automate which changes its hydrometry and temperature.
Equipment 1Make a folder named equipment1 and the file index.js in it.
Code Block |
---|
| ~/button-system$ mkdir equipment1
~/button-system$ cd equipment1
~/button-system/equipment1$ touch index.js |
This organ will create the first equipment and will revover data from a simulated sensor. equipment1/index.js Code Block |
---|
language | js |
---|
theme | DJango |
---|
linenumbers | true |
---|
| // 1: Requirement and connection
var spinalCore = require('spinal-core-connectorjs');
require('../spinal-model-button/model.js');
console.log("Configuration Environment not found, using default config");
process.env.SPINALHUB_PORT = 7777;
process.env.SPINALHUB_IP = "127.0.0.1";
process.env.SPINAL_USER_ID = 168;
process.env.SPINAL_PASSWORD = "JHGgcz45JKilmzknzelf65ddDadggftIO98P";
var conn = spinalCore.connect(`http://${process.env.SPINAL_USER_ID}:${process.env.SPINAL_PASSWORD}@${process.env.SPINALHUB_IP}:${process.env.SPINALHUB_PORT}/`);
// 2: Tries to load 'List'
spinalCore.load(conn, "List", function (list) {
// 3: If the list exists but is empty a first equipment is added
if (list.equipments.length < 1)
addItem(list);
// 4: Else the first equipment is pressed
else
press(list.equipments[0]);
}, function () {
// 5: If 'List' doesn't exist an empty list is created and its first equipment is pressed
var list = new equipmentList();
spinalCore.store(conn, list, "List", function () {
addItem(list);
});
});
// 6: Creates a new equipement and adds it to the list
function addItem(list) {
let item = new equipment();
item.id.set(0);
item.name.set("equipment0");
list.equipments.push(item);
press(item);
}
// 7: Gives random values to the hydrometry and temperature of an equipment
function press(equipment) {
let hydro = Math.floor(Math.random() * 100);
let degrees = Math.floor(Math.random() * 30);
equipment.hydrometry.set(hydro);
equipment.temperature.set(degrees);
// 8: Repeats every second
setTimeout(function () {
console.log("equipment 1: has been pressed");
press(equipment);
}, 1000);
} |
You can launch your new organ with node. Code Block |
---|
| ~/button-system/equipment1$ node index.js |
Go to the admin UI and put 'List' into the inspector and you should see the hydrometry and temperature of equipment0 change every second. Image Modified
Equipment2Equipment2 will be almost identical to equipment1 so I suggest you copy start by copying equipment1. Code Block |
---|
| ~/button-system/equipement1$ cd ..
~/button-system$ cp -r equipment1 equipment2
~/button-system$ cd equipment2 |
There are very few changes to make to index.js. equipment2/index.js Code Block |
---|
language | js |
---|
theme | DJango |
---|
linenumbers | true |
---|
| var spinalCore = require('spinal-core-connectorjs');
require('../spinal-model-button/model.js');
console.log("Configuration Environment not found, using default config");
process.env.SPINALHUB_PORT = 7777;
process.env.SPINALHUB_IP = "127.0.0.1";
process.env.SPINAL_USER_ID = 168;
process.env.SPINAL_PASSWORD = "JHGgcz45JKilmzknzelf65ddDadggftIO98P";
var conn = spinalCore.connect(`http://${process.env.SPINAL_USER_ID}:${process.env.SPINAL_PASSWORD}@${process.env.SPINALHUB_IP}:${process.env.SPINALHUB_PORT}/`);
var list = new equipmentList();
spinalCore.load(conn, "List", function (list) {
// 1: An item is created if there are less than 2 equipments in the list
if (list.equipments.length < 2)
addItem(list);
// 2: The second item is pressed (instead of the first)
press(list.equipments[1]);
}, function () {
spinalCore.store(conn, list, "List", function () {
addItem(list);
});
});
function addItem(list) {
let item = new equipment();
item.id.set(0);
// 3: The new item is named equipment1 (instead of equipment0)
item.name.set("equipment1");
list.equipments.push(item);
press(item);
}
function press(equipment) {
let hydro = Math.floor(Math.random() * 100);
let degrees = Math.floor(Math.random() * 30);
equipment.hydrometry.set(hydro);
equipment.temperature.set(degrees);
setTimeout(function () {
// 4: This message changes
console.log("equipment 2: has been pressed");
press(equipment);
}, 1000);
} |
Now launch equipment2 with node. Code Block |
---|
| ~/button-system/equipment2$ node index.js |
If you go back to the inspector you will notice that a new equipment has appeared in the List.
Image Modified |