Aller au contenu

Echange Données Portables Android - Hc2


Lionel57

Messages recommandés

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
Lien vers le commentaire
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...

Lien vers le commentaire
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

Lien vers le commentaire
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.

Lien vers le commentaire
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

Lien vers le commentaire
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 :)

Lien vers le commentaire
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
Lien vers le commentaire
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)

Lien vers le commentaire
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...

Lien vers le commentaire
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é...

Lien vers le commentaire
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

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...