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.
Equipment2Equipment2 will be almost identical to equipment1 so I suggest you 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.
|