[Plugins tiers][Officiel]Luminothérapie
Re: [Plugins tiers][Officiel]Luminothérapie
@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
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
Protocol: Z-Wave, EnOcean, RFXtrx433E, Xiaomi, BLEA, MQTT, ESPeasy, Jeeduino, Abeille
Re: [Plugins tiers][Officiel]Luminothérapie
Voir ci avant payant
Re: [Plugins tiers][Officiel]Luminothérapie
OK je comprends
Bonne soirée
Bonne soirée
Jeedom 3.3.30 sur Debian 9.4
NUC7I5BNK avec ESXi 6.7
NUC7I5BNK avec ESXi 6.7
Re: [Plugins tiers][Officiel]Luminothérapie
@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éé:
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.
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.
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"}}]}
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"}}]}
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
Protocol: Z-Wave, EnOcean, RFXtrx433E, Xiaomi, BLEA, MQTT, ESPeasy, Jeeduino, Abeille
Re: [Plugins tiers][Officiel]Luminothérapie
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.
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
Protocol: Z-Wave, EnOcean, RFXtrx433E, Xiaomi, BLEA, MQTT, ESPeasy, Jeeduino, Abeille
Re: [Plugins tiers][Officiel]Luminothérapie
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.
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
Protocol: Z-Wave, EnOcean, RFXtrx433E, Xiaomi, BLEA, MQTT, ESPeasy, Jeeduino, Abeille
Re: [Plugins tiers][Officiel]Luminothérapie
C'est effectivement bisare ce probleme.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éé: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"}}]}{"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"}}]}
Maintenant, je peux afficher cette ambiance et la modifier.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"}}]}
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.
J'ai rien trouvé dans le code qui pourrai genere ca
Je n'arrive pas a reproduire problemShyrka973 a écrit : ↑22 janv. 2018, 21:18Je 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.
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
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
- Des Screenshots de votre configuration
- Le Log au moment du problème constaté
Encouragez-moi https://www.paypal.me/mikant28
Re: [Plugins tiers][Officiel]Luminothérapie
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
- 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
- Des Screenshots de votre configuration
- Le Log au moment du problème constaté
Encouragez-moi https://www.paypal.me/mikant28
Re: [Plugins tiers][Officiel]Luminothérapie
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.
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
Protocol: Z-Wave, EnOcean, RFXtrx433E, Xiaomi, BLEA, MQTT, ESPeasy, Jeeduino, Abeille
Re: [Plugins tiers][Officiel]Luminothérapie
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
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
- Des Screenshots de votre configuration
- Le Log au moment du problème constaté
Encouragez-moi https://www.paypal.me/mikant28
Re: [Plugins tiers][Officiel]Luminothérapie
Est ce qu'il y a des suggestions sur ce plugin?
Est ce que vous souhaitez partager des ambiances?
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
- Des Screenshots de votre configuration
- Le Log au moment du problème constaté
Encouragez-moi https://www.paypal.me/mikant28
-
- Timide
- Messages : 58
- Inscription : 13 avr. 2018, 15:32
Re: [Plugins tiers][Officiel]Luminothérapie
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
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.
Re: [Plugins tiers][Officiel]Luminothérapie
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
- Des Screenshots de votre configuration
- Le Log au moment du problème constaté
Encouragez-moi https://www.paypal.me/mikant28
-
- Timide
- Messages : 58
- Inscription : 13 avr. 2018, 15:32
Re: [Plugins tiers][Officiel]Luminothérapie
voila le script que j'utilisais :
EDIT : simplifié le code en supprimant les lignes de debug
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
Dernière édition par kurairaito le 13 avr. 2018, 16:09, édité 1 fois.
Re: [Plugins tiers][Officiel]Luminothérapie
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
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
- Des Screenshots de votre configuration
- Le Log au moment du problème constaté
Encouragez-moi https://www.paypal.me/mikant28
-
- Timide
- Messages : 58
- Inscription : 13 avr. 2018, 15:32
Re: [Plugins tiers][Officiel]Luminothérapie
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.
Arrivé chez moi, je montrerais un résultat des courbes faite dans excel.
-
- Timide
- Messages : 58
- Inscription : 13 avr. 2018, 15:32
Re: [Plugins tiers][Officiel]Luminothérapie
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...
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é 97 fois
-
- Timide
- Messages : 58
- Inscription : 13 avr. 2018, 15:32
Re: [Plugins tiers][Officiel]Luminothérapie
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.
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.
Re: [Plugins tiers][Officiel]Luminothérapie
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
- Des Screenshots de votre configuration
- Le Log au moment du problème constaté
Encouragez-moi https://www.paypal.me/mikant28
-
- Timide
- Messages : 58
- Inscription : 13 avr. 2018, 15:32
Re: [Plugins tiers][Officiel]Luminothérapie
fichier core/class/luminotherapie.class.php
fichier desktop/js/ambiance.js
fichier core/config/Aube_perso.json
config de la simulation en pièce jointe, c'est le seul fichier que j'ai pu mettre en pièce jointe...
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;
}
}
}
?>
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);
}
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"}}]}
- Pièces jointes
-
- Capture d’écran de 2018-04-17 09-40-21modif.png (87.54 Kio) Consulté 3126 fois
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités