Fix missing 'Response' type in appwrite-node.
This commit is contained in:
parent
1d2694eb05
commit
feb331d6f1
21
.vscode/launch.json
vendored
Normal file
21
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "pwa-node",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "Launch Program",
|
||||||
|
"skipFiles": [
|
||||||
|
"<node_internals>/**"
|
||||||
|
],
|
||||||
|
"program": "${workspaceFolder}/src/index.ts",
|
||||||
|
"preLaunchTask": "tsc: build - tsconfig.json",
|
||||||
|
"outFiles": [
|
||||||
|
"${workspaceFolder}/**/*.js"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
18
package-lock.json
generated
18
package-lock.json
generated
@ -792,11 +792,11 @@
|
|||||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||||
},
|
},
|
||||||
"axios": {
|
"axios": {
|
||||||
"version": "0.25.0",
|
"version": "0.26.1",
|
||||||
"resolved": "http://10.0.0.30:18081/repository/npm-group/axios/-/axios-0.25.0.tgz",
|
"resolved": "http://10.0.0.30:18081/repository/npm-group/axios/-/axios-0.26.1.tgz",
|
||||||
"integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==",
|
"integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"follow-redirects": "^1.14.7"
|
"follow-redirects": "^1.14.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"balanced-match": {
|
"balanced-match": {
|
||||||
@ -2370,6 +2370,16 @@
|
|||||||
"requires": {
|
"requires": {
|
||||||
"axios": "^0.25.0",
|
"axios": "^0.25.0",
|
||||||
"form-data": "^4.0.0"
|
"form-data": "^4.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"axios": {
|
||||||
|
"version": "0.25.0",
|
||||||
|
"resolved": "http://10.0.0.30:18081/repository/npm-group/axios/-/axios-0.25.0.tgz",
|
||||||
|
"integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==",
|
||||||
|
"requires": {
|
||||||
|
"follow-redirects": "^1.14.7"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node-preload": {
|
"node-preload": {
|
||||||
|
@ -19,7 +19,9 @@
|
|||||||
"author": "Laur Ivan",
|
"author": "Laur Ivan",
|
||||||
"license": "GPL-3.0-or-later",
|
"license": "GPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"axios": "^0.26.1",
|
||||||
"dotenv": "^16.0.0",
|
"dotenv": "^16.0.0",
|
||||||
|
"form-data": "^4.0.0",
|
||||||
"fs": "0.0.1-security",
|
"fs": "0.0.1-security",
|
||||||
"knx-lib": "0.0.3",
|
"knx-lib": "0.0.3",
|
||||||
"node-appwrite": "^5.0.0",
|
"node-appwrite": "^5.0.0",
|
||||||
|
8
src/appwrite.ts
Normal file
8
src/appwrite.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { Client, Database } from "node-appwrite";
|
||||||
|
|
||||||
|
const client: Client = new Client();
|
||||||
|
client.setEndpoint(process.env.APPWRITE_ENDPOINT_URL)
|
||||||
|
.setProject(process.env.APPWRITE_PROJECT_ID)
|
||||||
|
.setKey(process.env.APPWRITE_API_KEY)
|
||||||
|
|
||||||
|
export const database = new Database(client)
|
@ -24,7 +24,7 @@ const connection = new knx.Connection({
|
|||||||
connected: function () {
|
connected: function () {
|
||||||
console.log('Connected!');
|
console.log('Connected!');
|
||||||
},
|
},
|
||||||
event: function (evt: any, src: any, dest: any, value: any) {
|
event: function (evt: string, src: string, dest: string, value: Buffer) {
|
||||||
console.log("%s **** KNX EVENT: %j, src: %j, dest: %j, value: %j",
|
console.log("%s **** KNX EVENT: %j, src: %j, dest: %j, value: %j",
|
||||||
new Date().toISOString().replace(/T/, ' ').replace(/\..+/, ''),
|
new Date().toISOString().replace(/T/, ' ').replace(/\..+/, ''),
|
||||||
evt, src, dest, value);
|
evt, src, dest, value);
|
||||||
|
74
src/processTelegram.ts
Normal file
74
src/processTelegram.ts
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
import { Client, Database, Query } from 'node-appwrite'
|
||||||
|
import { DataPointType } from 'dptlib/lib/DataPointType'
|
||||||
|
import { DPT } from 'dptlib/lib/definitions'
|
||||||
|
import { database } from './appwrite'
|
||||||
|
|
||||||
|
// TODO: Get the map from a list of environment variables
|
||||||
|
const dptMap: { [index: string]: string } = {
|
||||||
|
'DPT1.1': '61f46d9b81de70ac7ece', // percent
|
||||||
|
'DPT5.1': '61f46d535343e1aa557f', // percent
|
||||||
|
'DPT9.1': '61f46c7fc8869fa2c6a1' // temperature
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: add types
|
||||||
|
export async function getDPTforAddress(record: any) {
|
||||||
|
let list = await database.listDocuments(process.env.APPWRITE_KNX_ADDRESS_COLLECTION, [
|
||||||
|
Query.equal('project_id', process.env.APPWRITE_PROJECT_ID),
|
||||||
|
Query.equal('address', record.dest_addr)
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Throw an error if the address is not unique
|
||||||
|
//
|
||||||
|
if (list.documents.length != 1) {
|
||||||
|
throw 'The address is not unique!'
|
||||||
|
}
|
||||||
|
|
||||||
|
record.dpt = DataPointType.TYPES[(list.documents[0] as any).dpt]
|
||||||
|
record.addressId = list.documents[0]['$id']
|
||||||
|
return record
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Add types
|
||||||
|
export async function upsert(entry: any) {
|
||||||
|
let dptId: string = entry.dpt.id + '.' + entry.dpt.subtypeid
|
||||||
|
let collectionId = (dptId in dptMap) ? dptMap[dptId] : undefined
|
||||||
|
|
||||||
|
if (collectionId === undefined) {
|
||||||
|
console.log('Cannot process [%s] with value %j', dptId, [entry.src_addr, entry.apdu.dptData])
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Upsert
|
||||||
|
let list_items = await database.listDocuments(collectionId, [
|
||||||
|
Query.equal('dpt', dptId),
|
||||||
|
Query.equal('timestamp', entry.timestamp.getTime())
|
||||||
|
])
|
||||||
|
|
||||||
|
let data = {
|
||||||
|
address_id: entry.addressId,
|
||||||
|
dpt: dptId,
|
||||||
|
timestamp: entry.timestamp.getTime(),
|
||||||
|
value: entry.apdu.dptData
|
||||||
|
}
|
||||||
|
|
||||||
|
if (list_items.total === 0) {
|
||||||
|
console.debug('insert')
|
||||||
|
await database.createDocument(collectionId, 'unique()', data);
|
||||||
|
} else if (list_items.total === 1) {
|
||||||
|
var doc = list_items.documents[0] as any
|
||||||
|
if (
|
||||||
|
doc.address_id !== data.address_id &&
|
||||||
|
doc.dpt !== data.dpt &&
|
||||||
|
doc.timestamp !== data.timestamp &&
|
||||||
|
doc.value !== data.value
|
||||||
|
) {
|
||||||
|
console.log('update')
|
||||||
|
await database.updateDocument(collectionId, doc['$id'], data);
|
||||||
|
} else {
|
||||||
|
console.debug('Skip %s', doc['$id'])
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
throw 'Multiple entries!'
|
||||||
|
}
|
||||||
|
}
|
3
src/types.d.ts
vendored
3
src/types.d.ts
vendored
@ -0,0 +1,3 @@
|
|||||||
|
declare module "node-appwrite" {
|
||||||
|
export type Response = any;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user