Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

[Plugins tiers][Officiel]Luminothérapie

Pour échanger sur les plugins classés en catégorie "Organisation"
Avatar de l’utilisateur
Shyrka973
Actif
Messages : 555
Inscription : 18 août 2014, 18:17
Localisation : Kourou / Guyane

Re: [Plugins tiers][Officiel]Luminothérapie

Message par Shyrka973 » 22 janv. 2018, 20:42

@ksin,

Le plugin est payant maintenant. Il faut donc l’acheter sur le market et ainsi tu pourras faire la mise à jour.
C’est mal foutu sur Jeedom sur cette partie. C’est le moins que puisse dire.


Envoyé de mon iPhone en utilisant Tapatalk
DIY Proxmox 5.1 / i3-6100U @ 2.30GHz / 4Go RAM / 128 Go SSD : Jeedom 3.2.12 - Stretch
Protocol: Z-Wave, EnOcean, RFXtrx433E, Xiaomi, BLEA, MQTT, ESPeasy, Jeeduino, Abeille

Larnak69
Timide
Messages : 135
Inscription : 19 nov. 2015, 20:42

Re: [Plugins tiers][Officiel]Luminothérapie

Message par Larnak69 » 22 janv. 2018, 20:50

Voir ci avant payant

ksin
Timide
Messages : 86
Inscription : 22 mai 2017, 13:09
Localisation : Lyon

Re: [Plugins tiers][Officiel]Luminothérapie

Message par ksin » 22 janv. 2018, 20:52

OK je comprends

Bonne soirée
Jeedom 3.3.30 sur Debian 9.4
NUC7I5BNK avec ESXi 6.7

Avatar de l’utilisateur
Shyrka973
Actif
Messages : 555
Inscription : 18 août 2014, 18:17
Localisation : Kourou / Guyane

Re: [Plugins tiers][Officiel]Luminothérapie

Message par Shyrka973 » 22 janv. 2018, 21:10

@mika-nt28,

Il n'y a pas de problème de droit car les fichiers sont créés avec les droits que ceux fourni au depart.
Voici le le json créé:

Code : Tout sélectionner

{"Configuration":{"Couleur":{"hsl":"0"}},"Luminosite":[{"enable":"1","duree":"15","lum":{"expression":"InOutQuad","offset":"0","max":"100"}}],"Couleur":[{"enable":"1","duree":"5","R":{"expression":"constant","offset":"0"},"G":{"expression":"rampe","offset":"0","pente":"51"},"B":{"expression":"constant","offset":"255"}},{"enable":"1","duree":"2","R":{"expression":"rampe","offset":"185","pente":"35"},"G":{"expression":"constant","offset":"255"},"B":{"expression":"constant","offset":"0"}},{"enable":"1","duree":"3","R":{"expression":"constant","offset":"255"},"G":{"expression":"constant","offset":"255"},"B":{"expression":"constant","offset":"0"}},{"enable":"1","duree":"5","R":{"expression":"constant","offset":"255"},"G":{"expression":"constant","offset":"0"},"B":{"expression":"rampe","offset":"255","pente":"-51"}}]}{"Configuration":{"Couleur":{"hsl":"0"}},"Luminosite":[{"enable":"1","duree":"15","lum":{"expression":"InOutQuad","offset":"0","max":"40"}}],"Couleur":[{"enable":"1","duree":"5","R":{"expression":"constant","offset":"0"},"G":{"expression":"rampe","offset":"0","pente":"51"},"B":{"expression":"constant","offset":"255"}},{"enable":"1","duree":"2","R":{"expression":"rampe","offset":"185","pente":"35"},"G":{"expression":"constant","offset":"255"},"B":{"expression":"constant","offset":"0"}},{"enable":"1","duree":"3","R":{"expression":"constant","offset":"255"},"G":{"expression":"constant","offset":"255"},"B":{"expression":"constant","offset":"0"}},{"enable":"1","duree":"5","R":{"expression":"constant","offset":"255"},"G":{"expression":"constant","offset":"0"},"B":{"expression":"rampe","offset":"255","pente":"-51"}}]}
Avec un validateur json, on voit qu'il y a un souci. Le problème est juste que la configuration json a été recopié deux fois dans le fichier. En enlevant la deuxième conf dans le fichier, le validateur json est ok.

Code : Tout sélectionner

{"Configuration":{"Couleur":{"hsl":"0"}},"Luminosite":[{"enable":"1","duree":"15","lum":{"expression":"InOutQuad","offset":"0","max":"100"}}],"Couleur":[{"enable":"1","duree":"5","R":{"expression":"constant","offset":"0"},"G":{"expression":"rampe","offset":"0","pente":"51"},"B":{"expression":"constant","offset":"255"}},{"enable":"1","duree":"2","R":{"expression":"rampe","offset":"185","pente":"35"},"G":{"expression":"constant","offset":"255"},"B":{"expression":"constant","offset":"0"}},{"enable":"1","duree":"3","R":{"expression":"constant","offset":"255"},"G":{"expression":"constant","offset":"255"},"B":{"expression":"constant","offset":"0"}},{"enable":"1","duree":"5","R":{"expression":"constant","offset":"255"},"G":{"expression":"constant","offset":"0"},"B":{"expression":"rampe","offset":"255","pente":"-51"}}]}
Maintenant, je peux afficher cette ambiance et la modifier.
J'ai refait une autre duplication de l'ambiance sans souci. J'ai fait plusieurs autres duplications pour essayer de reproduire l'erreur mais sans succès.

Pour éviter la page vierge, il faudrait peut-être vérifier le json du fichier et indiquer une erreur par exemple.
DIY Proxmox 5.1 / i3-6100U @ 2.30GHz / 4Go RAM / 128 Go SSD : Jeedom 3.2.12 - Stretch
Protocol: Z-Wave, EnOcean, RFXtrx433E, Xiaomi, BLEA, MQTT, ESPeasy, Jeeduino, Abeille

Avatar de l’utilisateur
Shyrka973
Actif
Messages : 555
Inscription : 18 août 2014, 18:17
Localisation : Kourou / Guyane

Re: [Plugins tiers][Officiel]Luminothérapie

Message par Shyrka973 » 22 janv. 2018, 21:18

Je pense qu'il y a un souci quand même. J'ai voulu supprimer les ambiances créés pour les tests. J'ai pu supprimer la dernière créée mais pour la suivante, lorsque je demande la suppression, j'ai un message "Sauvegarde réussi". J'ai essayé à plusieurs reprises.
Après être revenu sur la liste des ambiances, j'ai une page vierge lorsque je veux afficher l'ambiance que je veux supprimer.
Le json est corrompu car la configuration est recopiée deux fois dans le fichier.
DIY Proxmox 5.1 / i3-6100U @ 2.30GHz / 4Go RAM / 128 Go SSD : Jeedom 3.2.12 - Stretch
Protocol: Z-Wave, EnOcean, RFXtrx433E, Xiaomi, BLEA, MQTT, ESPeasy, Jeeduino, Abeille

Avatar de l’utilisateur
Shyrka973
Actif
Messages : 555
Inscription : 18 août 2014, 18:17
Localisation : Kourou / Guyane

Re: [Plugins tiers][Officiel]Luminothérapie

Message par Shyrka973 » 22 janv. 2018, 21:28

Une petite demande déjà formulée mais peut-être que tu n'as pas retenu.
Peux-tu ajouter une commande info sur la status de l'ambiance ?

Merci.
DIY Proxmox 5.1 / i3-6100U @ 2.30GHz / 4Go RAM / 128 Go SSD : Jeedom 3.2.12 - Stretch
Protocol: Z-Wave, EnOcean, RFXtrx433E, Xiaomi, BLEA, MQTT, ESPeasy, Jeeduino, Abeille

Avatar de l’utilisateur
mika-nt28
Actif
Messages : 7995
Inscription : 05 août 2014, 08:58
Localisation : Dreux - France

Re: [Plugins tiers][Officiel]Luminothérapie

Message par mika-nt28 » 23 janv. 2018, 08:31

Shyrka973 a écrit :
22 janv. 2018, 21:10
@mika-nt28,

Il n'y a pas de problème de droit car les fichiers sont créés avec les droits que ceux fourni au depart.
Voici le le json créé:

Code : Tout sélectionner

{"Configuration":{"Couleur":{"hsl":"0"}},"Luminosite":[{"enable":"1","duree":"15","lum":{"expression":"InOutQuad","offset":"0","max":"100"}}],"Couleur":[{"enable":"1","duree":"5","R":{"expression":"constant","offset":"0"},"G":{"expression":"rampe","offset":"0","pente":"51"},"B":{"expression":"constant","offset":"255"}},{"enable":"1","duree":"2","R":{"expression":"rampe","offset":"185","pente":"35"},"G":{"expression":"constant","offset":"255"},"B":{"expression":"constant","offset":"0"}},{"enable":"1","duree":"3","R":{"expression":"constant","offset":"255"},"G":{"expression":"constant","offset":"255"},"B":{"expression":"constant","offset":"0"}},{"enable":"1","duree":"5","R":{"expression":"constant","offset":"255"},"G":{"expression":"constant","offset":"0"},"B":{"expression":"rampe","offset":"255","pente":"-51"}}]}{"Configuration":{"Couleur":{"hsl":"0"}},"Luminosite":[{"enable":"1","duree":"15","lum":{"expression":"InOutQuad","offset":"0","max":"40"}}],"Couleur":[{"enable":"1","duree":"5","R":{"expression":"constant","offset":"0"},"G":{"expression":"rampe","offset":"0","pente":"51"},"B":{"expression":"constant","offset":"255"}},{"enable":"1","duree":"2","R":{"expression":"rampe","offset":"185","pente":"35"},"G":{"expression":"constant","offset":"255"},"B":{"expression":"constant","offset":"0"}},{"enable":"1","duree":"3","R":{"expression":"constant","offset":"255"},"G":{"expression":"constant","offset":"255"},"B":{"expression":"constant","offset":"0"}},{"enable":"1","duree":"5","R":{"expression":"constant","offset":"255"},"G":{"expression":"constant","offset":"0"},"B":{"expression":"rampe","offset":"255","pente":"-51"}}]}
Avec un validateur json, on voit qu'il y a un souci. Le problème est juste que la configuration json a été recopié deux fois dans le fichier. En enlevant la deuxième conf dans le fichier, le validateur json est ok.

Code : Tout sélectionner

{"Configuration":{"Couleur":{"hsl":"0"}},"Luminosite":[{"enable":"1","duree":"15","lum":{"expression":"InOutQuad","offset":"0","max":"100"}}],"Couleur":[{"enable":"1","duree":"5","R":{"expression":"constant","offset":"0"},"G":{"expression":"rampe","offset":"0","pente":"51"},"B":{"expression":"constant","offset":"255"}},{"enable":"1","duree":"2","R":{"expression":"rampe","offset":"185","pente":"35"},"G":{"expression":"constant","offset":"255"},"B":{"expression":"constant","offset":"0"}},{"enable":"1","duree":"3","R":{"expression":"constant","offset":"255"},"G":{"expression":"constant","offset":"255"},"B":{"expression":"constant","offset":"0"}},{"enable":"1","duree":"5","R":{"expression":"constant","offset":"255"},"G":{"expression":"constant","offset":"0"},"B":{"expression":"rampe","offset":"255","pente":"-51"}}]}
Maintenant, je peux afficher cette ambiance et la modifier.
J'ai refait une autre duplication de l'ambiance sans souci. J'ai fait plusieurs autres duplications pour essayer de reproduire l'erreur mais sans succès.

Pour éviter la page vierge, il faudrait peut-être vérifier le json du fichier et indiquer une erreur par exemple.
C'est effectivement bisare ce probleme.
J'ai rien trouvé dans le code qui pourrai genere ca
Shyrka973 a écrit :
22 janv. 2018, 21:18
Je pense qu'il y a un souci quand même. J'ai voulu supprimer les ambiances créés pour les tests. J'ai pu supprimer la dernière créée mais pour la suivante, lorsque je demande la suppression, j'ai un message "Sauvegarde réussi". J'ai essayé à plusieurs reprises.
Après être revenu sur la liste des ambiances, j'ai une page vierge lorsque je veux afficher l'ambiance que je veux supprimer.
Le json est corrompu car la configuration est recopiée deux fois dans le fichier.
Je n'arrive pas a reproduire problem

J'ai dupliquer 3 fois une ambiance.
J'ai rafraîchie la page pour qu'il charge les icônes
Puis j'ai supprimer les 3 et dupliquée l'ambiance.

Chez moi tous ce passe bien
Shyrka973 a écrit :
22 janv. 2018, 21:28
Une petite demande déjà formulée mais peut-être que tu n'as pas retenu.
Peux-tu ajouter une commande info sur la status de l'ambiance ?

Merci.
On peut ajouter une commande, ce n'ai pas un problème.
Que veux tu faire avec se status?
Pour faciliter la compréhension de votre problème, n’oubliez pas de poster
- Des Screenshots de votre configuration
- Le Log au moment du problème constaté

Encouragez-moi https://www.paypal.me/mikant28

Avatar de l’utilisateur
mika-nt28
Actif
Messages : 7995
Inscription : 05 août 2014, 08:58
Localisation : Dreux - France

Re: [Plugins tiers][Officiel]Luminothérapie

Message par mika-nt28 » 23 janv. 2018, 08:56

Pour la prochaine release j'ai ajouté 2 statut

- L’état de la simulation (c'est un binaire 0 pour en pause 1 pour en activité
- Le temps écoulé (numérique)


Edit

C'est disponible sur le market
Pour faciliter la compréhension de votre problème, n’oubliez pas de poster
- Des Screenshots de votre configuration
- Le Log au moment du problème constaté

Encouragez-moi https://www.paypal.me/mikant28

Avatar de l’utilisateur
Shyrka973
Actif
Messages : 555
Inscription : 18 août 2014, 18:17
Localisation : Kourou / Guyane

Re: [Plugins tiers][Officiel]Luminothérapie

Message par Shyrka973 » 23 janv. 2018, 11:21

Merci pour les commandes info.

Je ne sais pas combien as-tu d'utilisateur de ce plugin, mais si personne d'autre ne remonte le problème et je suis le seul, ce n'est pas grave. Je sais comment y palier pour l'instant.

Peut-être une interférence avec un autre plugin. J'en ai 61 en fonctionnement. Je vais tester ce plugin sur un autre Jeedom avec beaucoup moins de plugin.
Dernière édition par Shyrka973 le 23 janv. 2018, 11:25, édité 1 fois.
DIY Proxmox 5.1 / i3-6100U @ 2.30GHz / 4Go RAM / 128 Go SSD : Jeedom 3.2.12 - Stretch
Protocol: Z-Wave, EnOcean, RFXtrx433E, Xiaomi, BLEA, MQTT, ESPeasy, Jeeduino, Abeille

Avatar de l’utilisateur
mika-nt28
Actif
Messages : 7995
Inscription : 05 août 2014, 08:58
Localisation : Dreux - France

Re: [Plugins tiers][Officiel]Luminothérapie

Message par mika-nt28 » 23 janv. 2018, 11:30

Je doute qu'un autre plugin puisse causé ce problème.
Je pense plus que c'est dans le déroulement de la création que l'on peut avoir un problème.
Sur la release de ce matin j'ai d’ailleurs ajouté un petit test sur la variable qui généré le json car c'est certainement elle qui ne se vide pas.
Tu me dira si tu reproduit le probleme avec cette version

Pour info le plugin a été acheter 5 fois, donc on doit être 6 a utilisé la dernière release
Pour faciliter la compréhension de votre problème, n’oubliez pas de poster
- Des Screenshots de votre configuration
- Le Log au moment du problème constaté

Encouragez-moi https://www.paypal.me/mikant28

Avatar de l’utilisateur
mika-nt28
Actif
Messages : 7995
Inscription : 05 août 2014, 08:58
Localisation : Dreux - France

Re: [Plugins tiers][Officiel]Luminothérapie

Message par mika-nt28 » 10 avr. 2018, 09:02

Est ce qu'il y a des suggestions sur ce plugin?
Est ce que vous souhaitez partager des ambiances?
Pour faciliter la compréhension de votre problème, n’oubliez pas de poster
- Des Screenshots de votre configuration
- Le Log au moment du problème constaté

Encouragez-moi https://www.paypal.me/mikant28

kurairaito
Timide
Messages : 58
Inscription : 13 avr. 2018, 15:32

Re: [Plugins tiers][Officiel]Luminothérapie

Message par kurairaito » 13 avr. 2018, 15:43

Bonjour,

Je viens de domoticZ et j'utilisait un script LUA pour gérer un simulateur d'aube.

J'utilise des fonctions de degré 3 (en fonction de la durée déjà executée) pour modéliser les courbes RGB. Je vois que ce n'est pas possible actuellement dans ce plugin.

Celles-ci sont ensuite envoyées chaque seconde (si la valeur change) à un module fibaro rgbw. Le script total durait 25 minutes.

Es-t'il possible d'ajouter cette fonctionnalité?
Par exemple en ajoutant un Paramètre "fonction" qui prendrait ensuite les 4 coefficients à appliquer.

Merci!

Edit c'est un degré 3, je poste le script de suite
Dernière édition par kurairaito le 13 avr. 2018, 15:53, édité 1 fois.

Avatar de l’utilisateur
mika-nt28
Actif
Messages : 7995
Inscription : 05 août 2014, 08:58
Localisation : Dreux - France

Re: [Plugins tiers][Officiel]Luminothérapie

Message par mika-nt28 » 13 avr. 2018, 15:48

J'ai pas bien compris ce que faisait ton script mais poste le je regardera se que je peux modifier ou ajouté.
Pour faciliter la compréhension de votre problème, n’oubliez pas de poster
- Des Screenshots de votre configuration
- Le Log au moment du problème constaté

Encouragez-moi https://www.paypal.me/mikant28

kurairaito
Timide
Messages : 58
Inscription : 13 avr. 2018, 15:32

Re: [Plugins tiers][Officiel]Luminothérapie

Message par kurairaito » 13 avr. 2018, 15:56

voila le script que j'utilisais :

Code : Tout sélectionner

--------------------------------
------ Variables à éditer ------
--------------------------------
local interSimulateurAube = 'Simulateur aube'
local dimmerREDname = 'Level - d03 ROUGE'
local dimmerGREENname = 'Level - d04 VERT'
local dimmerBLUEname = 'Level - d05 BLEU'
local lastExecutionSimulateurAube = 'lastExecutionSimulateurAube'

local polynomeRed={-0.000000164397790541581,0.000210745550746,0.046821520527403, 4}
local polynomeGreen={-0.0000000509407803525451,0.0000858970658970659,-0.005543502249385, 1}
local polynomeBlue={0.00000000830967628355325,-0.00000450216450216448,0.00004153580624168, 0}

--------------------------------
-- Fin des variables à éditer --
--------------------------------

function timedifference(timestamp)
  y, m, d, H, M, S = timestamp:match("(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+)")
  difference = os.difftime(os.time(), os.time{year=y, month=m, day=d, hour=H, min=M, sec=S})
  return difference
end

function round(num, numDecimalPlaces)
  local mult = 10^(numDecimalPlaces or 0)
  return math.floor(num * mult + 0.5) / mult
end

commandArray = {}

-- trick to not fire the first time after the switch is on, because otherdevices_lastupdate[interSimulateurAube] return the previous value, not the actual
local mydevice_changed = false
if (devicechanged~=nil and devicechanged[interSimulateurAube]) then
    mydevice_changed = true
end

if (otherdevices[interSimulateurAube] == "On" and not mydevice_changed) then
    s = otherdevices_lastupdate[interSimulateurAube]
    elapsedTime = timedifference(s)
    
    -- check if this step as already been executed (however the script is fired many many times, and commands are sent multiple time as the result from device as not yet been received)
    if(elapsedTime~=uservariables[lastExecutionSimulateurAube]) then
        commandArray[#commandArray +1]={['Variable:'..lastExecutionSimulateurAube]=tostring(elapsedTime)}
    
        -- compute new values
        r = round(polynomeRed[1]*elapsedTime^3+polynomeRed[2]*elapsedTime^2+polynomeRed[3]*elapsedTime+polynomeRed[4])
        g = round(polynomeGreen[1]*elapsedTime^3+polynomeGreen[2]*elapsedTime^2+polynomeGreen[3]*elapsedTime+polynomeGreen[4])
        b = round(polynomeBlue[1]*elapsedTime^3+polynomeBlue[2]*elapsedTime^2+polynomeBlue[3]*elapsedTime+polynomeBlue[4])
        
        if(elapsedTime<=1200) then
            -- send new command to fibaro device only if value changed
            if(tonumber(otherdevices_svalues[dimmerREDname])~=r) then
                commandArray[#commandArray +1]={[dimmerREDname]='Set Level '..r}
            end
            
            if(tonumber(otherdevices_svalues[dimmerGREENname])~=g) then
                commandArray[#commandArray +1]={[dimmerGREENname]='Set Level '..g}
            end
            
            if(tonumber(otherdevices_svalues[dimmerBLUEname])~=b) then
                commandArray[#commandArray +1]={[dimmerBLUEname]='Set Level '..b}
            end
        elseif(elapsedTime>1800) then
            -- turn off the command Button
            commandArray[#commandArray +1]={[interSimulateurAube]='Off'}
        end
    end
    
elseif(otherdevices[interSimulateurAube] == "Off" and mydevice_changed) then
    -- light off the led
    commandArray[#commandArray +1]={[dimmerREDname]='Set Level 0'}
    commandArray[#commandArray +1]={[dimmerGREENname]='Set Level 0'}
    commandArray[#commandArray +1]={[dimmerBLUEname]='Set Level 0'}
    
end


return commandArray
EDIT : simplifié le code en supprimant les lignes de debug
Dernière édition par kurairaito le 13 avr. 2018, 16:09, édité 1 fois.

Avatar de l’utilisateur
mika-nt28
Actif
Messages : 7995
Inscription : 05 août 2014, 08:58
Localisation : Dreux - France

Re: [Plugins tiers][Officiel]Luminothérapie

Message par mika-nt28 » 13 avr. 2018, 16:04

Donc tu pilote bien tes couleur RGB comme le plugin c'est donc les fonction disponible pour crée ta séquence qui te pose problème.
Je regarderai ton script plus en detail, mais la je n'ai pas tous saisi sur le calul
Pour faciliter la compréhension de votre problème, n’oubliez pas de poster
- Des Screenshots de votre configuration
- Le Log au moment du problème constaté

Encouragez-moi https://www.paypal.me/mikant28

kurairaito
Timide
Messages : 58
Inscription : 13 avr. 2018, 15:32

Re: [Plugins tiers][Officiel]Luminothérapie

Message par kurairaito » 13 avr. 2018, 16:13

Oui voila, en fait actuellement dans le pluging, on peut faire des rampes, mais, les variations sont trop brusques. il faudrait faire vraiment beaucoup de segments pour arriver au résultat d'un polynome.

Arrivé chez moi, je montrerais un résultat des courbes faite dans excel.

kurairaito
Timide
Messages : 58
Inscription : 13 avr. 2018, 15:32

Re: [Plugins tiers][Officiel]Luminothérapie

Message par kurairaito » 13 avr. 2018, 17:45

voici le fichier excel utilisé pour déterminer les courbes.

en fait je suis parti de 9 couleurs dans la courbes qui me paraissaient pas mal, puis extrapolé avec une courbe de tendance de degré 3, en affichant l'équation de la courbe, j'ai pu obtenir les coefficients des 3 couleurs.

ensuite dans le LUA, à chaque nouvelle seconde, je calcule les 3 couleur RGB pour cette seconde précise, et si une des couleur a évolue par rapport au status actuel du capteur j'envoie la couleur au module. (ceci afin d'éviter de spammer le module de millier de messages identiques).

pour ouvrir le tableur, préférez libreoffice car excel ne sais pas afficher les décimales sur les équations des courbes de tendance (ou alors je n'ai jamais trouvé!).

avant je devait travailler en pourcent dans domoticz, mais c'était peut être une limitation du logiciel, ou une mauvaise configuration du module, car sinon entre 2 changement de couleur, le bandeau de led faisait n'importe quoi...

j'ai du zipper le fichier car l'extension .ods ne plait pas au forum...
Pièces jointes
colors.zip
courbe RGB pour simulation d'aube
(414.03 Kio) Téléchargé 94 fois

kurairaito
Timide
Messages : 58
Inscription : 13 avr. 2018, 15:32

Re: [Plugins tiers][Officiel]Luminothérapie

Message par kurairaito » 16 avr. 2018, 22:01

Bonjour,

J'ai mis à jour le plugin afin de prendre en compte un polynôme (jusqu'à degré 4), la simulation fonctionne, la commande du contrôleur RGB aussi.

Je peux te passer les fichier modifiés si tu souhaites l'intégrer + mon ambiance + ma simulation si tu souhaites tester.

j'ai juste un problème vers le début de l'ambiance, ça passe d'un rouge à un jaune, mais ça vient des couleurs qui changent vite pour peu d'écart de valeur dans les zones basses du contrôleur.

Au passage, les transitions sont bien plus belle que sous domoticz car j’étais obligé d'attendre une nouvelle valeur capteur (aléatoire) pour mettre à jour le contrôleur (et je pouvais donc louper des transitions), alors que là je peux vraiment envoyer à chaque transition puisque exécuté toutes les secondes.

Bref, je regrette pas de l'avoir acheté, et je suis pas mécontent d'avoir réussi à le modifier pour en faire ce que je voulais.

Merci beaucoup d'avoir fait toute la base.

Cordialement.

Avatar de l’utilisateur
mika-nt28
Actif
Messages : 7995
Inscription : 05 août 2014, 08:58
Localisation : Dreux - France

Re: [Plugins tiers][Officiel]Luminothérapie

Message par mika-nt28 » 17 avr. 2018, 07:55

Si ta modification est générique je peux l'integrer directement.
Pour faciliter la compréhension de votre problème, n’oubliez pas de poster
- Des Screenshots de votre configuration
- Le Log au moment du problème constaté

Encouragez-moi https://www.paypal.me/mikant28

kurairaito
Timide
Messages : 58
Inscription : 13 avr. 2018, 15:32

Re: [Plugins tiers][Officiel]Luminothérapie

Message par kurairaito » 17 avr. 2018, 09:50

fichier core/class/luminotherapie.class.php

Code : Tout sélectionner

<?php
require_once dirname(__FILE__) . '/../../../../core/php/core.inc.php';
class luminotherapie extends eqLogic {
	public static function deamon_info() {
		$return = array();
		$return['log'] = 'luminotherapie';
		$return['launchable'] = 'ok';
		$return['state'] = 'nok';
		foreach(eqLogic::byType('luminotherapie') as $luminotherapie){
			$cron = cron::byClassAndFunction('luminotherapie', 'SimulDemon',array('id' => $luminotherapie->getId()));
			if(is_object($cron) && $cron->running())
				$return['state'] = 'ok';
		}
		return $return;
	}
	public static function deamon_start($_debug = false) {
		self::deamon_stop();
		$deamon_info = self::deamon_info();
		if ($deamon_info['launchable'] != 'ok') 
			return;
		if ($deamon_info['state'] == 'ok') 
			return;
		foreach(eqLogic::byType('luminotherapie') as $luminotherapie){
			$luminotherapie->CreateDemon();
		}
		
	}
	public static function deamon_stop() {	
		foreach(eqLogic::byType('luminotherapie') as $luminotherapie){
			$cron = cron::byClassAndFunction('luminotherapie', 'SimulDemon',array('id' => $luminotherapie->getId()));
			if(is_object($cron)){
				$cron->stop();
				$cron->remove();
			}
		}
	}
	public function postSave() {
		$this->AddCommande('Démarrage','start',"action", 'other',1);
		$this->AddCommande('Arret','stop',"action", 'other',1);
		$this->AddCommande('Boucle','loop',"action", 'slider',0);
		$this->AddCommande('Simulation en cours','startSimu',"info", 'binary',1);
		$this->AddCommande('Temps de simulation ecoulé','tpsSimu',"info", 'numeric',1);
		$this->CreateDemon();
	}
	public function AddCommande($Name,$_logicalId,$Type="info", $SubType='binary',$visible,$Template='') {
		$Commande = $this->getCmd(null,$_logicalId);
		if (!is_object($Commande))
		{
			$Commande = new luminotherapieCmd();
			$Commande->setId(null);
			$Commande->setName($Name);
			$Commande->setIsVisible($visible);
			$Commande->setLogicalId($_logicalId);
			$Commande->setEqLogic_id($this->getId());
			$Commande->setType($Type);
			$Commande->setSubType($SubType);
		}
     		$Commande->setTemplate('dashboard',$Template );
		$Commande->setTemplate('mobile', $Template);
		$Commande->save();
		return $Commande;
	}
	public function CreateDemon(){
		$cron = cron::byClassAndFunction('luminotherapie', 'SimulDemon',array('id' => $this->getId()));
		if (!is_object($cron)) {
			$cron = new cron();
			$cron->setClass('luminotherapie');
			$cron->setFunction('SimulDemon');
			$cron->setDeamon(1);
			$cron->setOption(array('id' => $this->getId()));
			$cron->setEnable(1);
			$cron->setSchedule('* * * * * *');
			$cron->save();
		}
		$cron->start();
		$cron->run();
	}
	public static function SimulDemon($_option){
		$luminotherapie=eqLogic::byId($_option['id']);
		if(is_object($luminotherapie)){
			while(true){
				$start = cache::byKey('luminotherapie::'.$luminotherapie->getId());
				if(is_object($start) && $start->getValue(false)){
					$luminotherapie->checkAndUpdateCmd('startSimu',1);
					log::add('luminotherapie','info',$luminotherapie->getHumanName().' Lancement de la simulation');
					$cmdSlide=cmd::byId(str_replace('#','',$luminotherapie->getConfiguration('DawnSimulatorCmd')));
					$cmdRGB=cmd::byId(str_replace('#','',$luminotherapie->getConfiguration('DawnSimulatorColorCmd')));
					if(is_object($cmdSlide))
						log::add('luminotherapie','info',$luminotherapie->getHumanName().' Mise a jours automatique de '.$cmdSlide->getHumanName());
					if(is_object($cmdRGB))
						log::add('luminotherapie','info',$luminotherapie->getHumanName().' Mise a jours automatique de '.$cmdRGB->getHumanName());
					$Ambiance=self::Sequences(json_decode(file_get_contents(dirname(__FILE__) . '/../../core/config/ambiance/'.$luminotherapie->getConfiguration('ambiance').'.json'), true));
					for($time=0;$time<=count($Ambiance['Luminosite']);$time++){
						$luminotherapie->checkAndUpdateCmd('tpsSimu',$time);
						$start = cache::byKey('luminotherapie::'.$luminotherapie->getId());
						if(!is_object($start) || !$start->getValue(false))
							break;
						if($luminotherapie->getConfiguration('repeat') && $time==count($Ambiance['Luminosite']))
							   $time=0;
						if($time==count($Ambiance['Luminosite']))
							continue;
						if(is_object($cmdSlide)){
							log::add('luminotherapie','debug',$luminotherapie->getHumanName().' Valeur de l\'intensité lumineuse : ' .$Ambiance['Luminosite'][$time]);
							$cmdSlide->execCmd(array('slider'=>$Ambiance['Luminosite'][$time]));
						}
						if(is_object($cmdRGB)){
							log::add('luminotherapie','debug',$luminotherapie->getHumanName().' Valeur de la couleur : ' .$Ambiance['Couleur'][$time]);
							$cmdRGB->execCmd(array('color'=>$Ambiance['Couleur'][$time]));
						}
						$start = cache::byKey('luminotherapie::'.$luminotherapie->getId());
						if(!is_object($start) || !$start->getValue(false))
							break;
						$loop = cache::byKey('luminotherapie::'.$luminotherapie->getId().'::loop');
						if(is_object($loop)){
							$nb=$loop->getValue(0)-1;
							cache::set('luminotherapie::'.$luminotherapie->getId(), $nb, 0);
							if($nb=0)
								break;
						}
						switch($luminotherapie->getConfiguration('temps')){
							case 'sec':
								sleep(1);
							break;
							case 'min':
								sleep(60);
							break;
							case 'heure':
								sleep(60*60);
							break;
						}
					}
					log::add('luminotherapie','info',$luminotherapie->getHumanName().' Fin de la simulation');
					cache::set('luminotherapie::'.$luminotherapie->getId(), false, 0);
				}
				$luminotherapie->checkAndUpdateCmd('tpsSimu',0);
				$luminotherapie->checkAndUpdateCmd('startSimu',0);
				sleep(config::byKey('waitDemon','luminotherapie'));
			}
		}
	}
	public static function Sequences($ambiance) {
		$Value=null;	
		foreach($ambiance as $key => $Sequences){	
			if(count($Sequences) >0){
				$Step=null;
				foreach($Sequences as $Sequence){
					if(!$Sequence['enable'])
						continue;
					if($key == 'Luminosite'){
						for($time=1; $time <= $Sequence['duree'];$time++){
							if(count($Value[$key])==0)
								$time=0;
							$Value[$key][]= ceil(self::equation($Sequence['duree'],$Sequence['lum'], $time, end($Value)));
						}
					}elseif($key == 'Couleur'){
						for($time=1; $time <= $Sequence['duree'];$time++){
							if(count($Value[$key])==0)
								$time=0;
							if($ambiance['Configuration']['Couleur']['hsl']){
								$Hue= ceil(self::equation($Sequence['duree'],$Sequence['Hue'], $time, end($Value)));
								$Lightness= ceil(self::equation($Sequence['duree'],$Sequence['Lightness'], $time, end($Value)));
								$Saturation= ceil(self::equation($Sequence['duree'],$Sequence['Saturation'], $time, end($Value)));
								$Value[$key][]=self::hsl2html(array($Hue,$Saturation,$Lightness));
							}else{
								$R= ceil(self::equation($Sequence['duree'],$Sequence['R'], $time, end($Value)));
								$G= ceil(self::equation($Sequence['duree'],$Sequence['G'], $time, end($Value)));
								$B= ceil(self::equation($Sequence['duree'],$Sequence['B'], $time, end($Value)));
								$Value[$key][]=self::rgb2html($R, $G, $B);
							}
						}
					}
				}
			}
		}
		return $Value;
	}
	public static function equation($Duree,$Sequence, $time, $Value) {
		switch ($Sequence['expression']){
			case 'constant':
				return $Sequence['offset'];
			case 'rampe':
				return $time * $Sequence['pente'] + $Sequence['offset'];
			case 'sin':
				if($Sequence['periode'] == '')
					$Sequence['periode']=1;
				return $Sequence['amplitude'] * sin(2*pi()*$time/$Sequence['periode'])+$Sequence['offset'];
			case 'carre':
				$time=$time-$Sequence['periode']*floor($time/$Sequence['periode']);
				if($time-$Sequence['periode'] * ($Sequence['dutty'] / 100) >= 0)
					return $Sequence['offset']+$Sequence['amplitude'];
			    	else
				  	return $Sequence['offset'];
			case 'InQuad':
				$time = $time / $Duree;
				return $Sequence['max'] * pow($time, 2) + $Sequence['offset'];
			case 'InOutQuad':
				$time = $time / $Duree * 2;
				if ($time < 1)
					return $Sequence['max'] / 2 * pow($time, 2) + $Sequence['offset'];
				else
					return -$Sequence['max'] / 2 * (($time - 1) * ($time - 3) - 1) + $Sequence['offset'];
			case 'InOutExpo':
				if ($time == 0)
					return $Sequence['offset'] ;
				if ($time == $Duree)
					return $Sequence['offset'] + $Sequence['max'];
				$time = $time / $Duree * 2;
				if ($time < 1)
					return $Sequence['max'] / 2 * pow(2, 10 * ($time - 1)) + $Sequence['offset'] - $Sequence['max'] * 0.0005;
				else{
					$time = $time - 1;
					return $Sequence['max'] / 2 * 1.0005 * (-pow(2, -10 * $time) + 2) + $Sequence['offset'];
				}
			case 'OutInExpo':
				if ($time < $Duree / 2){
					$Sequence['expression']  =  'OutExpo';
					$time = $time * 2;
					$Sequence['max'] = $Sequence['max'] / 2;
					return self::equation($Duree,$Sequence, $time, $Value);
				}else{
					$Sequence['expression']  =  'InExpo';
					$time = ($time * 2) - $Sequence['duree'];
					$Sequence['max'] = $Sequence['max'] / 2;
					$Sequence['offset'] = $Sequence['offset'] + $Sequence['max'] / 2;
					return self::equation($Duree,$Sequence, $time, $Value);
				}
			case 'InExpo':
				if($time == 0)
					return $Sequence['offset'];
				else
					return $Sequence['max'] * pow(2, 10 * ($time / $Duree- 1)) + $Sequence['offset'] - $Sequence['max'] * 0.001;	
			case 'OutExpo':
				if($time == $Duree)
					return $Sequence['offset'] + $Sequence['max'];
				else
					return $Sequence['max'] * 1.001 * (-pow(2, -10 * $time / $Duree) + 1) + $Sequence['offset'];
          	case 'polynome':
				if($Sequence['CoefA'] == '')
					$Sequence['CoefA']=0;
				if($Sequence['CoefB'] == '')
					$Sequence['CoefB']=0;
				if($Sequence['CoefC'] == '')
					$Sequence['CoefC']=0;
				if($Sequence['CoefD'] == '')
					$Sequence['CoefD']=0;
				if($Sequence['CoefE'] == '')
					$Sequence['CoefE']=0;
				return $Sequence['CoefA'] * pow($time, 4) + $Sequence['CoefB'] * pow($time, 3) + $Sequence['CoefC'] * pow($time, 2) + $Sequence['CoefD'] * $time + $Sequence['CoefE'] ;
		}
	}
	private static function hsl2rgb($hsl) {
      	log::add('luminotherapie','info',json_encode($hsl));
		list($h, $s, $l) = $hsl;
		$h /= 360;
		$s /=100;
		$l /=100;

		$r = $l;
		$g = $l;
		$b = $l;
		$v = ($l <= 0.5) ? ($l * (1.0 + $s)) : ($l + $s - $l * $s);
		if ($v > 0){
			$m;
			$sv;
			$sextant;
			$fract;
			$vsf;
			$mid1;
			$mid2;

			$m = $l + $l - $v;
			$sv = ($v - $m ) / $v;
			$h *= 6.0;
			$sextant = floor($h);
			$fract = $h - $sextant;
			$vsf = $v * $sv * $fract;
			$mid1 = $m + $vsf;
			$mid2 = $v - $vsf;

			switch ($sextant){
				case 0:
					$r = $v;
					$g = $mid1;
					$b = $m;
				break;
				case 1:
					$r = $mid2;
					$g = $v;
					$b = $m;
				break;
				case 2:
					$r = $m;
					$g = $v;
					$b = $mid1;
				break;
				case 3:
					$r = $m;
					$g = $mid2;
					$b = $v;
				break;
				case 4:
					$r = $mid1;
					$g = $m;
					$b = $v;
				break;
				case 5:
					$r = $v;
					$g = $m;
					$b = $mid2;
				break;
			}
		}
		$r = round($r * 255, 0);
		$g = round($g * 255, 0);
		$b = round($b * 255, 0);
		return array($r,$g,$b);
	}
	private static function hsl2html($hsl) {
		$rgb = self::hsl2rgb($hsl);
		return self::rgb2html($rgb);
	}
	private static function html2rgb($color){
		if ($color[0] == '#')
			$color = substr($color, 1);
		if (strlen($color) == 6)
			list($r, $g, $b) = array($color[0].$color[1],
		$color[2].$color[3],
		$color[4].$color[5]);
		elseif (strlen($color) == 3)
			list($r, $g, $b) = array($color[0].$color[0], $color[1].$color[1], $color[2].$color[2]);
		else
			return false;
		$r = hexdec($r); 
		$g = hexdec($g);
		$b = hexdec($b);
		return array($r, $g, $b);
	}
	private static function rgb2html($r, $g=-1, $b=-1)	{
		if (is_array($r) && sizeof($r) == 3)
			list($r, $g, $b) = $r;
		$r = intval($r); 
		$g = intval($g);
		$b = intval($b);
		
		$r = dechex($r<0?0:($r>255?255:$r));
		$g = dechex($g<0?0:($g>255?255:$g));
		$b = dechex($b<0?0:($b>255?255:$b));
		
		$color = (strlen($r) < 2?'0':'').$r;
		$color .= (strlen($g) < 2?'0':'').$g;
		$color .= (strlen($b) < 2?'0':'').$b;
		return '#'.$color;
	}
}
class luminotherapieCmd extends cmd {
    public function execute($_options = null) {	
		switch($this->getLogicalId()){
			case 'start':
				cache::set('luminotherapie::'.$this->getEqLogic()->getId(), true, 0);
				cache::set('luminotherapie::'.$this->getEqLogic()->getId().'::loop', 0, 0);
			break;
			case 'stop':
				cache::set('luminotherapie::'.$this->getEqLogic()->getId(), false, 0);
			break;
			case 'loop':
				cache::set('luminotherapie::'.$this->getEqLogic()->getId(), true, 0);
				cache::set('luminotherapie::'.$this->getEqLogic()->getId().'::loop', $_options['slider'], 0);
			break;
				
		}	
	}
}
?>
fichier desktop/js/ambiance.js

Code : Tout sélectionner

$(".SeqList").sortable({axis: "y", cursor: "move", items: ".SequenceGroup", placeholder: "ui-state-highlight", tolerance: "intersect", forcePlaceholderSize: true});
var currentAmbiance='';
$('.ambianceDisplayCard').off().on('click',function(){
	currentAmbiance=$(this).attr('data-ambiance_id');
	$('.eqLogicThumbnailDisplay').hide();	
	$.ajax({
		type: 'POST',            
		async: false,
		url: 'plugins/luminotherapie/core/ajax/ambiance.ajax.php',
		data:{
			action: 'get',
			name: currentAmbiance
		},
		dataType: 'json',
		global: false,
		error: function(request, status, error) {},
		success: function(data) {
			if (!data.result){
				return;
			}
			$('.ambianceAction[data-action=partage]').attr('href',"core/php/downloadFile.php?pathfile="+encodeURIComponent("plugins/luminotherapie/core/config/ambiance/"+currentAmbiance+".json"));
			$('.ambiance').show();
			$('.SequenceGroup').remove();
			if (typeof(data.result) != 'undefined') {
				$('body').setValues(data.result.Configuration, '.ConfigurationAttr');	
				for(var index in data.result.Luminosite) { 
					if( (typeof data.result.Luminosite[index] === "object") && (data.result.Luminosite[index] !== null) )
						addSequence(data.result.Luminosite[index],$('#luminotab'));
				}
				for(var index in data.result.Couleur) { 
					if( (typeof data.result.Couleur[index] === "object") && (data.result.Couleur[index] !== null) )
						addSequence(data.result.Couleur[index],$('#colortab'));
				}
			}
			UpdateSequenceGraph();
		} 
	});
});
$('.ambianceAction[data-action=returnToThumbnailDisplay]').off().on('click',function(){
	$('.ambiance').hide();
	$('.eqLogicThumbnailDisplay').show();	
});
$('.ambianceAction[data-action=save]').off().on('click',function(){
	$.ajax({
		type: 'POST',
		async:true,
		url: 'plugins/luminotherapie/core/ajax/ambiance.ajax.php',
		data: {
			action:'save',
			name:  currentAmbiance,
			ambiance: getAmbianceValue()
		},
		error: function (error) {
			$('#div_alert').showAlert({message: error.message, level: 'danger'});
		},
		success: function (_data) {
			UpdateSequenceGraph();
		}
	});
});
$('.ambianceAction[data-action=remove]').on('click', function () {
        bootbox.confirm('{{Etes-vous sûr de vouloir supprimer l\'ambiance}} ?', function (result) {
            if (result) {
			$.ajax({
				type: 'POST',
				async:true,
				url: 'plugins/luminotherapie/core/ajax/ambiance.ajax.php',
				data: {
					action:'remove',
					name: currentAmbiance,
				},
				error: function (error) {
					$('#div_alert').showAlert({message: error.message, level: 'danger'});
				},
				success: function (_data) {
					var vars = getUrlVars();
					var url = 'index.php?';
					for (var i in vars) {
						if (i != 'id' && i != 'saveSuccessFull' && i != 'removeSuccessFull') {
							url += i + '=' + vars[i].replace('#', '') + '&';
						}
					}
					loadPage(url);
				}
			});
		}
	});
});
$('.ambianceAction[data-action=add]').on('click', function () {
	bootbox.prompt("{{Nom de l'ambiance ?}}", function (result) {
		if (result !== null) {
			currentAmbiance=result;
			$('.eqLogicThumbnailDisplay').hide();	
			$('.ambiance').show();
			$('.SequenceGroup').remove();
		}
	});
});
$('.ambianceAction[data-action=copy]').off().on('click',function(){
	bootbox.prompt("{{Nom de l'ambiance ?}}", function (result) {
		if (result !== null) {
			currentAmbiance=result;
			$('.ambianceAction[data-action=save]').trigger('click');
		}
	});
});
$('.sequenceAttr[data-action=add]').off().on('click',function(){
  if($(this).closest('.tab-pane').attr('id') == 'luminotab'){
	addSequence({lum:{}}, $(this).closest('.tab-pane'));
  }else{
	  if($('.ConfigurationAttr[data-l1key=Couleur][data-l2key=hsl]').is(':checked'))
		addSequence({Hue:{},Saturation:{},Lightness:{}}, $(this).closest('.tab-pane'));
	  else
		addSequence({R:{},G:{},B:{}}, $(this).closest('.tab-pane'));
  }
});
function addSequence(_sequence,_el) {
	var Parameter=$('<tbody>');
	for(var index in _sequence) { 
		if(index != 'enable' && index != 'duree'){
			var tr = $('<tr>')
			tr.append($('<td>').text(index));
			tr.append($('<td>')
				.append($('<div class="input-group">')
					.append($('<select class="expressionAttr form-control input-sm" data-l1key="'+index+'" data-l2key="expression"/>')
						.append($('<option value="constant">')
						      .text('{{Constant}}'))
						.append($('<option value="rampe">')
						      .text('{{Rampe}}'))
						.append($('<option value="sin">')
						      .text('{{Sinusoide}}'))
						.append($('<option value="carre">')
						      .text('{{Carré}}'))
						.append($('<option value="InQuad">')
						      .text('{{InQuad}}'))
						.append($('<option value="InOutQuad">')
						      .text('{{InOutQuad}}'))
						.append($('<option value="InOutExpo">')
						      .text('{{InOutExpo}}'))
						.append($('<option value="OutInExpo">')
						      .text('{{OutInExpo}}'))
						.append($('<option value="InExpo">')
						      .text('{{InExpo}}'))
						.append($('<option value="OutExpo">')
						      .text('{{OutExpo}}'))
						.append($('<option value="polynome">')
						      .text('{{Polynome}}')))));
			tr.append(addParameter(_sequence.expression,index));
			Parameter.append(tr);
		}
	}
	var Sequences = $('<tr class="SequenceGroup">')
		.append($('<td>')
			.append($('<input type="checkbox" class="expressionAttr" data-l1key="enable" checked/>'))
			.append($('<a class="btn btn-default sequenceAttr btn-sm" data-action="remove">')
				.append($('<i class="fa fa-minus-circle">'))))
		.append($('<td>')
			.append($('<input type="text" class="expressionAttr form-control" data-l1key="duree" placeholder="Saisissez la duree du segment (en fonction de votre echelle de temps)">')))
		.append($('<td>')
			.append($('<table class="table table-bordered table-condensed">').append(Parameter)));
	_el.find('.SeqList .sequences').append(Sequences);
	_el.find('.SeqList .sequences').find('.SequenceGroup:last').setValues(_sequence, '.expressionAttr');	
	$('.sequenceAttr[data-action=remove]').off().on('click',function(){
		$(this).closest('tr').remove();
	});
	$('.expressionAttr[data-l2key=expression]').off().on('change',function(){
		$(this).closest('tr').find('td:last').html('');
		$(this).closest('tr').find('td:last').append(addParameter($(this).val(),$(this).attr('data-l1key')));
		UpdateSequenceGraph();
	});
	$('.expressionAttr[data-l1key=duree]').off().on('keyup',function(){
		UpdateSequenceGraph();
	});
	$('.expressionAttr[data-l2key=offset]').off().on('keyup',function(){
		UpdateSequenceGraph();
	});
	$('.expressionAttr[data-l2key=pente]').off().on('keyup',function(){
		UpdateSequenceGraph();
	});
	$('.expressionAttr[data-l2key=dutty]').off().on('keyup',function(){
		UpdateSequenceGraph();
	});
	$('.expressionAttr[data-l2key=periode]').off().on('keyup',function(){
		UpdateSequenceGraph();
	});
	$('.expressionAttr[data-l2key=amplitude]').off().on('keyup',function(){
		UpdateSequenceGraph();
	});
	$('.expressionAttr[data-l2key=max]').off().on('keyup',function(){
		UpdateSequenceGraph();
	});
	_el.find('.SeqList .sequences').find('.SequenceGroup:last').setValues(_sequence, '.expressionAttr');	
}
function addParameter(type,index) {
	var td=$('<td>');
    if(type!=="polynome")
    {
      td.append($('<div class="form-group">')
          .append($('<label class="col-sm-2 control-label">')
              .append('{{Offset}}')
              .append($('<sup>')
                  .append($('<i class="fa fa-question-circle tooltips" title="Saisissez l\'offset de votre rampe">'))))
          .append($('<div class="col-md-8 input-group">')
              .append($('<input type="text" class="expressionAttr form-control" data-l1key="'+index+'" data-l2key="offset" placeholder="Saisissez l\'offset de votre segment">'))));
    }
	switch (type){
		case "rampe":
			td.append($('<div class="form-group">')
				.append($('<label class="col-sm-2 control-label">')
					.append('{{Pente}}')
					.append($('<sup>')
						.append($('<i class="fa fa-question-circle tooltips" title="Saisissez la pente de votre rampe">'))))
				.append($('<div class="col-md-8 input-group">')
					.append($('<input type="text" class="expressionAttr form-control" data-l1key="'+index+'" data-l2key="pente" placeholder="Saisissez la pente de votre rampe">'))));
		break;
		case"carre":
			td.append($('<div class="form-group">')
				.append($('<label class="col-sm-2 control-label">')
					.append('{{Rapport cyclique}}')
					.append($('<sup>')
						.append($('<i class="fa fa-question-circle tooltips" title="Saisissez le rapport cyclique de votre signal (%)">'))))
				.append($('<div class="col-md-8 input-group">')
					.append($('<input type="text" class="expressionAttr form-control" data-l1key="'+index+'" data-l2key="dutty" placeholder="Saisissez le rapport cyclique de votre signal (%)">'))));
		case "sin":
			td.append($('<div class="form-group">')
				.append($('<label class="col-sm-2 control-label">')
					.append('{{Periode}}')
					.append($('<sup>')
						.append($('<i class="fa fa-question-circle tooltips" title="Saisissez la période de votre sinusoide">'))))
				.append($('<div class="col-md-8 input-group">')
					.append($('<input type="text" class="expressionAttr form-control" data-l1key="'+index+'" data-l2key="periode" placeholder="Saisissez la frequence de votre sinusoide">'))));
			td.append($('<div class="form-group">')
				.append($('<label class="col-sm-2 control-label">')					.append('{{Amplitude}}')
					.append($('<sup>')
						.append($('<i class="fa fa-question-circle tooltips" title="Saisissez l\'amplitude de votre segement">'))))
				.append($('<div class="col-md-8 input-group">')
					.append($('<input type="text" class="expressionAttr form-control" data-l1key="'+index+'" data-l2key="amplitude" placeholder="Saisissez l\'amplitude de votre segement">'))));
			break;
		case 'InQuad':
		case 'InOutQuad':
		case 'InOutExpo':
		case 'OutInExpo':
		case 'InExpo':
		case 'OutExpo':
			td.append($('<div class="form-group">')
				.append($('<label class="col-sm-2 control-label">')
					.append('{{Valeur Maximal}}')
					.append($('<sup>')
						.append($('<i class="fa fa-question-circle tooltips" title="Saisissez la valeur maximal de votre simulation">'))))
				.append($('<div class="col-md-8 input-group">')
					.append($('<input type="text" class="expressionAttr form-control" data-l1key="'+index+'" data-l2key="max" placeholder="Saisissez la valeur maximal de votre simulation">'))));
		break;
		case "polynome":
			td.append($('<div class="form-group">')
				.append($('<label class="col-sm-12 control-label">')
					.append('{{Forme A*x^4 + B*x^3 + C*x^2 + D*x + E}}')
					.append($('<sup>')
						.append($('<i class="fa fa-question-circle tooltips" title="Forme A*x^4 + B*x^3 + C*x^2 + D*x + E">')))) );
			td.append($('<div class="form-group">')
				.append($('<label class="col-sm-2 control-label">')
					.append('{{A}}')
					.append($('<sup>')
						.append($('<i class="fa fa-question-circle tooltips" title="Coef A">'))))
				.append($('<div class="col-md-8 input-group">')
					.append($('<input type="text" class="expressionAttr form-control" data-l1key="'+index+'" data-l2key="CoefA" placeholder="Coef A">'))));
			td.append($('<div class="form-group">')
				.append($('<label class="col-sm-2 control-label">')
					.append('{{B}}')
					.append($('<sup>')
						.append($('<i class="fa fa-question-circle tooltips" title="Coef B">'))))
				.append($('<div class="col-md-8 input-group">')
					.append($('<input type="text" class="expressionAttr form-control" data-l1key="'+index+'" data-l2key="CoefB" placeholder="Coef B">'))));
			td.append($('<div class="form-group">')
				.append($('<label class="col-sm-2 control-label">')
					.append('{{C}}')
					.append($('<sup>')
						.append($('<i class="fa fa-question-circle tooltips" title="Coef C">'))))
				.append($('<div class="col-md-8 input-group">')
					.append($('<input type="text" class="expressionAttr form-control" data-l1key="'+index+'" data-l2key="CoefC" placeholder="Coef C">'))));
			td.append($('<div class="form-group">')
				.append($('<label class="col-sm-2 control-label">')
					.append('{{D}}')
					.append($('<sup>')
						.append($('<i class="fa fa-question-circle tooltips" title="Coef D">'))))
				.append($('<div class="col-md-8 input-group">')
					.append($('<input type="text" class="expressionAttr form-control" data-l1key="'+index+'" data-l2key="CoefD" placeholder="Coef D">'))));
			td.append($('<div class="form-group">')
				.append($('<label class="col-sm-2 control-label">')
					.append('{{E}}')
					.append($('<sup>')
						.append($('<i class="fa fa-question-circle tooltips" title="Coef E">'))))
				.append($('<div class="col-md-8 input-group">')
					.append($('<input type="text" class="expressionAttr form-control" data-l1key="'+index+'" data-l2key="CoefE" placeholder="Coef E">'))));

		break;
	}		
	return td;
}
function getAmbianceValue() {
	if (typeof(AmbianceArray) == "undefined") 
		var AmbianceArray= new Object();
	else
		AmbianceArray=null;
	AmbianceArray.Configuration= new Array();
	AmbianceArray.Luminosite= new Array();
	AmbianceArray.Couleur= new Array();
	AmbianceArray.Configuration=$('body').getValues('.ConfigurationAttr')[0];
	$('#luminotab .SequenceGroup').each(function( index ) {
		AmbianceArray.Luminosite.push($(this).getValues('.expressionAttr')[0]);
	});
	var SequenceArray= new Array();
	$('#colortab .SequenceGroup').each(function( index ) {
		AmbianceArray.Couleur.push($(this).getValues('.expressionAttr')[0]);
	});
	return JSON.stringify(AmbianceArray);
}
function UpdateSequenceGraph() {
	$.ajax({
		type: 'POST',
		async:true,
		url: 'plugins/luminotherapie/core/ajax/ambiance.ajax.php',
		data: {
			action:'getSimulaitonPoint',
			Sequences: getAmbianceValue()
		},
		dataType: 'json',
		error: function (request, status, error) {
		    handleAjaxError(request, status, error);
		},
		success: function (data) {			
			if (data.result == null) 
				return;
			if (typeof(data.result.Luminosite) != 'undefined') {
				var Series = [{
					step: true,
					name: '{{Simulation}}',
					data: data.result.Luminosite,
					type: 'line',
					marker: {
						enabled: false
					},
					tooltip: {
						valueDecimals: 2
					},
				}];
				drawSimpleGraph('SeqLumGraph', Series);
			}
			if (typeof(data.result.Couleur) != 'undefined') 
				drawColorGraph($('#SeqColorGraph'), data.result.Couleur);
		}
	});
}
var timer= null;
function drawColorGraph(_el, _serie) {
  	_el.css('width',"100");
  	_el.css('height',"100");
	var index=0
	if(timer!= null)
		clearInterval(timer);
  	timer = setInterval(function(){
		_el.css('background-color',_serie[index]);
      		_el.text(_serie[index])
		index++;
		if(index >_serie.length)
			index=0;
	},100);
}
fichier core/config/Aube_perso.json

Code : Tout sélectionner

{"Configuration":{"Couleur":{"hsl":"0"}},"Luminosite":[{"enable":"1","duree":"1200","lum":{"expression":"constant","offset":"255"}},{"enable":"1","duree":"300","lum":{"expression":"constant","offset":"255"}},{"enable":"1","duree":"1","lum":{"expression":"constant","offset":"0"}}],"Couleur":[{"enable":"1","duree":"1200","R":{"expression":"polynome","CoefA":"","CoefB":"-0.000000164397790541581","CoefC":"0.000210745550746","CoefD":"0.046821520527403","CoefE":"4"},"G":{"expression":"polynome","CoefA":"","CoefB":"-0.0000000509407803525451","CoefC":"0.0000858970658970659","CoefD":"-0.005543502249385","CoefE":"1"},"B":{"expression":"polynome","CoefA":"","CoefB":"0.00000000830967628355325","CoefC":"-0.00000450216450216448","CoefD":"0.00004153580624168","CoefE":"0"}},{"enable":"1","duree":"300","R":{"expression":"constant","offset":"80"},"G":{"expression":"constant","offset":"30"},"B":{"expression":"constant","offset":"08"}},{"enable":"1","duree":"1","R":{"expression":"constant","offset":"0"},"G":{"expression":"constant","offset":"0"},"B":{"expression":"constant","offset":"0"}}]}
config de la simulation en pièce jointe, c'est le seul fichier que j'ai pu mettre en pièce jointe...
Pièces jointes
Capture d’écran de 2018-04-17 09-40-21modif.png
Capture d’écran de 2018-04-17 09-40-21modif.png (87.54 Kio) Consulté 3032 fois

Répondre

Revenir vers « [Catégorie] Organisation »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 3 invités