Aller au contenu

akrobat

Membres confirmés
  • Compteur de contenus

    30
  • Inscription

  • Dernière visite

Tout ce qui a été posté par akrobat

  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....
  16. Bonjour tout le monde! J'ai une petite question technique concernant ce module. Je l'ai installé sur tous mes volets et BSO sans problème, mais j'ai un soucis sur mon écran de vidéo projection Je m'explique: Dans la configuration du module il est possible/souhaitable d'indiquer quel type d'appareil le module contrôle, le problème c'est qu'il n'est possible que de définir les types volet, store ou porte de garage et donc quand je clique sur le bouton volet pour fermer toutes les ouvertures de la maison sur l'interface de l'application iphone, mon écran de projection descend avec... bref c'est embêtant. Y'a t'il une solution pour ajouter un type d'appareil à la liste ou définir ce module dans "autre module"?
  17. akrobat

    Fibaro - Motion Sensor

    Il est làcomme je l'avais prédis ;-) http://www.fibaro.com/en/the-fibaro-system/motion-sensor !!!!!!!!!!!!!!
  18. akrobat

    Fibaro - Motion Sensor

    Oui en général c'est mis àjour dans la journée... Donc, en théorie, le lancement officiel devrait se faire aujourd'hui:D
  19. akrobat

    Fibaro - Motion Sensor

    Devinez ce que je viens de trouver en modifiant une url du site fibaro.com : http://www.fibaro.com/en/the-fibaro-system/motion-sensor
  20. akrobat

    Mon installation

    Ok, c'est plus clair ;-) merci pour les infos :-)
  21. akrobat

    Mon installation

    Mais pour communiquer avec ton FGS ça fonctionne comment ? Tu branches quelque chose sur ton module et ce quelque chose est activé par tes impulsions de phares? En regardant la doc en polonais sur le site où tu commandes (je comprends pas le polac) mais j'arrive à voir 433,92 MHz sur le PDF et sur Wikipédia en français (oufff ): Z-Wave fonctionne dans la gamme de fréquences sous-gigahertz, qui dépend des régions (868 MHz en Europe, 908 MHz aux US, et d'autres fréquences suivant les bandes ISM des régions). Maintenant si tu me dis que ça n'a rien à voir... Je veux bien que tu m'expliques plus précisément le fonctionnement.... (sans faire un tuto mais juste les grandes lignes)
  22. akrobat

    Mon installation

    Fais attention aux fréquences que va utiliser ton module, car s'il vient d'un autre pays il risque d'être incompatible avec ton Home center
  23. akrobat

    Mon installation

    Bonjour, Ok l'idée est séduisante, je me suis fais la même réflexion en regardant la vidéo de présentation Fibaro, mais attention à bien conditionner l'ouverture à l'aide de scripts, parce que si un jour votre voiture squatte devant chez vous durant la nuit (pour une raison x ou y elle n'est pas dans le garage) ou durant la journée (vous avez fait du covoiturage avec madame), une personne au courant n'aura qu'a casser la vitre pour faire deux appels de phare et ouvrir votre garage et probablement rentrer chez vous. A moins que vous ne conditionniez l'ouverture en vous basant sur "l'état de votre domicile" du genre : Si je suis absent et que appel de phare alors ouverture de la porte Si le scénario nuit est lancé et que appel de phare alors la porte reste fermé et je reçois une notification tentative d'effraction sur mon smartphone (mais du coup il ne faut pas ouvrir avec les phares en revenant d'une soirée poker sans madame qui dort déjà ...) Attention, coupler avec la proximité du smartphone ne me semble pas être la solution parce que si quelqu'un essaye de s'introduire la nuit, il y'a fort a parier que votre smartphone sera dans votre maison et vous dans votre lit ;-) Ceux ne sont que des exemples, mais je crois qu'il faut être prudent avec ce genre de fonctionnalité, surtout quand on sait que les phares non pas besoin d'avoir le contact pour fonctionner.
  24. akrobat

    Fibaro - Motion Sensor

    Et c'est aujourd'hui... et toujours rien! Hop hop hop Fibaro! J'ai une commande a passer moi! ;-)
×
×
  • Créer...