Question cube

Forum dédié à l'intégration de la Gateway ZigBee Xiaomi dans DomoticZ.
Pour les questions concernant les objets ZigBee Xiaomi, merci d'utiliser le forum ZigBee au-dessus.
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Question cube

Message par landaisbenj »

Bonjour.

Je vois dans les logs que la fonction 'alert' du cube se lance seul.

Je pensai qu'elle ne se lancé qu'en binome avec une autre fonction.
Quelqu'un connait la raison ou la facon d'activer 'alert' autre qu'en utilisant le cube ? Je devrai au moins avoir 'move' si le cube est déplacé ?
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
johnnybravo
Messages : 63
Inscription : 04 mai 2017, 14:15

Re: Question cube

Message par johnnybravo »

je ne sais pas comment cette fonction est déclenchée

Ici je me sers de la rotation dans le plan (clock_wise, anti_clock_wise) pour augmenter/baisser l'intensité lumineuse de mes lampes
ca marche correctement


Le tap-twice actionné depuis domoticz (interrupteur), ça va, mais avec le cube physique, pas de bonne détection pour l'instant
Je vais aller chercher des vidéos pour apprendre comment taper 2 fois :)

Edit: j'ai secoué fortement le cube (?) et la passerelle s'est mise à me causer chinois à chaque secousse.. si je regarde dans les logs, le cube est en alerte
Par contre j'ai du mal à répliquer cela. Le free fall semble aussi fonctionner correctement mais je vais éviter.. pas envie que le cube soit détruit par mes enfants !


Je pense maintenant développer des scripts pour ceci:
tap_twice pour tout allumer/éteindre
flip90 pour passer d'une scène à une autre
shake_air pour une couleur aléatoire

Côté programmation, je ne sais pas encore trop comment m'y prendre, pour flip90 je pensais à un tableau qui contiendrait toutes mes scènes (j'en ai 7) et à chaque secousse, un variable serait incrémentée et la scène suivante dans le tableau serait activée
pour le shake air, je pensais à un fichier-tableau avec des codes de couleurs pour différents points sur l'arc en ciel et pioche aléatoire (aléatoire ne semble pas exister dans lua, je pensais générer cela avec un calcul basé sur temps de dernier changement du device vs temps actuel)- ou alors je mets les données dans un ordre quelconque et incrémente normalement
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: Question cube

Message par landaisbenj »

Dommage ca aurait ete interressant.

Je crois que l'intensité lumineuse de deennoo on l'a tous xD

Le tap twice j'ai eu du mal aussi. Mais en fait il faut vraiment taper fort le cube sur la table et non pas juste le doigt sur le cube... Pas terrible. Je l'ai implementé pour ma part pour ouvrir les volets a mi hauteur (je n'ai pas de moteur a % j'ai du faire un calcul)

Pour l'alert peut etre qu'il s'agit d'une alarme activé sur mihome pour toi... Je ne sais pas.

Je te met ce que j'ai fais pour le cube. C'est simple je crois que j'avais trouvé ca ici aussi.
Ce que je fais pour les volets t'aidera surement pour ce que tu veux faire avec le flip90.
Pour l'aleatoire c'est interressant d'apprendre ca. J'en ai pas besoin mais des que j'ai le temps je me pencherai dessus. Il doit bien y avoir moyen de faire quelque chose avec FOR. En gérant le nombre de fois où tu as déjà utiliser telle ou telle scène.

[EDIT] J’ai trouvé cette fonction:

Code : Tout sélectionner

math.random(upper)
produit des nombres entiers entre 1 et upper. A voir elle peut d’implémenter avec une table ou une boucle.

Code : Tout sélectionner

if dc['Xiaomi cube']=='tap_twice' then
    if od['Volet baie']=='Open' then
info(script .. 'Volet: Fermeture a mi hauteur')
        switchOn('Volet baie')
        commandArray['Volet baie']='On AFTER 12'
    elseif od['Volet baie']=='Closed' then
info(script .. 'Volet: Ouverture a mi hauteur')
    switchOff('Volet baie')
        commandArray['Volet baie']='Off AFTER 14'
    end
elseif dc['Xiaomi cube']=='flip90' then
    switch('Lumiere')
info(script .. 'Lumiere: '..od['Lumiere'])
    
elseif dc['Xiaomi cube']=='flip180' then
    if lastSeen('Volet baie') < 15 then
        if od['Volet baie']=='Closed' then
            switchOn('Volet baie')
        elseif od['Volet baie']=='Open' then
            switchOff('Volet baie')
        end
    else
        switch('Volet baie')
info(script .. 'Volet: '..od['Volet baie'])
    end
elseif dc['Xiaomi cube']=='free_fall' then

elseif dc['Xiaomi cube']=='move' then

elseif dc['Xiaomi cube']=='shake_air' then
info(script .. 'Lumiere OFF')
    switchOff('Bouton 1')
    switchOff('Bouton 2')
    commandArray['Lumiere']='Off AFTER 20'
    switchOnFor('Xiaomi RGB Gateway', '30')
--switchOff('Television')

elseif dc['Xiaomi cube']=='swing' then

elseif dc['Xiaomi cube']=='clock_wise' then

elseif dc['Xiaomi cube']=='anti_clock_wise' then

elseif dc['Xiaomi cube']=='alert' then

end
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Question cube

Message par Neutrino »

Bonjour,

Le 'alert' est renvoyé dés que le cube bouge et que ce n'est pas un des autres mouvements possibles.
Vous mettez le cube dans un sac, le sac bouge, vous recevez une alarme.
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: Question cube

Message par landaisbenj »

Neutrino a écrit :Bonjour,

Le 'alert' est renvoyé dés que le cube bouge et que ce n'est pas un des autres mouvements possibles.
Vous mettez le cube dans un sac, le sac bouge, vous recevez une alarme.
Merci neutrino. Mais j’ai l’impression que des alert s’active même quand je n’en touche pas au cube.
Des fois je n’ai pas d’autre action autour d’alerte.
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
johnnybravo
Messages : 63
Inscription : 04 mai 2017, 14:15

Re: Question cube

Message par johnnybravo »

landaisbenj a écrit :[EDIT] J’ai trouvé cette fonction:

Code : Tout sélectionner

math.random(upper)
produit des nombres entiers entre 1 et upper. A voir elle peut d’implémenter avec une table ou une boucle.
cool, en partant de la je viens de tomber sur:

http://lua-users.org/wiki/MathLibraryTutorial

Section: math.random , math.randomseed

Pour tester, j'ai rapidement pondu cela, fonction trouvée en me promenant de lien en lien

Code : Tout sélectionner

commandArray = {}
function randomFloat(lower, greater)
    return lower + math.random()  * (greater - lower);
end

if devicechanged['TestSwitch2'] then
    print("some random number between 0 and 1, both excluded: "..math.random())
    print("an integer between 10 and 50: both included"..math.random(10,50))
    print("a number between 0 and 100, both excluded: "..    randomFloat(0,100))
    end 
return commandArray
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: Question cube

Message par landaisbenj »

Du coup sa fonctionne ou pas?? :lol:
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
johnnybravo
Messages : 63
Inscription : 04 mai 2017, 14:15

Re: Question cube

Message par johnnybravo »

ça oui :), je regarderai le reste ce weekend

Entre temps il semblerait que je maitrise le tap_twice sans détruire ni la table du salon (en verre..) ni le cube lui-même :lol:
johnnybravo
Messages : 63
Inscription : 04 mai 2017, 14:15

Re: Question cube

Message par johnnybravo »

Et hop, situation actuelle: j'ai créé un simple fichier texte "hex.txt" dans le répertoire domoticz, avec les valeurs hex (sans le #) prises dans la première réponse la : https://stackoverflow.com/questions/100 ... -to-humans
Une valeur par ligne, donc
00ffff
f0ffff
f5f5dc
000000
0000ff
a52a2a
etc

43 lignes en tout pour l'instant, ce que j'utilise dans le code lua.
Je n'ai pas nettoyé les valeurs: à priori certaines couleurs ne sont pas possibles avec milight et je ne suis même pas sur que le rendu par milight corresponde à ce que cela devrait être (i.e. darkgrey: "#a9a9a9" à priori impossible, darksalmon: "#e9967a" est-il vraiment un darksalmon quand rendu par milight)

Code actuel dans l'interface lua - il semblerait que ceci soit la façon la plus rapide de récupérer la valeur sur la ligne x dans un fichier.

Code : Tout sélectionner

commandArray = {}
if devicechanged['TestSwitch2'] then
RandomLine=math.random(1,43)
local filename = 'hex.txt'
local n=0
    for l in io.lines(filename) do
        n=n+1
        if n==RandomLine then
        print("random is "..RandomLine.." and value is "..l)
        commandArray['OpenURL']='127.0.0.1:7373/json.htm?type=command&param=setcolbrightnessvalue&idx=7&hex='..l..'&brightness=40&iswhite=false'
        break
        end
    end
end
return commandArray
Ça fonctionne :D mais.. :?
- la couleur est obtenue en 2 étapes, souvent visible (d'abord couleur puis brightness ?) - est-il possible de changer cela ?
- le tout n'est pas bien rapide

2017-11-19 10:48:26.130 User: Admin initiated a switch command (37/TestSwitch2/Off)
2017-11-19 10:48:26.134 (GenericDummyHardware) Light/Switch (TestSwitch2)
2017-11-19 10:48:26.239 LUA: random is 1 and value is 00ffff
2017-11-19 10:48:26.239 EventSystem: Fetching url...
2017-11-19 10:48:26.240 EventSystem: Script event triggered: zz - Read file3
2017-11-19 10:48:26.878 (MiLight Gateway) Lighting Limitless/Applamp (ML - Couch)
2017-11-19 10:48:27.384 (MiLight Gateway) Lighting Limitless/Applamp (ML - Couch)

2017-11-19 10:48:28.833 User: Admin initiated a switch command (37/TestSwitch2/On)
2017-11-19 10:48:28.837 (GenericDummyHardware) Light/Switch (TestSwitch2)
2017-11-19 10:48:28.941 LUA: random is 19 and value is 9400d3
2017-11-19 10:48:28.942 EventSystem: Fetching url...
2017-11-19 10:48:28.942 EventSystem: Script event triggered: zz - Read file3
2017-11-19 10:48:29.573 (MiLight Gateway) Lighting Limitless/Applamp (ML - Couch)
2017-11-19 10:48:30.078 (MiLight Gateway) Lighting Limitless/Applamp (ML - Couch)

2017-11-19 10:48:31.339 User: Admin initiated a switch command (37/TestSwitch2/Off)
2017-11-19 10:48:31.343 (GenericDummyHardware) Light/Switch (TestSwitch2)
2017-11-19 10:48:31.449 LUA: random is 21 and value is ffd700
2017-11-19 10:48:31.450 EventSystem: Fetching url...
2017-11-19 10:48:31.450 EventSystem: Script event triggered: zz - Read file3
2017-11-19 10:48:32.089 (MiLight Gateway) Lighting Limitless/Applamp (ML - Couch)
2017-11-19 10:48:32.595 (MiLight Gateway) Lighting Limitless/Applamp (ML - Couch)
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: Question cube

Message par landaisbenj »

Trop bien.
C'est marrant effectivement tu met qu'un dixième a sortir la commande mais 6 à l'envoyer.

Je ne pense pas que tu puisse séparer la couleur et l'intensité. Pour ca il faut regarder les trames du RFLINK tu as une trame par action..
10;MiLightv1;F746;01;34BC;BRIGHT; => Milight v1 protocol;address;button/unit number;color & brightness; Set brightness
10;MiLightv1;F746;01;34BC;COLOR; => Milight v1 protocol;address;button/unit number;color & brightness; Set color
Essaie en deux commandes séparer peut être. En essayant l'une avant l'autre et l'inverse pour voir ce qui est plus harmonieux.

Pour la commande en elle même tu l'effectue dans la boucle, mais tu t'en a pas d’intérêt. Je ne sais pas si tu peux gagner du temps, mais essaye de la mettre en fin de script.

Pour la boucle tu dois avoir un moyen pour aller directement a n au lieu de boucler sur le fichier? Genre la commande SED sur linux...

En tout cas c'est pas mal que ça fonctionne.
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
Répondre