require('dotenv').config() const port = process.env.PORT || 3000 const host = process.env.HOST || 'localhost' const express = require('express') const socketio = require('socket.io') // const CronJob = require('cron').CronJob // const request = require('request') const sense = require('sense-hat-led').sync const app = express() const server = app.listen(port, host, () => console.log(`rpi sense hat server is running at http://${host}:${port}`)) const io = socketio(server) // app.use((req, res, next) => { // res.setHeader('Access-Control-Allow-Origin', '*') // res.setHeader('Access-Control-Allow-Methods', 'HEAD,GET,POST,OPTIONS,PATCH,PUT,DELETE') // res.setHeader('Access-Control-Allow-Headers', 'Origin,X-Requested-With,Authorization,Content-Type,Accept,Z-Key') // next() // }) app.get('/', (req, res) => res.sendStatus(200)) // Sense HAT 初始化 sense.lowLight = true sense.setRotation(180) sense.clear([0, 0, 0]) io.on('connection', (client) => { console.log(`client conncted: ${client.id}`) client.emit('message', `hello, ${client.id}`) }) // const color_red = [255, 0, 0] // const color_blue = [0, 0, 255] // const leds = [ // [0, 0, 0, 0, 0, 0, 0, 0], // [0, 0, 0, 0, 0, 0, 0, 0], // [0, 0, 0, 0, 0, 0, 0, 0], // [0, 0, 0, 0, 0, 0, 0, 0], // [0, 0, 0, 0, 0, 0, 0, 0], // [0, 0, 0, 0, 0, 0, 0, 0], // [0, 0, 0, 0, 0, 0, 0, 0], // [0, 0, 0, 0, 0, 0, 0, 0], // ] // io.emit('leds', leds) // let zhao_server_errors = 0 // const job = new CronJob( // '*/3 * * * * *', // async () => { // // 测试 http://zhao 的连通性 // request('http://zhao', (err, res, body) => { // if (res.statusCode != 200) { // zhao_server_errors++ // } // if (zhao_server_errors > 0) { // for (let i = 0; i < zhao_server_errors; i++) { // const x = i % 8 // const y = Math.floor(i / 8) // sense.setPixel(x, y, color_red) // } // } else { // let color = sense.getPixel(0, 0) // let [r, g, b] = color // sense.setPixel(0, 0, [r, g > 0 ? 0 : 255, b]) // } // }) // }, // null, // true // ) // io.on('connection', (client) => { // client.emit('leds', leds) // client.on('action', ({ action, x, y }) => { // console.log({ action, x, y }) // switch (action) { // case 'on': // sense.setPixel(Number(x), Number(y), color_blue) // leds[y][x] = 1 // break // case 'off': // sense.setPixel(Number(x), Number(y), [0, 0, 0]) // leds[y][x] = 0 // break // case 'hello': // sense.flashMessage('HELLO', 1, color_blue) // sense.clear() // read_all_leds(0) // break // case 'flash': // sense.clear([255, 255, 255]) // setTimeout(sense.clear, 100) // read_all_leds(0) // break // case 'clear': // sense.clear() // read_all_leds(0) // break // case 'temp': // read_all_leds() // get_rpis_info() // break // default: // break // } // io.emit('leds', leds) // }) // }) // function read_all_leds(value = null) { // const pixels = sense.getPixels() // for (let y = 0; y < 8; y++) { // for (let x = 0; x < 8; x++) { // leds[y][x] = value !== null ? value : sense.getPixel(x, y)[2] == 0 ? 0 : 1 // } // } // } // async function get_rpis_info() { // const rpis = [] // request('http://zhao:4000', (err, res, body) => { // if (res.statusCode == 200) rpis.push(JSON.parse(body)) // request('http://pi:4000', (err, res, body) => { // if (res.statusCode == 200) rpis.push(JSON.parse(body)) // io.emit('data', rpis) // }) // }) // }