postData.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import Meteostanica from "../utils/meteostanica";
  2. import { watch } from "node:fs";
  3. import reloadEnv from "../utils/reloadEnv";
  4. let socket
  5. setInterval(() => {
  6. if (!socket) return;
  7. const data = Meteostanica.getData()[0]
  8. socket.send(JSON.stringify(data))
  9. console.log(`indoor: ${data.indoorTemp / 100}°C, outdoor: ${data.outdoorConnected} - ${data.outdoorTemp / 100}°C`)
  10. }, process.env.DATA_POST_INTERVAL * 1000)
  11. setInterval(() => {
  12. if (!socket) return;
  13. socket.send(process.env.BACKEND_KEEPALIVE_STRING)
  14. }, 10000)
  15. // Function to read and parse the .env file
  16. async function reloadData() {
  17. try {
  18. await reloadEnv()
  19. if (process.env.POST_DATA_ENABLED !== "false") {
  20. socket = new WebSocket(`${process.env.BACKEND_URL}/ws/sendData/${process.env.BACKEND_WEBSOCKET_KEY}`)
  21. socket.addEventListener("message", (e) => {
  22. console.log(e.data)
  23. })
  24. socket.addEventListener("close", async () => {
  25. await Bun.sleep(5000)
  26. await reloadData()
  27. })
  28. } else {
  29. socket = null
  30. }
  31. } catch (error) {
  32. console.error("Failed to reload .env:", error);
  33. }
  34. }
  35. // 1. Initial load
  36. await reloadData();
  37. // 2. Watch the .env file for changes
  38. watch(`.env`, async (event, filename) => {
  39. if (event === "change") {
  40. await reloadData();
  41. }
  42. });