TypeScript module for working with the Zabbix API
npm install zabbix-api-tsThis is a Zabbix API component to use with TypeScript.
The following API methods have been implemented:
* user.login
* user.logout
* host.get
* history.get
The package was tested with Zabbix 5.4.
import { ZabbixAPI } from "zabbix-api-ts";
import dotenv from 'dotenv'
dotenv.config();
const main = async function() {
// Initialize ZabbixAPI instance.
const zabbix = new ZabbixAPI(process.env.zabbixURL!, process.env.zabbixUsername!, process.env.zabbixPassword!);
// Login.
const loginResult = await zabbix.login();
if(loginResult.result) {
// Logout.
const logoutResult = await zabbix.logout();
// Output logout response.
console.log(logoutResult);
}
}
main();
// Outputs:
// {jsonrpc: '2.0', result: true, id: 4}
`
---
#### Retrieving hosts
`
import { ZabbixAPI } from "zabbix-api-ts";
import dotenv from 'dotenv'
dotenv.config();
const main = async function() {
// Initialize ZabbixAPI instance.
const zabbix = new ZabbixAPI(process.env.zabbixURL!, process.env.zabbixUsername!, process.env.zabbixPassword!);
// Login.
const loginResult = await zabbix.login();
if(loginResult.result) {
// Get all hosts, filter Arduino hosts.
const arduinoHosts = (await zabbix.getHosts()).result
.filter((el) => { return el.name.includes('Arduino'); })
.map(el => { return el.name; });
// Logout.
await zabbix.logout();
// Output results.
console.log(arduinoHosts);
}
}
main();
// Output:
// (9) ['Arduino_09_307', 'Arduino_09_434' ... 'Arduino_09_432_B', 'Arduino_09_435']
`
---
#### Retrieving host items
`
import { ZabbixAPI } from "zabbix-api-ts";
import dotenv from 'dotenv'
dotenv.config();
const main = async function() {
// Initialize ZabbixAPI instance.
const zabbix = new ZabbixAPI(process.env.zabbixURL!, process.env.zabbixUsername!, process.env.zabbixPassword!);
// Login.
const loginResult = await zabbix.login();
if(loginResult.result) {
// Retrieve all hosts, filter ZigBee smart plug host.
const smartPlug = (await zabbix.getHosts()).result
.filter((el) => { return el.name.includes('ZigBee socket'); })[0];
// Logout.
await zabbix.logout();
// Output results.
console.log(smartPlug.name);
for(const item of smartPlug.items.filter((el) => { return el.name.toLowerCase().includes('power (') })) {
console.log( ${item.name}: ${item.lastvalue} ${item.units.replace('!', '')})
}
}
}
main();
// Output:
// ZigBee socket JLT1 bffdb1768fdc36f6d0edsb
// Power (bffdb1768fdc36f6d0edsb): 38
// Cumulative power (bffdb1768fdc36f6d0edsb): 77.44
`
---
#### Retrieving host item history
`
import { ZabbixAPI } from "zabbix-api-ts";
import dotenv from 'dotenv'
dotenv.config();
const main = async function() {
// Initialize ZabbixAPI instance.
const zabbix = new ZabbixAPI(process.env.zabbixURL!, process.env.zabbixUsername!, process.env.zabbixPassword!);
// Login.
const loginResult = await zabbix.login();
if(loginResult.result) {
// Retrieve all hosts, filter ZigBee smart plug host.
const smartPlug = (await zabbix.getHosts()).result
.filter((el) => { return el.name.includes('ZigBee socket'); })[0];
// Find first item related to power consumption.
const item = smartPlug.items.filter((el) => { return el.name.includes('Power (') })[0];
// Get current unix time.
const unixTime = Math.round(new Date().getTime() / 1000);
// Retrieve item history.
const history = await zabbix.getHistory(
[parseInt(item.itemid)], // Unique item ID.
parseInt(item.value_type), // Item value type (in this case - float).
unixTime - 6000, // Current time minus 6000 seconds.
unixTime // Current time.
);
// Logout.
await zabbix.logout();
// Output results.
console.log(smartPlug.name);
for(const historyResult of history.result) {
const time = new Date(Number(historyResult.clock) * 1000)
.toLocaleDateString('lt-LT', { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false});
const value = ${historyResult.value} ${item.units.replace('!', '')}
console.log( ${time}: ${value})
}
}
}
main();
// Output:
// ZigBee socket JLT1 bffdb1768fdc36f6d0edsb
// 2023-05-25 14:27:03: 47 W
// 2023-05-25 14:12:03: 46 W
// 2023-05-25 13:57:03: 47 W
// 2023-05-25 13:42:03: 50 W
// 2023-05-25 13:27:04: 44 W
// 2023-05-25 13:12:03: 51 W
// 2023-05-25 12:57:03: 42 W
``