This repo is a case study of using Gifflar in an IoT project called IoTCocoa, a project that aims to create a system for monitoring the gourmet cocoa production. The IoTCocoa uses sensors and actuators to capture data and later save it in the blockchain using smart contracts.
To simulate these sensors and actuators, this repository created four types of devices objects that could be used by the IoTCocoa project. The devices where a Rele, a DHT11 sensor (temperature and humidity sensor), Servo Motor and a Air Conditioner. You can see in src/performance/sensors.ts that, in this sequence, the device object data increases. This was intentional, so we can understand more about Gifflar's performance as we increase the object JSON data.
- Install the dependencies:
yarnor
npm i- Install Gifflar globally
npm i -g @gifflar/core- Generate gifflar config file
gifflarconfig.json.
gifflar init .This command will ask you if you want to init a gifflar config file inside an existing project, you can confirm that by typing y in terminal.
Run this following command to execute the application and generate the sensors/actuators smart contracts with gifflar.
yarn startor
npm startThis command will generate the smart contracts inside the src/contracts folder. Every time you run the command, the contracts are rewritten.
yarn performance
This will generate a csv file inside src/out folder for each performance test. The csv file will contain the mean, max and min values of all the repetitions the code mande. The default repetitions is 200, that is, the performance test will run the test 200 times (you can change this later).
yarn performance:it --sensor=rele --step=modeling --measure=time
measure: "time" | "memory" | "cpu"sensor: "rele" | "dht11" | "servoMotor" | "airConditioner"step: "modeling" | "writing"
This will generate a csv file inside src/out folder of this unique performance test. The csv file will contain the mean, max and min values of all the repetitions the code mande. The default repetitions is 200, that is, the performance test will run the test 200 times (you can change this later).
You might want to receive the data result from each repetition, that is, generate the 200 output values. For that, you can go to the src/performance/measuring-functions and uncomment a single line in each measure function.
measureTimeOf:
[...]
// *Uncomment this next line to get the data for each repetition
// console.log(secs);
[...]measureMemoryOf:
[...]
// *Uncomment this next line to get the data for each repetition
// console.log(memoryUsedInKb);
[...]measureCpuOf:
[...]
// *Uncomment this next line to get the data for each repetition
// console.log(cpuUsagePercentage);
[...]Then you can use the scripts in scripts/performance to execute each performance test. For example, if you want to run the modeling step of gifflar using the rele actuator as test entry and testing the time execution, you should run:
./src/scripts/performance/rele/time_modeling.shBefore running that command, you might need to give permission to the user to execute this script:
chmod 777 ./src/scripts/performance/rele/time_modeling.shThese will generate .txt files inside src/out folder, each .txt file corresponds to the individual performance test executed. They will look like the files inside results/ folder.
Note: Remember to run these tests in an isolated machine. Close all the unneeded apps, close the text editor, turn the WiFi and Bluetooth off, and run the tests in the terminal.