laranjeira61 Posté(e) le 17 février 2015 Signaler Posté(e) le 17 février 2015 bonjour a tous, j'ai pour nouveau projet de réalisé un miroir domotique, la facon de celui ci : http://www.geek.com/news/raspberry-pi-used-to-build-motion-controlled-smart-mirror-that-compliments-you-1592778/ mais en utilisant l'api de notre box est d'une interface en flash qui permet d'avoir des animations. Je pence y ajouter l'état de l'alarme, l'image de camera ip,...) le seul probleme que je rencontre et dans le fait que l'api fibaro est sécurisé (login:password@ip/api/) est que pour le moment je n'arrive pas a l'utilisé dans flash, par contre si je recupere le resultat de la requete est que je l'insert dans un fichier texte, cela fonctionne. si quelqu'un a une idée pour resoudre mon probleme, je suis preneur car j'ai parcouru beaucoups de forums traitent de ce probleme mais sens aucune solution. merci. 1
Krikroff Posté(e) le 17 février 2015 Signaler Posté(e) le 17 février 2015 Bonjour qu'elle est votre expérience en flash / AS3 ? Le problème de flash c'est les ressources machine pour l'embarqué. Envoyé de mon smartphone
laranjeira61 Posté(e) le 17 février 2015 Auteur Signaler Posté(e) le 17 février 2015 on va dire que j'ai quelques connaisance en flash, avant de passer a la HC2 j'utilisé homeseer avec une interface flash xml.
Krikroff Posté(e) le 17 février 2015 Signaler Posté(e) le 17 février 2015 J'ai beaucoup développé sous Flash Builder avec le framework Flex et réalisé des applications client / serveur (socket TCP) c'était top Il faut que tu utilises un encodeur Base64 pour le user:password var encoder:Base64Encoder = new Base64Encoder(); encoder.encode("user:password"); puis passer ton entête d'authentification à ton objet URLRequest var credentials:URLRequestHeader = new URLRequestHeader("Authorization", "Basic " + encoder.toString()); urlRequestObject.requestHeaders.push(credentials); le tout ensuite dans ton loader Il faut penser aussi à paramétrer un fichier crossdomain sinon l'accès risque d'être restreint voir impossible, perso je l'ai toujours utilisé. Tu as déjà bien avancé sur ton projet niveau hardware ?
laranjeira61 Posté(e) le 17 février 2015 Auteur Signaler Posté(e) le 17 février 2015 voici le code que j'utilise qui fonctionne avec un fichier texte import com.adobe.serialization.json.JSON; import flash.net.URLLoader; import flash.net.URLRequest; var myRequest:URLRequest = new URLRequest("http://login:pasword@192.168.1.90/api/weather"); myRequest.method = URLRequestMethod.GET; var myLoader = new URLLoader myLoader.addEventListener(Event.COMPLETE, onload); myLoader.load(myRequest); function onload(evt:Event):void { var myData:Object = JSON.decode(myLoader.data); trace(myData.ConditionCode); trace(myData.Humidity); trace(myData.PreviousTemperature); humidity.text = myData.Humidity + " %"; prevHumidity.text = myData.PreviousHumidity + " %"; temp.text = myData.Temperature + " °c"; vent.text = myData.Wind + " Km/h"; prevTemp.text = myData.PreviousTemperature + " °c"; if (myData.WeatherCondition == "rain") { import flash.display.MovieClip; mete.gotoAndPlay(2); } } stop(); <?xml version="1.0"?> <cross-domain-policy> <allow-access-from domain="*" /> <allow-http-request-headers-from domain="*" headers="Authorization" /> </cross-domain-policy> voici le code que je viens d'essayer mais toujours sens succès import com.adobe.serialization.json.JSON; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLRequestHeader; import flash.net.URLRequestMethod; import flash.net.URLLoaderDataFormat; import com.hurlant.util.Base64; var request:URLRequest = new URLRequest("http://192.168.1.90/api/weather"); var credentials:String = Base64.encode("*****:*******"); var authHeader:URLRequestHeader = new URLRequestHeader("Authorization", "Basic " + credentials); var headers:Array = []; headers.push(authHeader); request.requestHeaders = headers; request.data = "aaskjdhaskdajhdk"; request.method = URLRequestMethod.POST; var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.TEXT; loader.addEventListener(Event.COMPLETE, onload); // load the request.. loader.load(request); function onload(evt:Event):void { var myData:Object = JSON.parse(loader.data); trace(myData.ConditionCode); trace(myData.Humidity); trace(myData.PreviousTemperature); humidity.text = myData.Humidity + " %"; prevHumidity.text = myData.PreviousHumidity + " %"; temp.text = myData.Temperature + " °c"; vent.text = myData.Wind + " Km/h"; prevTemp.text = myData.PreviousTemperature + " °c"; if (myData.WeatherCondition == "rain") { import flash.display.MovieClip; mete.gotoAndPlay(2); } } stop();
laranjeira61 Posté(e) le 17 février 2015 Auteur Signaler Posté(e) le 17 février 2015 coté hardware, pour le moment rien de bien précis, je me concentre sur le software. je pence utilisé la nouvel version du Raspberry pi qui semble fonctionné avec Windows donc a partir de mon flash je n’aurai qu'a générer un .exe en fullscreen. après je ne sais pas encore si je prend un grand moniteur en portait ou un plus petit avec des commandes tactiles dans le bas (ex : miroir de salle de bain avec le control des enceintes Sonos)
laranjeira61 Posté(e) le 17 février 2015 Auteur Signaler Posté(e) le 17 février 2015 j’oubliai, je message d'erreur générer dans flash (cs6 essayer avec différente version du player) Erreur d'ouverture de l'URL 'http://192.168.1.90/api/weather' Error #2044: ioError non pris en charge : text=Error #2032: Erreur de flux. URL: http://192.168.1.90/api/weather at testmiroir_fla::MainTimeline/frame1()[testmiroir_fla.MainTimeline::frame1:36]
Krikroff Posté(e) le 17 février 2015 Signaler Posté(e) le 17 février 2015 Je vais peut-être dire des bêtises mais il me semble que la version Windows 10 qui tourne sur le RPI2 est une version RT, WinRT et flash ne fait pas bon ménage de plus incompatible avec Adobe Air , il faudrait tester sur une surface sous WinRT pour voir... Pour le code, il faut instancier l'objet URLRequest avant de lui passer l'entête sinon ça ne marche pas. Tu peux essayer ceci (je n'ai pas testé): var myRequest:URLRequest = new URLRequest("http://192.168.1.90/api/weather"); myRequest.method = URLRequestMethod.GET; var encoder:Base64Encoder = new Base64Encoder(); encoder.encode("****:*******"); var credentials:URLRequestHeader = new URLRequestHeader("Authorization", "Basic " + encoder.toString()); myRequest.requestHeaders.push(credentials); var myLoader:URLLoader = new URLLoader(); myLoader.addEventListener(Event.COMPLETE, onload); myLoader.load(myRequest); Reste ensuite peut-être le probleme du cross domaine
laranjeira61 Posté(e) le 18 février 2015 Auteur Signaler Posté(e) le 18 février 2015 malheureusement cela ne fonctionne toujours pas . j'ai créer un crossdomain.xml j'ai poster le code plus haut, j’espère que c'est bon? je n'avais pas regarder en détail pour le RPI2, sinon il reste un NUC
Krikroff Posté(e) le 18 février 2015 Signaler Posté(e) le 18 février 2015 Oui je pense que le NUC est la solution idéal (sauf pour la conso). Toujours le même message d'erreur ?
laranjeira61 Posté(e) le 18 février 2015 Auteur Signaler Posté(e) le 18 février 2015 Oui toujours le même message
Krikroff Posté(e) le 18 février 2015 Signaler Posté(e) le 18 février 2015 Bon ça marche plutôt bien chez moi Retour de l' API: [SWF] fibaro.swf - 4394 octets après décompression Data loaded. PreviousTemperature: 5.00 Temperature: 4 PreviousConditionCode: 27 saveLogs: 1 PreviousWeatherConditionConverted: fog ConditionCode: 26 PreviousHumidity: 81.00 WeatherCondition: rain Wind: 11.27 PreviousWind: 9.66 WeatherConditionConverted: cloudy Humidity: 87.00 TemperatureUnit: C Code AS3: var myRequest:URLRequest = new URLRequest("http://192.168.1.220/api/weather"); myRequest.method = URLRequestMethod.GET; var encoded:String = encode("admin:password"); var credentials:URLRequestHeader = new URLRequestHeader("Authorization", "Basic " + encoded); myRequest.requestHeaders.push(credentials); var myLoader:URLLoader = new URLLoader(); myLoader.addEventListener(Event.COMPLETE, onload); myLoader.load(myRequest); function onload(event:Event):void { var result:Object = JSON.parse(myLoader.data); trace("Data loaded."); for (var key:String in result) { trace(key + ': ' + result[key]); } } Et au niveau animation / graphisme tu maitrises ? tu as des screens... Je suis chaud patate !!!
laranjeira61 Posté(e) le 18 février 2015 Auteur Signaler Posté(e) le 18 février 2015 Dsl je ne suis plus devant mon écran. Je test ton code demain matin. Tu utilise quel version de flash? Pour les graphiques pour le moment j'ai recuperer une série d'icônes de météo et en fonction du retour le l'api je change d'image sur un clip. Prochaine étape faire des icônes animés. Peut tu m'envoyer stp ton fla que je voie ou cela ne va pas dans mon code? Tu utilise quel encodeur? Dès que cela fonctionne je fait des captures
Krikroff Posté(e) le 18 février 2015 Signaler Posté(e) le 18 février 2015 Je ne suis pas àla maison donc pour le fichier cela sera dans la soirée et pas forcément de bonne heure désolé J'ai testé le code sous flash CS6 mais peut importe si ta librairie flash.* est récente. Pour l'encodeur Base64 c'est juste une méthode que j'avais dans les tiroirs mais n'importe quelle classe ou méthode fonctionne ou la lib native si tu utilises Flex et FlashBuilder mais si tu n'es pas habitué àtravailler avec éclipse tu vas être dérouté. Il y a plein d'exemple Base64 sur le Net Sinon dans mon code rien de compliqué, j'ai créé une action sur la première Keyframe du movieclip principale et codé dedans, rien de structuré, juste histoire de tester les traces. JC Envoyé de mon smartphone
laranjeira61 Posté(e) le 18 février 2015 Auteur Signaler Posté(e) le 18 février 2015 ok pas de problème, je viens de copier ton code plus haut dans un nouveau fichier, en remplacent mon ip et mot de passe, j'ai télécharger un encodeur base64, dans les paramètre d’action-script, j'ai ajouter le chemin de bibliothèque pour mon fichier base64.swc pour que ton code fonctionne j'ai du ajouter "Base64" devant encode. mais toujour le meme message d'erreur! je n'y comprend plus rien var myRequest:URLRequest = new URLRequest("http://192.168.1.90/api/weather"); myRequest.method = URLRequestMethod.GET; var encoded:String = Base64.encode("admin:***********"); var credentials:URLRequestHeader = new URLRequestHeader("Authorization", "Basic " + encoded); myRequest.requestHeaders.push(credentials); var myLoader:URLLoader = new URLLoader(); myLoader.addEventListener(Event.COMPLETE, onload); myLoader.load(myRequest); function onload(event:Event):void { var result:Object = JSON.parse(myLoader.data); trace("Data loaded."); for (var key:String in result) { trace(key + ': ' + result[key]); } }
Nico Posté(e) le 18 février 2015 Signaler Posté(e) le 18 février 2015 Hum, ça me plait bien cette histoire, pour mon miroir du couloir tiens ! Vais suivre vos points ! 1
Krikroff Posté(e) le 18 février 2015 Signaler Posté(e) le 18 février 2015 @laranjeira61, je te donne le fichier .fla ce soir
carfnann Posté(e) le 18 février 2015 Signaler Posté(e) le 18 février 2015 oh pinaise oh pinaise j'en veux!!! Shut up and take my money! avez vous vu ce projet la? http://sebastien.warin.fr/2014/12/16/1534-the-mirror-votre-miroir-domotique-connecte-geek-is-in-da-house-2014/#prettyPhoto
Krikroff Posté(e) le 18 février 2015 Signaler Posté(e) le 18 février 2015 Oui d’ailleurs c'est un furieux... Obligé de tomber sur son blog un jour ou l'autre si tu codes C# et que tu aimes es objets connectés Bon c'est la grosse artillerie et clairement je préfère aussi ce type de développements, aussi la plateforme Constellation je suis très curieux, mais cela n'est pas la volonté je pense de laranjeira61
pepite Posté(e) le 18 février 2015 Signaler Posté(e) le 18 février 2015 je suis je suis ..tres interesse ;-) THe MiRROR : WAOUW !!!
laranjeira61 Posté(e) le 18 février 2015 Auteur Signaler Posté(e) le 18 février 2015 merci Krikroff, on dirrai qu'il y a de la demande, il va faloir que je fasse quelques chose de propre et utilisable pas tout le monde, je vais creer un fichier ini pour la config de l'adresse de la box et des identifiants. tu a tout a fait raison Krikroff, je ne veux pas me lancer dans une usine a gaz, juste remplacer le miroir de la salle de bain comme sa le matin l'info de la météo, de la température, le soir vérifier que l'alarme et activé et quand j'aurai inverti dans du sonos, lancer de la music.
HANSOLO Posté(e) le 18 février 2015 Signaler Posté(e) le 18 février 2015 Bien sur qu'il y a de la demande!
Nico Posté(e) le 18 février 2015 Signaler Posté(e) le 18 février 2015 Mais tu veux dire que le miroir pourrait devenir tactile ?
laranjeira61 Posté(e) le 18 février 2015 Auteur Signaler Posté(e) le 18 février 2015 Pas vraiment tactile, juste avoir 2 ou 3 bouton capacitif un peut comme une plaque induction
Messages recommandés