Develop an IoT asset tracking app using Block chain. Use an IoT asset tracking device to improve a supply chain by using Block chain, IoT devices, and Node-RED. - app.js → Express server + simulated blockchain ledger - iotContract.js → ledger logic - iot-ledger.json → initial empty ledger - index.html → web frontend with form and fetch POST to /track iotContract.js // iotContract.js import fs from "fs"; const LEDGER_FILE = "./iot-ledger.json"; export class IoTAssetContract { constructor() { if (!fs.existsSync(LEDGER_FILE)) { fs.writeFileSync(LEDGER_FILE, JSON.stringify([])); } } async addAsset(assetId, location, temperature) { const ledger = JSON.parse(fs.readFileSync(LEDGER_FILE)); const entry = { assetId, location, temperature, timestamp: new Date().toISOString() }; ledger.push(entry); fs.writeFileSync(LEDGER_FILE, JSON.stringify(ledger, null, 2)); return entry; } async getAllAssets() { return JSON.parse(fs.readFileSync(LEDGER_FILE)); } } iot-ledger.json [] app.js // app.js import express from "express"; import bodyParser from "body-parser"; import path from "path"; import { fileURLToPath } from "url"; import { IoTAssetContract } from "./iotContract.js"; // Setup __dirname for ES Modules const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const app = express(); app.use(bodyParser.json()); // Serve static files from /public app.use(express.static(path.join(__dirname, "public"))); const contract = new IoTAssetContract(); // Root route app.get("/", (req, res) => { res.sendFile(path.join(__dirname, "public", "index.html")); }); // POST /track — add IoT asset app.post("/track", async (req, res) => { try { if (!req.body || Object.keys(req.body).length === 0) { return res.status(400).json({ error: "Empty or invalid JSON body" }); } const { assetId, location, temperature } = req.body; if (!assetId || !location || temperature === undefined) { return res.status(400).json({ error: "Missing required fields" }); } const result = await contract.addAsset(assetId, location, temperature); res.json(result); } catch (err) { res.status(500).json({ error: err.toString() }); } }); // GET /assets — view all assets app.get("/assets", async (req, res) => { try { const result = await contract.getAllAssets(); res.json(result); } catch (err) { res.status(500).json({ error: err.toString() }); } }); // Start server const PORT = 3000; app.listen(PORT, () => { console.log(`IoT Asset Tracking app running on port ${PORT}`); }); public/index.html
Loading...if error, Rename app.js to app.cjs and use "node app.cjs" to run