Node.js: 一定時間毎に udp 送信を行う


こちらにある udpclient.js を改造しました。
Telegraf の入力データフォーマットを JSON にする

udp_plural.js
#! /usr/bin/node
// ---------------------------------------------------------------
//
//  udp_plural.js
//
//                  Aug/30/2021 
// ---------------------------------------------------------------
'use strict'

// UDP 接続先
const host = "localhost"
const c_port = 8092
var dgram = require("dgram")
var client = dgram.createSocket("udp4")

// ---------------------------------------------------------------
// サーバからメッセージ受信したときの処理
client.on("message", function(msg, rinfo) {
    console.log("recieved: " + msg.toString("hex"))
    client.close()
})

// ---------------------------------------------------------------
// メッセージ送信でエラーが起きた時の処理
client.on("err", function(err) {
    console.log("client error: \n" + err.stack);
    console.close()
})

// ---------------------------------------------------------------
// Socket をクローズした時の処理
client.on("close", function() {
    console.log("closed.")
})

// ---------------------------------------------------------------
// メッセージ送信
function send(message, host, port)
{
    client.send(message, 0, message.length, port, host, function(err, bytes)
    {
    console.log("*** sent ***")
    client.close()
    })
}

// ---------------------------------------------------------------
async function send_proc(temperature,humidity)
{
    client = dgram.createSocket("udp4")

    var unit_aa = new Object ()
    unit_aa["name"] = "aaa"
    unit_aa["temperature"] = temperature
    unit_aa["humidity"] = humidity
    const json_str = JSON.stringify(unit_aa)
    console.log(json_str)

    const message = new Buffer.from(json_str)
    send(message, host, c_port)
}

// ---------------------------------------------------------------
async function s02(temperature,humidity)
{
    await send_proc(temperature,humidity)

    await new Promise(resolve => setTimeout(resolve, 10000))
}

// ---------------------------------------------------------------
async function main()
{
    console.error ("*** 開始 ***")

    await s02(25.2,50.5)
    await s02(25.9,60.7)
    await s02(26.8,63.4)
    await s02(27.2,70.8)
    await s02(26.5,65.6)
    await s02(26.0,55.3)
    await s02(25.5,51.2)

    console.error ("*** 終了 ***")
}

// ---------------------------------------------------------------
main()

// ---------------------------------------------------------------

実行結果

$ ./udp_plural.js 
*** 開始 ***
{"name":"aaa","temperature":25.2,"humidity":50.5}
*** sent ***
{"name":"aaa","temperature":25.9,"humidity":60.7}
*** sent ***
{"name":"aaa","temperature":26.8,"humidity":63.4}
*** sent ***
{"name":"aaa","temperature":27.2,"humidity":70.8}
*** sent ***
{"name":"aaa","temperature":26.5,"humidity":65.6}
*** sent ***
{"name":"aaa","temperature":26,"humidity":55.3}
*** sent ***
{"name":"aaa","temperature":25.5,"humidity":51.2}
*** sent ***
*** 終了 ***

次のバージョンで確認しました。

$ node --version
v14.17.5

こちらのページを参考にしました。
ES2017のasync/awaitを使って「同期的sleep処理」をワンライナーで書く