Aller au contenu

Recommended Posts

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.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

on va dire que j'ai quelques connaisance en flash, avant de passer a la HC2 j'utilisé homeseer avec une interface flash xml.

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

 

:)

Partager ce message


Lien à poster
Partager sur d’autres sites

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();

Partager ce message


Lien à poster
Partager sur d’autres sites

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)

Partager ce message


Lien à poster
Partager sur d’autres sites

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]

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

:)

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui je pense que le NUC est la solution idéal (sauf pour la conso).

 

Toujours le même message d'erreur ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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 !!!

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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]);
}
}
 

Partager ce message


Lien à poster
Partager sur d’autres sites

Hum, ça me plait bien cette histoire, pour mon miroir du couloir tiens ! Vais suivre vos points !

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@laranjeira61, je te donne le fichier .fla ce soir ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :D

 

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 ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

je suis je suis ..tres interesse ;-)

 

THe MiRROR : WAOUW !!!

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

Mais tu veux dire que le miroir pourrait devenir tactile ?

Partager ce message


Lien à poster
Partager sur d’autres sites

×