Socket.io dans un module

Par FDRX65, il y a 7 ans


Javascript NodeJS

Bonjour,

J'ai acheté une ampoule Yeelight de la marque Xiaomi et pour m'amuser un peut avec celle-ci j'aimerais via une interface web la controler (quelque chose de simple pour commencer!)
Donc, pour cela j'ai trouvé un petit module bien sympa qui est :
https://www.npmjs.com/package/node-yeelight

Malheureusement je n'arrive pas à faire fonctionner ce module avec ma vue 'index.ejs' ..
Je m'explique, j'essaye d'envoyer en socket soit ON ou OFF au serveur et si celui-ci reçoit par exemple ON alors il lance la fonction en question mais celui-ci ne lance pas la fonction du module....

voici le code côté serveur :

const express = require('express'); const app = express(); const server = require('http').createServer(app); app.use(express.static(__dirname + '/public')); app.get('/', function (req, res) { res.render('index.ejs'); }); app.use(function(req, res, next){ res.status(404).render('404.ejs'); }); //Yeelight var Yeelight = require('node-yeelight'); var y = new Yeelight; y.on('ready', function() { console.log('ready'); y.discover(); }); y.on('deviceadded', function(device) { console.log('device added'); y.connect(device); }); y.on('deviceconnected', function(device) { console.log('device connected'); /* //si je clique sur allumer alors la lumiere s'allume: y.setPower( device, // device object true, // device state (true/false) 300 // transition speed in ms ); y.setBrightness( device, // device object 100, // brightness percentage (1-100) 300 // transition speed in ms ); //si je clique sur eteindre alors la lumiere s'eteind: y.setPower( device, // device object false, // device state (true/false) 300 // transition speed in ms ); */ }); y.listen(); server.listen(8080);

et ma vue index.ejs

<!DOCTYPE html> <html lang="fr" dir="ltr"> <head> <meta charset="utf-8"> <title>Lamp</title> </head> <body> <h1>Yeelight</h1> <input type="button" id="on" value="Allumer"/> <input type="button" id="off" value="Eteindre"/> <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://localhost:8080'); $('#on').click(function () { socket.emit('on', 'on'); }) $('#off').click(function () { socket.emit('off', 'off'); }) </script> </body> </html>

Je suis débutant donc si il y a une meilleure façon de "ranger" mon code ou même de 'coder' ce système je suis preneur !

Merci d'avance pour vos pistes et conseils

3 réponses

Pandazaur, il y a 7 ans

Salut, je crois qu'il te manque toute la gestion de "socketio" coté serveur.

Sur ton UI, tu émet vers le serveur. Mais je ne vois pas de code indiquant ce que tu veux faire de lors de la réception de ces évènements coté serveur.

Ca devrait ressembler a un truc du genre:

const express = require('express'); const app = express(); const server = require('http').createServer(app); const io = require('socket.io')(http); app.use(express.static(__dirname + '/public')); app.get('/', function (req, res) { res.render('index.ejs'); }); app.use(function(req, res, next){ res.status(404).render('404.ejs'); }); io.on('connection', function(socket) { socket.on('on', function(value) { // Allume ta lampe } socket.on('off', function(value) { // Eteint ta lampe } })
FDRX65, il y a 7 ans

Bonjour, j'ai essayé de mettre :

io.on('connection', function(socket) { socket.on('on', function(value) { // Allume ta lampe } socket.on('off', function(value) { // Eteint ta lampe } })

dans ma fonction :

y.on('deviceconnected', function(device) { console.log('device connected');

mais il ne se passe rien

Pandazaur, il y a 7 ans

Et si tu la sors de ta fonction ? Une réaction de la part de l'event ?