こちらにある 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処理」をワンライナーで書く