Aller au contenu
Lionel57

Echange Données Portables Android - Hc2

Recommended Posts

Fier de vous présenter mon projet

 

Surtout fier parce que je découvre Java et android depuis 5 jours à  peine et que ça a été laborieux.

 

Pour le moment, mon projet est simple, mais je ne compte pas en rester là ...

 

Pour le moment, mon application android envoie la date et l'heure de la prochaine alarme à  la HC2.

 

J'explique, jusqu'à  présent, j'avais une variable globale Reveil sur laquelle se base différentes actions (allumage progressif de la lampe de la chambre, allumage du chauffage 30 minutes avant, allumage de ma cafetière, ouverture des volets...).

 

Seulement voilà , je ne me lève pas tous les jours à  la même heure. Donc jusqu'à  présent, je devais changer la valeur de cette variable à  chaque changement. 

 

Aujourd'hui, j'ai décidé de faire simple, le changement de l'alarme de mon portable se chargera de changer la variable globale. En bref, je me contente de régler mon réveil sur l'appli standard de mon téléphone, comme avant la HC2 avec les avantages de maintenant, avec la HC2.

 

Sur la HC2, il faut créer un module virtuel avec un bouton en première ligne et autant de label qu'on souhaite (un label pour l'heure de réveil de madame, un label pour l'heure de réveil de monsieur, par exemple).

 

L'appli demandera à  la première ouverture les identifiants (login + password), l'adresse IP, l'ID du module virtuel et l'ID du label recevant l'heure de la prochaine alarme.

 

Ensuite, un service sera démarré à  chaque démarrage.

 

Dans la mesure où j'ai eu quelques surprises (on n'est pas tous égaux face à  Android), l'appli testera si l'événement "Action_Next_Alarm_Changed" fonctionne. Si c'est le cas, le service se déclenchera qu'au changement d'alarme. Dans le cas contraire, un test sera effectué toutes les minutes, si changement avec la dernière valeur, une mise à  jour sera effectuée.

 

Je joins une vue du module virtuel, le code source de l'appli Android et le fichier compilé.

 

En espérant combler un besoin...

 

Exemple de scène derrière le bouton traitement : (pas de mise à  jour de la variable globale Reveil si alarme supérieur à  10h)

local id = fibaro:getSelfId();


temp=fibaro:getValue(id,"ui.Reveil.value");
if temp == nil or temp == "" then
  c=""
else
  b, c = string.find(temp, " ",1);
  c, d = string.find(temp, ":",;
  a=string.sub(temp, b, b+2)
  if tonumber(a)>9 then
    c="";
  else
    c=temp;
  end;
end;
fibaro:setGlobal("Reveil", c);
if fibaro:getValue(id,"ui.SSID.value") == "Freebox-60BAEA" then 
  fibaro:setGlobal("Present", "Oui")
else
  fibaro:setGlobal("Present", "Non")
end;

Exemple de scène Réveil : (allumage progressif de la lampe dimmable de la chambre) - fibaro:debug vous permettra de gérer le décalage d'heure entre le téléphone et la HC2 à  régler dans :  os.date("%H:%M", os.time()+60) - 60 correspond à  60 secondes à  ajouter. (attention,  os.date("%H:%M") retourne 06:59 même s'il est 06:58:59, ce qui creuse le décalage, sachant que la fonction sera à  nouveau appelé 1 minute plus tard (donc peut être trop tard, la HC2 aura peut être reçu une nouvelle alarme au lendemain 7h, si 7h est l'heure de réveil). Donc le mieux, c'est de faire des testes pour ajuster

--[[
%% autostart
%% properties
%% globals
--]]

local sourceTrigger = fibaro:getSourceTrigger();

function tempFunc()
	local jour = {}
	jour[0]="dim. ";
	jour[1]="lun. ";
	jour[2]="mar. ";
	jour[3]="mer. ";
	jour[4]="jeu. ";
	jour[5]="ven. ";
	jour[6]="sam. ";
	local currentDate = jour[tonumber(os.date("%w"))] .. os.date("%H:%M", os.time()+60);
	local startSource = fibaro:getSourceTrigger();
	if (currentDate ==  fibaro:getGlobalValue("Reveil")) then
		local Dimm = 0;
		fibaro:call(16, "SetValue", tostring(Dimm));
		for Dimm = 0, 100 do
			fibaro:sleep(18*1000)
      		fibaro:call(256, "setValue", tostring(Dimm));
  		end
	end
  fibaro:debug(currentDate .. "  <---->  " .. fibaro:getGlobalValue("Reveil"))
	setTimeout(tempFunc, 60*1000)
end

tempFunc()

post-1437-0-30108400-1423090574_thumb.png

EchangeFibaro 1.00.rar

mode d'emploi.txt

  • Upvote 9

Partager ce message


Lien à poster
Partager sur d’autres sites

Rectification, pas de code source, pas de apk, apparemment, pas autorisé par le forum. Peut être un autre moyen de vous faire partager ça... Si un admin peut m'aider...

Partager ce message


Lien à poster
Partager sur d’autres sites

:60:

Super travail que tu as fais là  ! 

 

Oui, certaines extensions ne sont pas autorisées en upload sur le forum.

 

En attendant tu peux partager en compressant en Zip par exemple.

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai trouvé l'astuce, j'ai renommé en txt pour joindre les fichiers, après téléchargement, il faudra renommer respectivement en RAR et apk

Partager ce message


Lien à poster
Partager sur d’autres sites

Prochaine étape, la géo loc, une vrai, en background, normalement, ça devrait être plus simple (pour l'alarme, va savoir pourquoi, google a mis quelques limitations sur la version 4, on n'accède pas facilement aux infos, mais pour la géoloc, tout est open apparemment.

 

Je trouve que d'inverser les rôles (qu'un certains nombre d'événements soient gérés par le téléphone) ouvre de très grandes perspectives (java sous android est un langage bien plus large et complet que le LUA).

 

à‡a bouillonne déjà  dans mon cerveau, mais si vous avec des idées, n'hésitez pas à  suggérer...

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour précision, il appartient à  chaque utilisateur de définir le code LUA derrière le bouton du module virtuel. 

 

J'explique, chacun a ses habitudes. Pour ma part, dans mon code, j'ai choisi d'ignorer toute alarme postérieure à  10 heures. (ben oui, il m'arrive parfois de mettre une alarme sur mon téléphone pour ne pas oublier un RDV, il ne faudrait pas que ce pense bête allume ma cafetière, allume mes lumières...)

 

Chacun a ses besoins, l'idée, c'était de récupérer l'heure de la prochaine alarme du (ou des) téléphone sur la HC2, le plus simplement du monde et d'agir en fonction de ses propres habitudes

Partager ce message


Lien à poster
Partager sur d’autres sites

Dés que j'ai un moment, je teste et te ferais un retour.  ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

:-)

 

Et n'hésite pas à  explorer le code source (éditeur : Eclipse), c'est très instructif, j'ai beaucoup appris en quelques jours à  peine...

Partager ce message


Lien à poster
Partager sur d’autres sites

En bref, joignons nous pour faire un tasker et un trigger gratuit pour notre communauté

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité chris6783

Très sympa comme intégration. On doit être nombreux àutiliser les smartphones comme réveil. Je teste dès que j'aurai remplacé mon Android qui a fait une mauvaise chute.

Partager ce message


Lien à poster
Partager sur d’autres sites

Application installée et fonctionnelle !

Le label sur la HC2 est instantanément changé dés que l'on modifie ou active le réveil sur le smartphone ! c'est bluffant !

 

Du coup, dans ton exemple, le bouton "traitement" te sert à  quoi ?

 

Reste maintenant à  peaufiner le module virtuel.

gallery_2_27_7221.png

Partager ce message


Lien à poster
Partager sur d’autres sites

Félicitation Lionel57, je trouve ton idée fabuleuse.

Malheureusement je suis (comme plusieurs personnes sur ce forum) sur IOS est-ce que tu croit que ton idée pourrait etre adapter sur nos iphones ?

Ou est-ce que quelqu'un pense pouvoir développer quelque chose dans le meme style ?

En tout cas encore bravo j'aime beaucoup l'idée :)

Partager ce message


Lien à poster
Partager sur d’autres sites

@nicolas P,

 

Ah oui, moi aussi, tu m'as devancé !! suis comme toi avec un ptit ios et mon tel me sert effectivement de reveil, comme madame d'ailleurs.

Ca pourrait etre super avec plusieurs tels, surtout que madame a des horaires differents ;-)

 

Feliciations, superbe idee !!

 

PS :peut-etre que le sujet pourrait etre deplace par les modos dans les smart et applis ou tuto ;-)

Modifié par pepite

Partager ce message


Lien à poster
Partager sur d’autres sites

@MoiCphil L'heure est transféré en brut sous la forme "jeu 18:19". 

 

Certains voudrons avoir 18:19 (sans le jour), moi, derrière le bouton, en LUA, j'ai choisi d'ignorer toute alarme postérieur à  10h. Dans le code LUA, au final, je transmets l'heure de réveil à  ma variable globale. (Toutes mes scènes restent basées sur une variable globale). L'appli android actionne le bouton 1. Après, si le bouton n'existe pas, ce n'est pas gênant, la commande HTTP est dans un Try.

 

Le matin, mon chauffage s'enclenche 30 minutes avant, la lumière de la chambre s'allume progressivement, à  l'heure H, la cafetière s'allume, les volets s'ouvrent. Parfois, il m'arrive de mettre une alarme l'après midi, je ne voulais pas que tous mes scénarios du matin s'exécutent...

 

Ce module, je le destine avant tout à  une interface entre la HC2 et nos téléphones. D'autres informations pourront être transférées. Là , je travaille sur la géolocalisation (qui sera intégrée dans la même appli). Possible que les coordonnées GPS seront transféré à  ce module. (bon, là , j'hésite à  transférer ces coordonnées, problème étique, dans un couple, j'ai l'impression de donner à  l'un le pouvoir de surveiller l'autre, alors je réfléchi pour que la partie GPS reste dans nos téléphones et que l'appli lance une scène selon certains critères)

 

Toujours pour une meilleure intégration, j'envisage de lancer une scène depuis l'appli si mon téléphone est connectée à  mon réseau WIFI. à‡a reste à  voir. Si vous avez des idées, n'hésitez pas à  suggérer, tant que le code est tout frais dans ma tête.

 

@Nicolas P et  @pepite, désolé, je n'ai pas d'Iphone sous la main... 

 

Pour ceux qui aurait téléchargé hier, je conseille de télécharger aujourd'hui, j'ai modifié aujourd'hui et mis en ligne à  14h. 

 

(en Java, si A="1" et B="1", ben A n'est pas forcément égal à  B, pour les strings, il faut utiliser une fonction equals, fallait le savoir. Du coup, l'heure de la prochaine alarme était transféré toute les minutes au lieu de l'être à  chaque changement : pas bien méchant, mais ça consomme forcément un peu plus de batterie)

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour la partie GPS, je vois les choses comme ça :

 

- D'une part, comme chacun sait, c'est hyper gourmand en batterie. Aussi, je n'envisage pas transmettre les infos de localisation en temps réel.

- D'autre part, comme dit avant, mon problème étique (pas sà»r que nos conjoints apprécient l'idée qu'elles peuvent être localisables à  chaque instant).

 

Alors pour épargner la batterie, je pense activer le GPS pour un relevé de position une fois toute les minutes, si on est à  moins de 10km du domicile, une fois toutes les 5 minutes à  moins de 20, toutes les 10 minutes à  moins de 50, 30 minutes de 50 à  100, 1h au delà ... (c'est purement arbitraire, peut être qu'il faudra affiner). Précision, l'appli est un service, donc elle n'a pas besoin d'être au premier plan (d'ailleurs, un service n'a pas  de premier plan, puisque pas de page, la page des paramètres, c'est une autre class) pour faire un relevé (contrairement à  l'appli officielle Fibaro)

 

Plutôt que de faire une zone circulaire autour du domicile, j'envisage de définir des "barrières", je m'explique

 

Pour moi, l'intérêt, c'est d'activer le chauffage quand je rentre et que j'approche de mon domicile. Sauf que... J'habite près d'une entrée d'autoroute (que j'emprunte souvent). Et 10km d'autoroute, ça va beaucoup plus vite que 10km de ville. Donc l'idée, c'est de définir une "barrière" virtuelle qui déclenchera une scène lorsqu'on la franchit. (par exemple une barrière à  50km si je suis sur l'autoroute, à  5km si je suis en ville).

 

Maintenant, si vous avec des propositions...

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui j'ai une idée

Tu peux faire la même chose pour les possesseurs de HCL ? :)

Sinon, c'est la classe pour les proprio de HC2..

BRAVO

Partager ce message


Lien à poster
Partager sur d’autres sites

Une vue de la prochaine page de paramètre, comme ça, ça vous donne une idée de là  où je veux aller...

 

post-1437-0-28609900-1423169122_thumb.png

Partager ce message


Lien à poster
Partager sur d’autres sites

A priori, ça fonctionne aussi pour une HCL, dans la mesure où le code LUA n'est pas indispensable. Et si un traitement des données est nécessaire, une astuce, on passe par du php (possible que je m'y attache plus tard...)

Partager ce message


Lien à poster
Partager sur d’autres sites

Le php, c'est un langage internet. Ça peut pallier àl'absence de LUA (ça peut même compenser largement les faiblesses du LUA pour les possesseurs de HC2) . Mais ça nécessite d'avoir un serveur phpmyadmin toujours actif. Quand on a un Nas, c'est forcément le cas, sinon, faut laisser l'ordi toujours allumé...

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors aucun doute, sur un syno, tu as l'appli phpmyadmin. Donc tu peux faire autant avec ta HCL qu'avec une HC2 (grâce àl'API). Pour le moment, je me focalise sur un dev standard, plus tard, par solidarité avec les possesseurs de HCL, je proposerai des scripts php

Partager ce message


Lien à poster
Partager sur d’autres sites

Je vote pour toi le mois prochain si tu es sélectionné. ðŸ™ðŸ™ŒðŸ™ŒðŸ™ŒðŸ™ŒðŸ™ŒðŸ™ŒðŸ™ŒðŸ™ŒðŸ™ŒðŸ™ŒðŸ™ŒðŸ™Œ

Partager ce message


Lien à poster
Partager sur d’autres sites

:-) C'est sympa, mais avant tout, je fais ça parce que je m'éclate, j'adore tout ça...

Partager ce message


Lien à poster
Partager sur d’autres sites

×