Integrating Sqlite
You need to install the sqlite3 command line tool to create a simple database file. We can then read it from our agent.
Lets create an sqlite database and add some data to it
/tmp$ sqlite3 building-data.db
SQLite version 3.43.2 2023-10-10 13:08:14
Enter ".help" for usage hints.
sqlite> create table IAQData(sensor varchar(255), value float, time datetime);
sqlite> insert into IAQData(sensor,value,time) values('S1',23,'2024-01-01T09:00:00Z');
sqlite> insert into IAQData(sensor,value,time) values('S2',21.2,'2024-01-01T09:00:00Z');
sqlite> insert into IAQData(sensor,value,time) values('S3',22.6,'2024-01-01T09:00:00Z');
So we have a database with some data inside the IAQData
table.
Lets now read this from our agent.
We need to install the sqlite3 driver for node.js
Integrating Sqlite into your connector
First install the appropriate npm package
npm install sqlite3
Then use require
to reference that module in your index.js file
const sqlite3 = require('sqlite3').verbose();
We can now open the database.
Note that we are now hard-coding the database file path. You could change this to also accept a database file as one of the inputs from your connector definition.
Lets open the database:
```javascript
let db = new sqlite3.Database('/tmp/building-data.db', (err) => {
if (err) {
console.error(err.message);
}
console.log('Connected to the database');
});
```
This can go at the top of the file right when the program starts.
Next, lets add an async function to query the database:
```javascript
async function executeQuery(query) {
return new Promise((resolve,reject)=>{
db.serialize(() => {
let results = [];
db.all(query, (err, rows) => {
if (err) {
reject(err.message);
}
resolve(rows);
});
});
});
}
```
Finally, lets modify our processRequest() function:
```javascript
async function processRequest(payload) {
try {
let obj = JSON.parse(payload);
if (obj.function == 'sqlquery') {
let queryResults = await executeQuery(obj.query);
console.log('returning', queryResults);
return { result: queryResults, count: queryResults.length };
}
throw 'Unknown function: ' + obj.function;
} catch (e) {
return { result: e }
}
}
```
The full code is here:
```javascript
const process = require('process');
const {LucyConnector} = require('lucy-node-sdk');
const sqlite3 = require('sqlite3').verbose();
const ConnectorName='SqliteConnector';
let db = new sqlite3.Database('/tmp/building-data.db', (err) => {
if (err) {
console.error(err.message);
}
console.log('Connected to the database');
});
async function executeQuery(query) {
return new Promise((resolve,reject)=>{
db.serialize(() => {
let results = [];
db.all(query, (err, rows) => {
if (err) {
reject(err.message);
}
resolve(rows);
});
});
});
}
async function processRequest(payload) {
try {
let obj = JSON.parse(payload);
if (obj.function == 'sqlquery') {
let queryResults = await executeQuery(obj.query);
console.log('returning', queryResults);
return { result: queryResults, count: queryResults.length };
}
throw 'Unknown function: ' + obj.function;
} catch (e) {
return { result: e }
}
}
const connector = LucyConnector.fromInstallationKey(process.env.LUCY_CONNECTOR_KEY,ConnectorName,processRequest);
connector.init().then(()=>{
console.log('Connector initialized');
});
```
Now when you exeute your model action you should see the data from your sqlite3 database showing up in the Lucy model!

Last updated