lbouriez Posté(e) le 12 avril 2015 Signaler Posté(e) le 12 avril 2015 @Ibouriez La v4... de Sarah ? Dans mes précédents posts quand je parle de la v4, c'est celle de la box HC2. Pour ce qui est de Sarah ma modif. a été effectué sur la v3.16. @Byackee Nickel ! Comment comptes-tu t'y prendre pour avoir les "case" de tous les modules ? La v4 de fibaro
byackee Posté(e) le 13 avril 2015 Signaler Posté(e) le 13 avril 2015 J ai commencé a modifié le fichier js, il est dispo sur mon github. Les actions sur lumières binaires fonctionnent mais je n ai pas testé le reste (pas beaucoup de temps) Je reprends ça demain Envoyé de mon PE-TL10 en utilisant Tapatalk
byackee Posté(e) le 13 avril 2015 Signaler Posté(e) le 13 avril 2015 J ai fait ça un peu a l arrache, je remet ça propre très vite Envoyé de mon PE-TL10 en utilisant Tapatalk
lbouriez Posté(e) le 14 avril 2015 Signaler Posté(e) le 14 avril 2015 Alors, toujours un souci sur les walls plug. Il faut rajouter dans le switch module.type case 'com.fibaro.FGWP101': Et malgré ça, ça ne marche pas Ils ont peut être changé un truc dans l'API et on ne peut plus simplement contrôler les wallplugs via des requêtes ?
synthetic Posté(e) le 14 avril 2015 Signaler Posté(e) le 14 avril 2015 Tu dois modifier ou ajouter 2 lignes du code : - Sous : "var get_value = function ( module, value ) { switch ( module.baseType ) {" Ajoute ces lignes : case 'com.fibaro.FGWP101': return (value == 'false'? 0: 1); break; - Sous : "var say = function ( module, callback ) { switch ( module.baseType ) {" Ajoute ces lignes : case 'com.fibaro.FGWP101': var string = module.name + " est " + (module.properties.value == '0'? ' éteint': ' allumé'); if (module.properties.valueSensor && module.properties.valueSensor !="") string += ' et la consommation est de ' + returnString(module.properties.valueSensor,".",",") + get_unit(module); output (callback, string); break; Tiens moi au courant
lbouriez Posté(e) le 14 avril 2015 Signaler Posté(e) le 14 avril 2015 Nope, aucune erreur, le plugin me dit ok mais aucune action ! Uniquement pour ce type de module
synthetic Posté(e) le 14 avril 2015 Signaler Posté(e) le 14 avril 2015 (modifié) Peut-être que Byackee pourra t'aider... Je ne peux pas faire plus car je n'ai pas de WallPlug pour tester. As tu récuperé le fichier js de Byackee sur son github ? Regarde ses modifs pour les lumières binaires, ce sera peut-être une piste pour ton WallPlug. Modifié le 14 avril 2015 par synthetic
synthetic Posté(e) le 14 avril 2015 Signaler Posté(e) le 14 avril 2015 Et comme ça ? : case 'com.fibaro.FGWP101': if ( value == 'true' || value == 'false') { return (value == 'false'? 0: 1); break; case 'com.fibaro.FGWP101': output (callback, module.properties.value == '0'? 'c\'est éteint': 'c\'est allumé'); break;
lbouriez Posté(e) le 14 avril 2015 Signaler Posté(e) le 14 avril 2015 Oui j'ai récupéré la dernière version justement. Et non, ca ne change rien Si je récupère l'url et que je la lance dans chrome j'obtiens ce résultat (avec le wallplug qui ne réagit toujours pas): URL : MON_IP/api/callAction?deviceID=54&name=setValue&arg1=1 Résultat : {"id":0,"jsonrpc":"2.0","result":{"result":1}}
akrobat Posté(e) le 21 mai 2015 Signaler Posté(e) le 21 mai 2015 Bonjour j'ai fait du debug a l'arrache ce soir si ca vous interresse: les switch fonctionnent, la variation fonctionne et les volets fonctionnent (avec un petit bug sur le retour d'état) exports.init = function (SARAH){ status(SARAH.ConfigManager.getConfig()); } exports.action = function(data, callback, config){ console.log('##### Home Center 2 #####'); var config = config.modules.homecenter2; switch (data.request) { case 'set': get_rooms( set, data, callback, config ); break; case 'get': get_rooms( get, data, callback, config ); break; case 'launch': get_rooms( set, data, callback, config ); break; case 'updatedevices': get_rooms(update, data, callback, config ); break; case 'updaterooms': get_rooms(update, data, callback, config ); break; default: output(callback, "Une erreur s'est produite: "); } } var get_rooms = function ( action, data, callback, config ) { var http = require('http'); var options = { hostname: config.ip, port: 80, path: '/api/rooms', auth: config.login + ':' + config.password }; var request = data.request; http.get(options, function(res) { var buffer = ''; res.on('data', function (chunk) { buffer += chunk; }); res.on('end', function(){ var jsonrooms = JSON.parse(buffer); get_modules(jsonrooms, action, data, callback, config); }); }).on('error', function(e) { output(callback, "Une erreur s'est produite: " + e.message); }); } var get_modules = function ( jsonrooms, action, data, callback, config ) { var http = require('http'); var options = { hostname: config.ip, port: 80, path: '/api/devices', auth: config.login + ':' + config.password }; var request = data.request; http.get(options, function(res) { var buffer = ''; res.on('data', function (chunk) { buffer += chunk; }); res.on('end', function(){ var json = JSON.parse(buffer); get_scenes(jsonrooms, json, action, data, callback, config); }); }).on('error', function(e) { output(callback, "Une erreur s'est produite: " + e.message); }); } var get_scenes = function ( jsonrooms, json, action, data, callback, config ) { var http = require('http'); var options = { hostname: config.ip, port: 80, path: '/api/scenes', auth: config.login + ':' + config.password }; var request = data.request; http.get(options, function(res) { var buffer = ''; res.on('data', function (chunk) { buffer += chunk; }); res.on('end', function(){ json = json.concat(JSON.parse(buffer)); action(jsonrooms, json, data, callback, config); }); }).on('error', function(e) { output(callback, "Une erreur s'est produite: " + e.message); }); } var get = function (jsonrooms, json, data, callback, config) { console.log("***** GET *****"); var text = data.module; var text2 = data.room; var value = data.value; for ( var i = 0; i < jsonrooms.length; i++ ) { var rooms = jsonrooms[i]; var tokens = rooms.name.split(' '); var found = true; for ( var j = 0; found && j < tokens.length; j++ ) { found = new RegExp(tokens[j],'i').test(text2); } console.log ( "Found rooms (" + i + ") " + rooms.name + ": " + found ); if ( found ) { for ( var i = 0; i < json.length; i++ ) { var module = json[i]; var tokens = module.name.split(' '); var found = true; if (rooms.id == module.roomID){ for ( var j = 0; found && j < tokens.length; j++ ) { found = new RegExp(tokens[j],'i').test(text); } console.log ( "Found modules (" + i + ") " + module.name + ": " + found ); if ( found ) { return say(module, callback); } } } } } console.log('rien trouvé'); return output( callback, 'je ne sais pas'); } var set = function (jsonrooms, json, data, callback, config ) { console.log("***** SET *****"); var text = data.module; var text2 = data.room; var value = data.value; for ( var i = 0; i < jsonrooms.length; i++ ) { var rooms = jsonrooms[i]; var tokens = rooms.name.split(' '); var found = true; for ( var j = 0; found && j < tokens.length; j++ ) { found = new RegExp(tokens[j],'i').test(text2); } console.log ( "Found rooms (" + i + ") " + rooms.name + ": " + found ); if ( found ) { for ( var i = 0; i < json.length; i++ ) { var module = json[i]; var tokens = module.name.split(' '); var found = true; if (rooms.id == module.roomID){ for ( var j = 0; found && j < tokens.length; j++ ) { found = new RegExp(tokens[j],'i').test(text); } console.log ( "Found (" + i + ") " + module.name + ": " + found ); if ( found ) { if ( data.request == "set") { if(module.type=='com.fibaro.binarySwitch'){ var http = require('http'); var options = { hostname: config.ip, port: 80, path: '/api/callAction?deviceID='+module.id+"&name="+get_value(module,value), auth: config.login + ':' + config.password }; }else{ var http = require('http'); var options = { hostname: config.ip, port: 80, path: '/api/callAction?deviceID='+module.id+"&name=setValue&arg1="+get_value(module,value), auth: config.login + ':' + config.password }; } console.log(options); } else { console.log('run scene'); var http = require('http'); var options = { hostname: config.ip, port: 80, path: '/api/sceneControl?id='+module.id+"&14&action=start", auth: config.login + ':' + config.password }; } http.get(options, function(res) { var buffer = ''; res.on('data', function (chunk) { buffer += chunk; }); res.on('end', function(){ setTimeout((function() { if ( data.request == "set") { get_rooms( get, data, callback, config ); } else { output(callback, "fait"); } }), 500); }); }).on('error', function(e) { output(callback, "Une erreur s'est produite: " + e.message); }); return } } } } } console.log('rien trouvé'); return output( callback, 'vous pouvez répéter la question'); } var get_value = function ( module, value ) { switch ( module.type ) { case 'com.fibaro.binarySwitch': return (value == 'false'? 'turnOff': 'turnOn'); break; case 'com.fibaro.multilevelSwitch': if ( value == 'true' || value == 'false') { return (value == 'false'? 0: 99); } else { console.log('retour de valeur:'+value); return value; break; } case 'com.fibaro.FGR221': if ( value == 'true' || value == 'false') { return (value == 'false'? 0: 99); } else { console.log('retour de valeur:'+value); return value; break; } case 'com.fibaro.FGRM222': if ( value == 'true' || value == 'false') { return (value == 'false'? 0: 99); } else { console.log('retour de valeur:'+value); return value; break; } } } var say = function ( module, callback ) { switch ( module.type ) { case 'com.fibaro.multilevelSensor': output (callback, 'la ' + module.name + ' est de ' + module.properties.value + get_unit(module)); break; case 'com.fibaro.binarySwitch': var string = module.name + " est " + (module.properties.value == 'false'? ' éteint': ' allumé'); if (module.properties.valueSensor && module.properties.valueSensor !="") string += ' et la consommation est de ' + returnString(module.properties.valueSensor,".",",") + get_unit(module); output (callback, string); break; case 'com.fibaro.multilevelSwitch': output (callback, module.properties.value == '0'? 'c\'est éteint': 'c\'est allumé à' + module.properties.value + 'pour cent'); break; case 'com.fibaro.humiditySensor': output (callback, 'le taux d\'humidité est de ' + module.properties.value + get_unit(module)); break; case 'com.fibaro.multilevelSensor': output (callback, 'la valeur de ' + module.name + ' est de ' + module.properties.value + get_unit(module)); break; case 'com.fibaro.doorSensor': output (callback, module.name + (module.properties.value == '0'? ' est fermé': ' est ouvert ')); break; case 'com.fibaro.lightSensor': output (callback, 'la ' + module.name + ' est de ' + module.properties.value + get_unit(module)); break; case 'com.fibaro.FGR221': output (callback, module.name + (module.properties.value == '0'? ' est fermé': ' est ouvert ')); break; case 'com.fibaro.FGRM222': output (callback, module.name + (module.properties.value == '0'? ' est fermé': ' est ouvert ')); break; case 'com.fibaro.motionSensor': output (callback, (module.properties.value == '0'? ' pas de mouvements sur ': ' detection présence sur') + module.name ); break; default: output(callback, "Je ne peux pas exécuter cette action"); } } var get_unit = function ( module ) { var unit = module.properties.unit; if (unit == "") unit = module.properties.unitSensor switch ( unit ) { case 'W': return ' watt'; case '%': return ' pour cent'; case 'C': return ' degrés'; case 'F': return ' degrés'; case 'Lux': return ' Lux'; default: return ' '; } } var output = function ( callback, output ) { console.log(output); callback({ 'tts' : output}); } var update = function(jsonrooms, json, data, callback, config){ console.log("***** UPDATE *****"); if (!data.directory){ console.log('il n\'y a pas de dossier spécifié'); return false; } var fs = require('fs'); var file = data.directory + '/../plugins/homecenter2/homecenter2.xml'; var xml = fs.readFileSync(file,'utf8'); var replace = '§ -->\n'; replace += ' <one-of>\n'; for ( var i = 0; i < json.length; i++ ) { var module = json[i]; var tokens = module.name.split(' '); replace += ' <item>'+module.name+'<tag>out.action.module="'+module.name+'"</tag></item>\n'; console.log('ajout de : ' + module.name); } replace += ' </one-of>\n'; replace += '<!-- §'; var replace2 = '@ -->\n'; replace2 += ' <one-of>\n'; for ( var i = 0; i < jsonrooms.length; i++ ) { var module = jsonrooms[i]; var tokens = module.name.split(' '); replace2 += ' <item>'+module.name+'<tag>out.action.room="'+module.name+'"</tag></item>\n'; console.log('ajout de : ' + module.name); } replace2 += ' </one-of>\n'; replace2 += '<!-- @ '; var regexp = new RegExp('§[^§]+§','gm'); var regexp2 = new RegExp('@[^@]+@','gm'); var xml = xml.replace(regexp,replace); xml = xml.replace(regexp2,replace2); fs.writeFileSync(file, xml, 'utf8'); fs.writeFileSync(file, xml, 'utf8'); var file = data.directory + '/../plugins/homecenter2/portlet.html'; var xml = fs.readFileSync(file,'utf8'); var replace = '§ -->\n'; replace += '<BR>nombre de modules = <b>'+json.length+'</b></BR>\n'; replace += 'nombre de pieces = <b>'+jsonrooms.length+'</b></BR>\n'; replace += '<!-- §'; var regexp = new RegExp('§[^§]+§','gm'); var xml = xml.replace(regexp,replace); fs.writeFileSync(file, xml, 'utf8'); fs.writeFileSync(file, xml, 'utf8'); callback({ 'tts' : 'j\'ai trouvé ' + json.length + ' modules et ' + jsonrooms.length + ' pieces'}); console.log('j\'ai trouvé ' + json.length + ' modules et ' + jsonrooms.length + ' pieces'); } var returnString = function (data, stringtoreplace, word) { var str = data; str = str.replace(stringtoreplace,word); //console.log('return: ' + str); return str; } var status = function (config) { var config = config.modules.homecenter2; var http = require('http'); var options = { hostname: config.ip, port: 80, path: '/api/devices', auth: config.login + ':' + config.password }; http.get(options, function(res) { res.on('data', function (chunk) { }); res.on('end', function(){ console.log("alive"); status = 'alive'; }); }).on('error', function(e) { console.log("dead"); status = 'dead'; }); return status; } exports.status = status;
akrobat Posté(e) le 21 mai 2015 Signaler Posté(e) le 21 mai 2015 hc2sar.PNG update devices et romms me donne la meme chose regarde mon post précèdent. remplace ton fichier par le miens (sauvegarde quand même l'ancien au cas ou)
Eliah Posté(e) le 26 mai 2015 Signaler Posté(e) le 26 mai 2015 Voilà ce que j'obtient personnellement dans le log du serveur .. Même problème avec ton script Akrobat. "Je ne peux exécuter cette action"... ##### Home Center 2 ##### ***** SET ***** Found rooms (0) Salon: true Found (12) Prise Salon: true { hostname: '192.168.1.4', port: 80, path: '/api/callAction?deviceID=25&name=setValue&arg1=undefined', auth: 'xxxx:xxxx' } ***** GET ***** Found rooms (0) Salon: true Found modules (12) Prise Salon: true Je ne peux pas exécuter cette action info: Run homecenter2: 584ms
Eliah Posté(e) le 26 mai 2015 Signaler Posté(e) le 26 mai 2015 et j'ai pourtant 33 modules trouvés et 4 pièces dans l'interface d'accueil du module HC2 1.3 PS : il y a du mieux avec cette version mais mes WallPlug ne fonctionnent tjs pas.. https://drive.google.com/file/d/0B0PuPr--nYy8QmIzU0tTVTBNUzA/view
akrobat Posté(e) le 29 mai 2015 Signaler Posté(e) le 29 mai 2015 Salut! Je n'ai pas de Walle plug, j'ai débuger la version existante pour qu'elle fonctionne avec la V4 voir le principe de fonctionnement et confirmer que la reconnaissance vocale fonctionne bien avec mes switch, dimmer et roller shutter. Je vais maintenant commencer (semaine prochaine) a faire mon plugin que je distribuerais à la communauté quand il sera terminé. Le plugin existant est sympa et le boulot effectué est énorme, mais certaines choses ne correspondent pas a mon utilisation du HC2, notamment dans les phrases type générée dans le fichier XML. Je veux rendre les commandes plus naturelles. Si tu veux, des que j'ai un truc exploitable je t'envoi ma version. Pour ton probleme de wall plug, dans le switch case il faudrait que tu rajoute un logger au debut du switch case pour voir le nom exacte de la classe du module que le hc2 transmets (ils ont changé depuis la V4) et ensuite via l'API rest, tu interroges le HC2 pour connaitre les méthodes disponibles pour le module (là encore les noms des méthodes et les paramètres ont changés depuis la V4). Et si tu ne comprends pas ce que je viens de te t'écrire (parce que tu n'es pas développeur ), je regarde la semaine pro (si j'ai le temps) pour te donner le code a mettre en place pour corriger ton probleme. @ plush!
MasterBT Posté(e) le 29 mai 2015 Signaler Posté(e) le 29 mai 2015 @akrobat, Je serais également intéressé quand tu auras finis, je viens de migrer de V3 àV4 mais je ne suis pas pressé car ce n'est pas les fonctions les plus importantes sur sarah àmon goût car on ira tjs plus vite àappuyer sur un inter.
Messages recommandés