Aller au contenu

akrobat

Membres confirmés
  • Compteur de contenus

    30
  • Inscription

  • Dernière visite

À propos de akrobat

  • Date de naissance 02/02/1984

Profile Information

  • Sexe :
    Male
  • Ville :
    Strasbourg
  • Box
    Home Center 2
  • Version
    4.042 (c'est comme une version stable mais en béta ^^)

akrobat's Achievements

Newbie

Newbie (1/14)

1

Réputation sur la communauté

  1. Bonjour, quel navigateur utilisez-vous? Avez-vous déjàeu ce phénomène avec d'autre de vos périphériques Z-wave? Si le problème ne vient pas du navigateur je ne vois pas d'autre solution que d'essayer de supprimer puis de ré-inclure le module. Si le problème persiste, peut -être faudrait-il prendre contact avec le support fibaro. Il sont plutôt réactif, mais il faut se donner la peine de leur écrire en anglais.
  2. 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!
  3. regarde mon post précèdent. remplace ton fichier par le miens (sauvegarde quand même l'ancien au cas ou)
  4. 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;
  5. Salut! Tu pourrais donner la référence exacte du moteur afin de regarder dans la notice pour t'indiquer quoi utiliser? (normalement pas besoin de bidouillage dans la télécommande, simple switch suffit, mais àvérifier)
  6. Et sinon toujours la notification qui de rester en 3.6 ? avant de faire l'update?
  7. Salut tout le monde! Est ce que l'avertissement expliquant que pour le moment la V4 n'est pas stable est toujours présent avant l'installation?
  8. Salut tout le monde ! Alors en conclusion "MAJ vers 4.33 depuis 3.6" ou "Ne fait rien du tout reste comme ça"? (Je connais déjà la réponde Cédric ^^) Un petit sondage ?
  9. BINGO! Bon j'ai eu une réponse (les mauvaises langues en sont pour leurs frais ) Alors, le support m'a indiqué que la demande est transmise à l'équipe de développement et que ça devrait être livré dans une version future.... Mais ils m'ont également donné une solution de contournement plus élégante que la porte de garage dans le salon. Elle consiste à ne pas assigner le module a la pièce (le laisser non assigner) et de rajouter un module virtuel (pourquoi pas type curseur pour gérer la position de l'écran?) afin de transmettre les instruction en LUA au FGR221/222 en question et d'assigner ce module virtuel au salon. Le module virtuel n'aurait de fait que la fonction de proxy / passe-plat. Je vais scripter ça et mettre à disposition prochainement pour ceux qui ont le même problème! ;-) (Merci Did et Lazer pour vos réponses
  10. Mouai donc le seul espoir c'est d'attendre que le support veuille bien me répondre, mais quand je vois le temps qu'ils mettent pour activer mon compte sur leur forum j'ai peur de devoir attendre ma réponse encore longtemps...
  11. Bien évidement, j'ai même fais une mise à jour vers la V4 béta en espérant que le problème n'y soit plus, mais rien n'y fais, j'ai donc utilisé les outils de recovery afin de revenir dans une version stable. A part "rooter" le HC et rajouter moi même l'option dans le source, je ne vois pas comment faire. Quelqu'un sait "rooter" son hc 2 sur le forum? je suis preneur.
  12. Heu, je suis sur un FGR222 et pas FGR221, mais je suppose que ça ne change rien juste peut être l'emplacement du post dans le forum. Quelqu'un sait si le support FIBARO est réactif? parce que je viens de faire un mail, j'ai un ticket d'incident, mais d'après ce que j'ai pu lire sur le forum officiel de fibaro, les membres du support ne sont quasiment pas réactif....
  13. bon je viens de faire le test en porte de garage, c'est pire... en fait quand je clique sur "fermeture volet" sur l'application de l'iphone, l'écran de projection ne répond plus, donc c'est bon. Par contre une fois tous les volets en bas je vois encore l'icône fenêtre ouverte au lieu de fermée dans l'application iphone(forcement puisqu'une ouverture, la porte de garage <- qui est mon écran est en position haute) donc quand je clique dessus, les volets ne s'ouvrent pas ... Bref de la daube. je ne comprends pas que Fibaro n'est pas prévu le coup... Pas moyen de trifouiller dans le code en ssh ou un truc comme ca?
  14. Je vais faire le test, mais la solution ne plait vraiment pas :-( (je sais tu n'y est pour rien :-)) il n'y a pas moyen de trifouiller directement le code l'application ?
  15. Effectivement j'ai des BSO classifiés dans store vénitien et une porte de garage électrique qui va aussi être domotisée... Je préférerais une solution plus élégante que de typé une écran de projection comme porte de garage dans mon salon (qui restera du coup comptabilisée comme une ouverture et laissera le point bleu dans l'application iphone pour signifier que la pièce n'est pas fermée totalement....
×
×
  • Créer...