Hinzufügen der Divera API translation
This commit is contained in:
1 parent
5e46eeff01
commit
6838e7315b
6 files changed
+1147
-3
No files matched your search
@@ -0,0 +1,41 @@
|
||||
import express from "express";
|
||||
import axios from "axios";
|
||||
|
||||
const app = express();
|
||||
const port = 3000;
|
||||
|
||||
app.get("/get_last_alarm/:accesskey", async (req, res) => {
|
||||
const accessKey = req.params.accesskey;
|
||||
|
||||
if (!accessKey) {
|
||||
return res.status(400).send("Access key is required");
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await axios.get(process.env.BASE_URL + "/v2/alarms?accesskey=" + accessKey);
|
||||
res.json(response.data.data.items[response.data.data.sorting[0]]);
|
||||
} catch (error) {
|
||||
console.error("Error fetching alarm data:", error);
|
||||
res.status(500).send("Error fetching alarm data");
|
||||
}
|
||||
});
|
||||
|
||||
app.get("/get_last_alarm_by_id/:accesskey", async (req, res) => {
|
||||
const accessKey = req.params.accesskey;
|
||||
|
||||
if (!accessKey) {
|
||||
return res.status(400).send("Access key is required");
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await axios.get(process.env.BASE_URL + "/v2/alarms?accesskey=" + accessKey);
|
||||
res.json(response.data.data.items[response.data.data.sorting[0]].foreign_id);
|
||||
} catch (error) {
|
||||
console.error("Error fetching alarm data:", error);
|
||||
res.status(500).send("Error fetching alarm data");
|
||||
}
|
||||
});
|
||||
|
||||
app.listen(port, () => {
|
||||
console.log(`Example app listening on port ${port}`);
|
||||
});
|
||||
@@ -0,0 +1,2 @@
|
||||
import "./status.js";
|
||||
import "./alarm_api.js";
|
||||
@@ -0,0 +1,92 @@
|
||||
import dotenv from "dotenv";
|
||||
dotenv.config();
|
||||
import axios from "axios";
|
||||
import fs from "fs";
|
||||
const CACHE_FILE = process.env.CACHE_FILE_Path;
|
||||
|
||||
if (!fs.existsSync(CACHE_FILE)) {
|
||||
console.log("[INFO] CACHE_FILE Created!");
|
||||
fs.writeFileSync(CACHE_FILE, "[]");
|
||||
}
|
||||
|
||||
const BASE_URL = process.env.BASE_URL;
|
||||
const divera_group_id = process.env.divera_status_groupid;
|
||||
// Fahrzeuge die überwacht werden sollen
|
||||
const WATCHED_VEHICLES = [
|
||||
"10-11-1",
|
||||
"10-48-1",
|
||||
"10-30-1",
|
||||
"10-26-1",
|
||||
"10-45-1",
|
||||
"10-17-1",
|
||||
"10-19-1",
|
||||
"10-68-1",
|
||||
"10-64-1",
|
||||
"10-03-1",
|
||||
"10-04-1",
|
||||
"10-05-1",
|
||||
"10-05-21",
|
||||
];
|
||||
|
||||
// Intervall in ms
|
||||
const POLL_INTERVAL = 15000;
|
||||
|
||||
async function getData() {
|
||||
const data = await axios.get(`${BASE_URL}/v2/pull/all?accesskey=${process.env.divera_accesskey_stadt}`);
|
||||
const watchedVehicles = Object.entries(data.data.data.cluster.vehicle).filter(([key, vehicle]) => {
|
||||
return WATCHED_VEHICLES.includes(vehicle.name);
|
||||
});
|
||||
|
||||
const formatetData = await watchedVehicles.map(([key, vehicle]) => {
|
||||
return {
|
||||
name: vehicle.name,
|
||||
fmsstatus_id: vehicle.fmsstatus_id,
|
||||
fmsstatus_ts: vehicle.fmsstatus_ts,
|
||||
};
|
||||
});
|
||||
|
||||
return formatetData;
|
||||
}
|
||||
|
||||
async function hasStatusChanged(newData, oldData) {
|
||||
await newData.forEach(async (vehicle) => {
|
||||
const oldVehicle = oldData.find((x) => x.name == vehicle.name);
|
||||
|
||||
if (vehicle.fmsstatus_id != oldVehicle.fmsstatus_id || !oldVehicle) {
|
||||
// Divera Nachricht
|
||||
console.log("[INFO] Statusabfrage!");
|
||||
if (
|
||||
vehicle.fmsstatus_id == 6 ||
|
||||
vehicle.fmsstatus_id == 2 ||
|
||||
vehicle.fmsstatus_id == 3 ||
|
||||
vehicle.fmsstatus_id == 4
|
||||
) {
|
||||
// console.log(`Status Änderung: FL. AUR ${vehicle.name} Status ${vehicle.fmsstatus_id}`);
|
||||
await axios
|
||||
.post("https://app.divera247.com/api/v2/news?accesskey=" + process.env.divera_accesskey_aurich, {
|
||||
News: {
|
||||
title: `FL. AUR ${vehicle.name} Status ${oldVehicle.fmsstatus_id}->${vehicle.fmsstatus_id}`,
|
||||
ts_publish: vehicle.fmsstatus_ts,
|
||||
notification_type: 3,
|
||||
group: divera_group_id,
|
||||
send_push: true,
|
||||
},
|
||||
})
|
||||
.then((res) => {
|
||||
console.log("Divera News sent successfully:", res.data);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
async function main() {
|
||||
console.log("Ausführung Status");
|
||||
const newData = await getData();
|
||||
|
||||
hasStatusChanged(newData, JSON.parse(fs.readFileSync(CACHE_FILE, "utf8")));
|
||||
|
||||
fs.writeFileSync(CACHE_FILE, JSON.stringify(newData));
|
||||
}
|
||||
|
||||
console.log("[INFO] Start Intervall!");
|
||||
setInterval(main, 1000 * process.env.intervall);
|
||||
Reference in new issue
Block a user