Juste un petit mot pour te dire que comme beaucoup l’ont déjà fait je trouve le contenu, que tu as produit et que je lisais dans ton blog, d’une qualité remarquable dans le niveau de pédagogie et de détail apporté. La façon et le contenu sont très inspirant et j’avais comme beaucoup commencé à mettre en oeuvre, doucement, beaucoup de tes tutos.
Ceci étant, une fois tout cela dit, je n’avais pas pour autant donné de retour vers toi qu’il soit pécuniaire (il me semble que tu avais une brique PayPal) ou même de ressenti comme je viens de le faire.
On se dit toujours qu’on va le faire, on va le faire demain … et le temps passe.
Ayant moi-même un blog plutôt nourri ces derniers temps sur un autre sujet(Généalogie), je suis convaincu qu’on écrit en partie pour soi mais aussi pour les autres et avec envie d’être lu.
J’ai comme toi fais le choix de ne pas y mettre de publicité et donc mon hébergement doit me couter une 50aine d’Euros par an. (Je dois surement avoir beaucoup moins de visites que tu n’en a, la généalogie attire moins que la techno).
C’est une dépense qui passe dans mes loisirs et si ca me prends trop de temps et que je n’ai pas envie d’écrire … je ne le fais pas. Je comprend donc parfaitement ta position, tu ne le fais pas pour gagner de l’argent mais cela ne doit pas te couter (en argent comme en contrainte).
Je ne cherche pas à te convaincre, juste à partager le fait que ton contenu est extrêmement apprécié, que nous serions bien sur tous très heureux de le voir revenir sous une forme ou une autre.
Mais quelque soit la décision que tu prendras, ce sera la tienne et elle sera donc forcément légitime .
PS je savais que j’aurais du aller plus vite sur la lecture de la détection de présence
Je en suis un parmi certainement pecoup d’autre que profitons de ton Blog, et ton chois de rester libre sans pub me plais vraiment.
POURQUOI TU NOUS DONNE PAS LA POSSIBILITÉ DE PARTICPÉ AU FRAIS?
Je serais parmis les premiers que le feront.
Très Amicalement et haut les coeur
Salut,
je suis tout a fais d’accord avec toi de l’interet de blog de notre ami @benj29 mon français moyen m’empêche de devlopper plus hélas mais tu l’a fais très bien
Merci et amitié a toi
Merci de vos messages, j’ai dit que j’étudiais le sujet.
Merci de vos remarques en tout cas, j’apprécie.
Le sujet n’est pas tant financier, mais il l’est aussi au-delà. Je vois le « pillage » (le mot est dur) mais il est présent et quotidien.
Produire des articles de qualité plutôt de quantité est aussi un choix (c’est un peu comme un entrainement pour du triathlon pour les habitués).
Bref, je regarde chez O2switch entre autre.
@nak, le don était ouvert sur le blog, je ne comprends pas ta remarque. Je dois dire que j’ai eu des dons étonnants (des fois ! > 20€) mais des dons de 1€ où je me suis demandé l’intérêt… lol.
C’est aussi une volonté d’atteindre un objectif de production et de partage et clairement je manque de temps.
Me reste à produire le dernier tableau.
Voir avec @olivvv59 si alternative pour le colspan à défaut je passerai sur des titres à gauche avec icone comme l’ancien design.
L’opacité + le fond darksobre améliore l’esthétique je trouve.
PS : j’ai tout ce qu’il faut pour restaurer le blog.
PS 2 : concernant webarchive, je suis gêné de voir l’aspiration dans le principe. Je me pose même la question de la légalité d’un tel système tant le plagiat et la propriété intellectuelle attachée peut être détournée.
PS 3 : si je ne continuais pas cela, je publierai tout le contenu sur le forum.
Salut @benj29 mon idée est que tu publie la somme total annuelle et le devisé par 12 ce que va donner le cout mensuel les sponsors seront nous les utilisateurs (apelle ca si tu le souhaite comité des sponsors privés) et ca n’a rien avoir avec les donne a 1 euro .
moi meme et je suis convaincu d’autres amis tu libérons de charge financier de site, puisque tu passe des heurs a mettre des articles ce que represent la largement ta cote par . il est évident que les memebres de comité des sponsors ne peuvent etre que des person privé et en aucun cas ne peuvent intervenir dans ta politique rédactionnel, maintenant si il ya pillage de tes article ca prouve que ton bloge est riche et utile, si les pilleurs ne montion pas la paternité de ton blog les lecteurs ne sont pas dupe. voila mon idée je la semet a toi et aux amis que suive tes écrits. excuse mon français moyen et reçois toutes mes salutation et respect
Hello
Même reponse que tous.
Ton blog est / a été une belle source d’inspiration.
J’ai démarré ma migration eedomus vers jeedom avec ton blog il y a un an.
+1 pour le hosting chez toi si tu as un acces FTTH. Si tu as un NAS Type syno, ca se fait facilement et graphiquement sans avoir à mettre les mains dans le camboui.
Première passe complétée après 1 mois et 1 semaine.
1 design pour tout résumer. Point.
Reste à développer toute la partie popup et interactive.
Il est intéressant de noter qu’il y a des écarts entre la vue « PC » et la vue « tablette » avec Webview avec JPI de @dJuL notamment au niveau des tableaux HTML.
la météo utilise le weatherwidget.io remis dans un tableau par le plugin html ; les boutons permettent d’avoir un TTS sur les conditions actuelles et à venir ; le second permettra d’afficher un popup des prévisions à 5 jours.
les infos environnementales sont des moyennes / min et max et se colorisent en fonction d’une plage. Idem pour les alertes givre, météo, les précipitations etc. L’index UV est un widget code qui me change la couleur le niveau des UV et l’icone.
les ouvrants changent de couleur en fonction de l’état mais aussi de la présence dans la maison. Par exemple le volet passe en orange s’il est fermé et que nous sommes là. A contrario, si nous sommes absents et qu’il est ouvert, il est rouge (capter la chaleur). Je joue sur les options du widget multi action avec les icones et le code php de @noodom. Pour palier au problème que ce code php ré-appuie sur l’icone, j’ai mis une simple zone avec une macro ; simple et efficace. Et surtout cela me permet d’interdire l’appui sur le bouton si l’alarme est mise et que nous ne sommes pas là. C’est là que je contrôle les accès des véhicules et les automatismes associés (si je gare la voiture, la moto ou madame dans le garage ou autre).
Pour le contrôle extérieur, les boutons core sont très bien et beaux donc autant les utiliser. Même recette pour les températures. Je récupère l’état de la filtration par le plugin piscine de @scadinot. La seule différence et que je mets en forme les horaires en incluant le mode de la piscine. Iopool mettant en place une API à l’été, je pourrai compléter cette partie.
Pour le contrôle intérieur, j’en ai profité pour gérer au mieux mon ampli multizone. Quelques prises critiques dans la maison et un pilotage harmony + tablette par JPI et l’appel des APK pour lancer tunein, spotify etc ou quelques modes de la TV pour le petit loup.
Le résumé global me permet d’un coup d’oeil d’avoir l’heure et la date (merci @Salvialf) et le mode de la maison : chauffage, clim, arrêt etc et les usages : travail, vacances, weekend, absent etc. C’est aussi ici que je pourrais tout basculer : dérogation eau chaude, changement de mode de chauffage ou passage manuel en mode vacances (seul mode que je change à la main notamment pour sa sortie, la fin des vacances triste !). Idem pour la gestion des personnes et des doubles de clés autorisés.
Le tableau de suivi du confort et des usages me permet d’avoir un état sur les températures (colorisés en fonction du mode clim ou chauffage ; on regarde en > ou en < en fonction du mode), pareil pour l’humidité et les usages : si un split tourne, si la VMC d’un étage tourne, si une porte est ouverte etc. Les boutons en haut me permettront d’accéder aux prises et autres pilotages (notamment pour voir les agendas, températures historisées etc). Idem pour les indicateurs d’alerte : fumée, fuite d’eau. Merci aqara.
Partie sécurité et alarme. J’ai l’état, je peux basculer en alarme partielle, totale ou de nuit. Quelques indicateurs clés me permettent de savoir la configuration en cours : volet se fermant si alarme mise, caméra en cours de détection de mouvement, choix de l’alarme en basculement auto, présence dans la maison etc. De même 3 boutons dans le futur pour accéder aux caméras, la configuration et au digicode pour débloquer l’alarme.
Pour la partie localisation. J’ai l’état des indicateurs : GPS, wifi, clé, forçage d’absence etc. A terme, le bouton me permettra d’ouvrir un popup pour savoir où est la personne. Petit widget graphique de l’état de l’alarme de la moto et la batterie.
Bon le courrier, facile. Courrier, colis, récupéré ou non. Idem ça se colorise.
Supervision, l’excellent petit LED pour avoir l’état du système. J’avais pensé à en mettre qu’une seule OU de l’ensemble mais après réflexion je vais ajouter des zones pour ouvrir des popups et me faciliter la gestion : vue unitaire de chaque élément, de chaque plugin, de chaque batterie de capteurs ou même faire les mises à jour de jpi par exemple.
Last one le tableau de suivi des consommations. Le statut me donne si délestage, production PV, fuite d’eau, la consigne retenue pour l’eau chaude (en fonction du nombre de personnes), si les clims tirent (>100W), idem pour la piscine. L’instantanée est travaillé avec les couleurs relatives au niveau de puissance appelée ou la consommation (heure, min etc). J’ai une image du facteur de puissance (W et VA). Pour le PV, j’ai préféré avoir la production en cours et le % de ce que j’ai utilisé sur la journée (le reste étant renvoyé sur le réseau). Pour l’eau, la consommation à la min et à l’heure sont des images fidèles de nos usages. La température de l’eau chaude et la conso instantanée des 2 autres usages importants de la maison piscine et climatisation globale. Vient ensuite des indicateurs quotidiens en général la consommation et le coût associé. A la différence de l’eau chaude où je préfère avoir la durée de chauffe et la consommation d’eau de la journée.
Le petit widget chevron me donne une image de la dernière semaine complète par rapport à la surprécédente. Bien plus fidèle que la veille avant-veille (notamment le vendredi/samedi ou le dimanche/lundi). Merci @superbricolo et @Thibaut_T pour les ajouts dans Suivi Conso, c’est aussi grâce à votre travail qu’on en arrive là. La dernière colonne reste le suivi mensuel de ces usages.
Très beau design, pas de fioritures, clair et lisible, c’est ce que je préfère.
Concernant les pop up que tu dois faire et que tu évoques souvent, quelle méthode comptes tu utiliser ?
J’ai testé la méthode ici [TUTO] Popup dans un design - #14 par Thom mais je trouve que pour les graphiques cela alourdit considérablement mon système (rpi 3b+)
Quelques widgets partagés, extrait de nombreux codes trouvés sur le forum et modifié à mon utilisation.
Attention, il vous faut le plugin icones de @ZygOm4t1k.
Le widget d’alarme de la moto icone + le niveau de batterie.Il faut passer les options et jouer du code de @noodom pour changer l’option alarme par le widget.
<div class="tooltips cmd cmd-widget #history#" data-type="info" data-subtype="numeric" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#" style="display: block;">
<center>
<span class="iconCmd"></span><span><strong class="state" style="font-size: 25px;"></strong></span><span class="unite"></span>
</center>
<script>
jeedom.cmd.update['#id#'] = function(_options){
var state = _options.display_value;
var cmd = $('.cmd[data-cmd_id=#id#]');
var alarme = is_numeric('#alarme#') ? parseFloat('#alarme#'):0;
cmd.attr('title','Valeur du '+_options.valueDate+', collectée le '+_options.collectDate);
// alarme = 0 (alarme = 0, online = 1)
if (alarme == 0) {
if (state >= 40) {
// vert car alarme désactivée, vert car en ligne, vert batterie car ok
cmd.find('.iconCmd').empty().append('<i class="Mdi mdi-lock-open-variant" style="color:#30b455;font-size:20px;"></i><div style="font-size:10px;color:#30b455;">#state#<span style="font-size:10px;color:#30b455;">%</span></div>');
}
else {
// orange car alarme requiert attention, rouge var batterie déchargé
cmd.find('.iconCmd').empty().append('<i class="Mdi mdi-lock-open-variant" style="color:#ff8c00;font-size:20px;"></i><div style="font-size:10px;color:#da3037;">#state#<span style="font-size:10px;color:#da3037;">%</span></div>');
}
}
// alarme = 1 (alarme = 1, online = 1)
else if (alarme == 1) {
if (state >= 40) {
// rouge car alarme activée, vert car batterie OK
cmd.find('.iconCmd').empty().append('<i class="Mdi mdi-lock-check" style="color:#da3037;font-size:20px;"></i><div style="font-size:10px;color:#30b455;">#state#<span style="font-size:10px;color:#30b455;">%</span></div>');
}
else {
// rouge car alarme activée, rouge car batterie déchargée
cmd.find('.iconCmd').empty().append('<i class="Mdi mdi-lock-alert" style="color:#da3037;font-size:20px;"></i><div style="font-size:10px;color:#da3037;">#state#<span style="font-size:10px;color:#da3037;">%</span></div>');
}
}
// alarme = 2 (alarme = 1, online = 0)
else if (alarme == 2) {
if (state >= 40) {
// rouge car alarme activée, vert car batterie ok
cmd.find('.iconCmd').empty().append('<i class="Mdi mdi-lock-question" style="color:#da3037;font-size:20px;"></i><div style="font-size:10px;color:#30b455;">#state#%<span style="font-size:10px;color:#30b455;">%</span></div>');
}
else {
cmd.find('.iconCmd').empty().append('<i class="Mdi mdi-lock-question" style="color:#da3037;font-size:20px;"></i><div style="font-size:10px;color:#da3037;">#state#<span style="font-size:10px;color:#da3037;">%</span></div>');
}
}
// alarme = 3 (alarme = 0, online = 0)
else if (alarme == 3) {
if (state >= 40) {
// vert car alarme désactivée, vert car
cmd.find('.iconCmd').empty().append('<i class="Mdi mdi-lock-question" style="color:#30b455;font-size:20px;"></i><div style="font-size:10px;color:#30b455;">#state#<span style="font-size:10px;color:#30b455;">%</span></div>');
}
else {
cmd.find('.iconCmd').empty().append('<i class="Mdi mdi-lock-question" style="color:#30b455;font-size:20px;"></i><div style="font-size:10px;color:#da3037;">#state#<span style="font-size:10px;color:#da3037;">%</span></div>');
}
}
//cmd.find('.state').empty().append(' '+state);
//cmd.find('.unite').empty().append(' #unite#');
if(_options.alertLevel){
$('.cmd[data-cmd_id=#id#]').removeClass('label label-warning label-danger')
if(_options.alertLevel == 'warning'){
$('.cmd[data-cmd_id=#id#]').addClass('label label-warning');
}else if(_options.alertLevel == 'danger'){
$('.cmd[data-cmd_id=#id#]').addClass('label label-danger');
}
}
}
jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'});
</script>
</div>
Pour savoir si je chauffe ou refroidi ou rien, je modifie une variable statut (voir article de JF sur le confort) qui me permet de récupérer l’état d’un split. Arrêté, froid ou chaud.
Pour la consigne de l’eau chaude en cours avec l’état du chauffe eau (je change l’icone) ; il faut là encore faire l’astuce du php et l’option chauffe.
<div class="tooltips cmd cmd-widget #history#" data-type="info" data-subtype="numeric" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#" style="display: block;">
<center>
<span class="iconCmd"></span><span><strong class="state" style="font-size: 25px;"></strong></span><span class="unite"></span>
</center>
<script>
jeedom.cmd.update['#id#'] = function(_options){
var state = _options.display_value;
var cmd = $('.cmd[data-cmd_id=#id#]');
// si production on inverse le code couleur et chevron
var chauffe = is_numeric('#chauffe#') ? parseFloat('#chauffe#'):0;
if (chauffe == 0) {
if (state == 50) {
cmd.find('.iconCmd').empty().append('<i class="icon Mdi mdi-fire" style="color:#ff8c00;font-size:20px;"></i><span style="font-size:12px;color:#ff8c00;vertical-align:middle;text-align:center;"> #state#</span><span style="font-size:12px;color:#ff8c00;vertical-align:middle;text-align:center;"> °C</span>');
}
else if (state == 60) {
cmd.find('.iconCmd').empty().append('<i class="icon Mdi mdi-fire" style="color:#da3037;font-size:20px;"></i><span style="font-size:12px;color:#da3037;vertical-align:middle;text-align:center;"> #state#</span><span style="font-size:12px;color:#da3037;vertical-align:middle;text-align:center;"> °C</span>');
}
}
else if (chauffe == 1) {
if (state == 50) {
cmd.find('.iconCmd').empty().append('<i class="icon Mdi mdi-fire-alert" style="color:#ff8c00;font-size:20px;"></i><span style="font-size:12px;color:#ff8c00;vertical-align:middle;text-align:center;"> #state#</span><span style="font-size:12px;color:#ff8c00;vertical-align:middle;text-align:center;"> °C</span>');
}
else if (state == 60) {
cmd.find('.iconCmd').empty().append('<i class="icon Mdi mdi-fire-alert" style="color:#da3037;font-size:20px;"></i><span style="font-size:12px;color:#da3037;vertical-align:middle;text-align:center;"> #state#</span><span style="font-size:12px;color:#da3037;vertical-align:middle;text-align:center;"> °C</span>');
}
}
//cmd.find('.state').empty().append(' '+state);
//cmd.find('.unite').empty().append(' #unite#');
if(_options.alertLevel){
$('.cmd[data-cmd_id=#id#]').removeClass('label label-warning label-danger')
if(_options.alertLevel == 'warning'){
$('.cmd[data-cmd_id=#id#]').addClass('label label-warning');
}else if(_options.alertLevel == 'danger'){
$('.cmd[data-cmd_id=#id#]').addClass('label label-danger');
}
}
}
jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'});
</script>
</div>
Pour la tendance hebdo, je passe le % calculé par le plugin suivi conso d’une semaine sur l’autre et j’affiche en fonction un chevron bas, haut, simple ou double et la couleur. Je gère le 0 aussi… et je gère le sens car dans le cas de la production c’est l’inverse de la consommation (option production).
<div class="tooltips cmd cmd-widget #history#" data-type="info" data-subtype="numeric" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#" style="display: block;">
<center>
<span class="iconCmd"></span><span><strong class="state" style="font-size: 25px;"></strong></span><span class="unite"></span>
</center>
<script>
jeedom.cmd.update['#id#'] = function(_options){
var state = _options.display_value;
var cmd = $('.cmd[data-cmd_id=#id#]');
// si production on inverse le code couleur et chevron
var production = is_numeric('#production#') ? parseFloat('#production#'):0;
if (production == 0) {
if (state == 0) {
cmd.find('.iconCmd').empty().append('<i class="icon fa font-awesome-angle-right" style="color:#acacac;font-size:15px;"></i><span style="font-size:11px;color:#acacac;"> #state#<span style="font-size:11px;color:#acacac;">%</span></span>');
}
else if (state <= -10) {
cmd.find('.iconCmd').empty().append('<i class="icon fa font-awesome-angle-double-down" style="color:#30b455;font-size:15px;"></i><span style="font-size:11px;color:#30b455;"> #state#<span style="font-size:11px;color:#30b455;">%</span></span>');
}
else if ((state > -10) && (state < 0)) {
cmd.find('.iconCmd').empty().append('<i class="icon fa fa-chevron-down" style="color:#30b455;font-size:15px;"></i><span style="font-size:11px;color:#30b455;"> #state#<span style="font-size:11px;color:#30b455;">%</span></span>');
}
else if (state >= 10) {
cmd.find('.iconCmd').empty().append('<i class="icon fa font-awesome-angle-double-up" style="color:#da3037;font-size:15px;"></i><span style="font-size:11px;color:#da3037;"> #state#<span style="font-size:11px;color:#da3037;">%</span></span>');
}
else if ((state < 10) && (state > 0)) {
cmd.find('.iconCmd').empty().append('<i class="icon fa fa-chevron-up" style="color:#da3037;font-size:15px;"></i><span style="font-size:11px;color:#da3037;"> #state#<span style="font-size:11px;color:#da3037;">%</span></span>');
}
}
else if (production == 1) {
if (state == 0) {
cmd.find('.iconCmd').empty().append('<i class="icon fa font-awesome-angle-right" style="color:#acacac;font-size:15px;"></i><span style="font-size:11px;color:#acacac;"> #state#<span style="font-size:11px;color:#acacac;">%</span></span>');
}
else if (state <= -10) {
cmd.find('.iconCmd').empty().append('<i class="icon fa font-awesome-angle-double-down" style="color:#da3037;font-size:15px;"></i><span style="font-size:11px;color:#da3037;"> #state#<span style="font-size:11px;color:#da3037;">%</span></span>');
}
else if ((state > -10) && (state < 0)) {
cmd.find('.iconCmd').empty().append('<i class="icon fa fa-chevron-down" style="color:#da3037;font-size:15px;"></i><span style="font-size:11px;color:#da3037;"> #state#<span style="font-size:11px;color:#da3037;">%</span></span>');
}
else if (state >= 10) {
cmd.find('.iconCmd').empty().append('<i class="icon fa font-awesome-angle-double-up" style="color:#30b455;font-size:15px;"></i><span style="font-size:11px;color:#30b455;"> #state#<span style="font-size:11px;color:#30b455;">%</span></span>');
}
else if ((state < 10) && (state > 0)) {
cmd.find('.iconCmd').empty().append('<i class="icon fa fa-chevron-up" style="color:#30b455;font-size:15px;"></i><span style="font-size:11px;color:#30b455;"> #state#<span style="font-size:11px;color:#30b455;">%</span></span>');
}
}
//cmd.find('.state').empty().append(' '+state);
//cmd.find('.unite').empty().append(' #unite#');
if(_options.alertLevel){
$('.cmd[data-cmd_id=#id#]').removeClass('label label-warning label-danger')
if(_options.alertLevel == 'warning'){
$('.cmd[data-cmd_id=#id#]').addClass('label label-warning');
}else if(_options.alertLevel == 'danger'){
$('.cmd[data-cmd_id=#id#]').addClass('label label-danger');
}
}
}
jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'});
</script>
</div>
Pour l’UV, je récupère la valeur par Darksky ou autre et même principe que plus haut : icone + valeur.
L’affichage des températures en fonction du mode chaud/froid/rien.
Soit on regarde à < -1/-2.5(chaud) ; >1/2.5 (froid); ±1/-+2.5 (rien).
Idem, je passe par les options. Je regarde par rapport à la consigne de la pièce pour être fiable car on se fiche d’avoir 16 dans une pièce où je suis en éco. La photo n’est pas top car il a fait super chaud ici et donc toutes mes températures sont au dessus des consignes !
<div class="cmd cmd-widget #history#" data-type="info" data-subtype="numeric" data-template="line" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
<div class="content-xs">
<span class="cmdNameColor#id# cmdName #hide_name#">#name_display# </span><span class="valueColor#id# value">#state#</span><span class="uniteColor#id# unite"> #unite#</span>
</div>
<style>
.cmdNameColor#id# {
font-size: 12px;
}
.valueColor#id# {
font-size: 12px;
}
.uniteColor#id# {
font-size: 12px;
}
</style>
<script>
jeedom.cmd.update['#id#'] = function(_options) {
var cmd = $('.cmd[data-cmd_id=#id#]')
//Définition des paramètres et couleurs par défaut et définition des limites par défaut
//Sinon à passer en paramètres !
var saison = is_numeric('#saison#') ? parseFloat('#saison#'):0;
var color1 = ('#color1#' != '#' + 'color1#') ? "#color1#" : "#5078aa";
var color2 = ('#color1#' != '#' + 'color1#') ? "#color2#" : "#acacac";
var color3 = ('#color1#' != '#' + 'color1#') ? "#color3#" : "#ff8c00";
var AppliedColor = ('#AppliedColor#' != '#' + 'AppliedColor#') ? "#AppliedColor#" : "#FFFFFF";
var limit = is_numeric('#limit#') ? parseFloat('#limit#'):15;
var range1 = is_numeric('#range1#') ? parseFloat('#range1#'):1;
var range2 = is_numeric('#range2#') ? parseFloat('#range2#'):2;
var valeur = Math.round(parseFloat(_options.display_value));
//Fonctionne sur un range +/-1 ; +/-2 ; à défaut hors range
//Chauffage = 0 on regarde si inférieur uniquement
if (saison == 0) {
var limit1 = limit-range1;
var limit2 = limit-range2;
if (valeur >= limit1) {
AppliedColor = color1;
}
else if ((valeur >= limit2) && (valeur < limit1)) {
AppliedColor = color2;
}
else {
AppliedColor = color3;
}
}
//Arrêt = 1 on regarde si inférieur et supérieur
else if (saison == 1) {
var limit1i = limit-range1;
var limit2i = limit-range2;
var limit1s = limit+range1;
var limit2s = limit+range2;
if ((limit1i <= valeur) && (valeur <= limit1s)) {
AppliedColor = color1;
} else if ((limit2i <= valeur) && (valeur <= limit2s)) {
AppliedColor = color2;
} else {
AppliedColor = color3;
}
}
//Clim = 2 on regarde si supérieur uniquement
else if (saison == 2) {
var limit1 = limit+range1;
var limit2 = limit+range2;
if (valeur <= limit1) {
AppliedColor = color1;
}
else if ((valeur > limit1) && (valeur <= limit2)) {
AppliedColor = color2;
}
else {
AppliedColor = color3;
}
}
//Debug au cas où on fixe une couleur bien lisible !
else {
AppliedColor = "#2B140E";
}
cmd.find('.cmdNameColor#id#').attr('style', 'color: ' + AppliedColor + ';');
cmd.find('.valueColor#id#').attr('style', 'color: ' + AppliedColor + ';');
cmd.find('.uniteColor#id#').attr('style', 'color: ' + AppliedColor + ';');
cmd.attr('title','Date de valeur : '+_options.valueDate+'<br/>Date de collecte : '+_options.collectDate)
//cmd.find('.state').empty().append(_options.display_value);
cmd.find('.value').empty().append(valeur);
if(_options.alertLevel){
if(_options.alertLevel == 'warning'){
cmd.find('.content-xs').addClass('label label-warning')
cmd.attr('data-alertlevel','warning');
}else if(_options.alertLevel == 'danger'){
cmd.find('.content-xs').addClass('label label-danger')
cmd.attr('data-alertlevel','danger');
}else{
cmd.find('.content-xs').removeClass('label label-warning label-danger')
cmd.attr('data-alertlevel','none');
}
}
}
jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'})
</script>
</div>
Oui, celui-ci.
Je me garde la possibilité d’avoir un méga design plus grand ou le changement de design à la volée.
Après, je n’ai pas une PI, donc à voir…
(un core i5 10e génération / 32 Go en global) avec une VM dédiée.
Quelques ajustements pour l’eau chaude car au final il est plus lisible de savoir si l’eau chauffe, la consigne du jour et la température actuelle du ballon. Merci à @mika-nt28 pour ce plugin.
EDIT : Tu l’as peut-être écrit dans le post, mais est-ce que pour ce design tu as refait des virtuels dédiés au design et donc en double potentiellement de ceux du dashboard ?
Ce n’est pas possible… ce genre de choses.
Sauf erreur. Et sincèrement, c’est tout est relié à des virtuels ou des variables (le comptage d’eau, la consigne d’eau chaude, l’état d’un split de climatisation etc).
Oui, ça va je dors ! La vie appartient à ceux qui se lèvent tôt ;).
Un peu de course à pied ce matin, petit déjeuner famille et au boulot.
Pour répondre à ta question, j’ai nettoyé et je continue à nettoyer au fur et à mesure les virtuels créés pour l’ancien jeedom3 et les designs associés et j’intègre tout dans une catégorie objet « panel » qui me permet une gestion plus efficace.
Par ailleurs, cela m’oblige à modifier les ID de domowidget sur les téléphones familiaux.