[Présentation] Benj29 et blog Jeedom-Facile

Je vois qu il y a beaucoup d infos sur une seul page de l ecran de la tablette.
Quel résolution utilises tu pour quelle taille d écran ?
Beau travail.

1024x600 de mémoire.
Après c’est lisible sans lunette face à la tablette.
Je l’explique sur le blog. Je passe par le site screenresolution.

Merci !

Merci, j’ai utilisé ce site pour établir la résolution de ma tablette.
Ce que je ne comprend pas c’est que ce site m’indique une résolution de 1280 x 800 alors que sur la fiche technique c’est une 2560 x 1600 (Samsung Galaxy tab S).

C’est la résolution max de la tablette.
Tu peux jouer des dpi et de la résolution au besoin

android - how to use adb to change resolution of device - Stack Overflow

Salut Benj, Merci pour l’article sur l’alarme,
Je le trouve très instructif et très bien construit,
Je vois que tu as mis en place le widget digicode pour ton ancienne version v3,
Aurais-tu le code et fichiers à mettre à disposition pour la V4 depuis ton article ?
Encore merci pour ton partage et à très bientôt dans un nouvel article :slightly_smiling_face:

1 « J'aime »

Bonjour,

Je suis en train de finaliser l’article pour la piscine, sa gestion et l’iopool. Il est clair qu’il n’intéressera pas tout le monde, mais il y a quand même quelques idées à prendre pour l’automatisation notamment avec Android.

Merci en tout cas pour tes commentaires. Oui, pour le digicode, j’avoue avoir galéré, je m’étais même rabattu sur celui développé par @tomitomas ; mais bien trop complet et lourd pour un « pauvre » digicode comme je l’utilise le matin au réveil.

Attention à bien positionner les fichiers dans un répertoire non-core car en cas d’update, vous les perdez !

Le widget est à créer en mode code.

<div class="cmd cmd-widget reportModeHidden" data-type="action" data-subtype="message" data-template="default" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
  <script>
    $.include([ '/data/fonts/Digicode/digicode.css',
                '/data/fonts/Digicode/digicode.js' ],
      function() {
        $('div.cmd[data-cmd_id="#id#"]').digicode(function(fct, code) {
          jeedom.cmd.execute({
            id: '#id#',
            value: { title : fct, message: code }
          });
        }, 4);
      }
    );
  </script>
</div>

Et le code js et le code css , personnellement j’ai mis ici :

Attention, j’ai modifié les codes pour mon installation : polices, couleurs, tailles.

digicode_css.txt (1,4 Ko) digicode_js.txt (2,4 Ko)

Attention, supprimer l’extension .txt et le _extension à passer en .extension.

J’ai prévu de faire une grosse mise à jour du blog en V4 mais après la publication de l’article des designs en V4 et celui de la piscine.

Il faut créer un virtuel :

value_digicode en information est utilisé par un scénario de désactivation sans aucun déclencheur :

digicode est une info qui lance LE scénario :


1 « J'aime »

Merci pour ta réponse et ton partage,

Bonne journée,

J’ai édité mon message :wink:

C’est parfait, merci, bonne journée,

DigiCODE

1 « J'aime »

Et voilà, nouvel article sur la gestion de la piscine, la filtration, l’iopool Eco etc

https://www.jeedom-facile.fr/index.php/2021/06/03/une-gestion-de-piscine-simple-et-efficace/

Quelques principes avec le Sonoff, le parfait Jeedouino de @revlys et la pierre angulaire JPI de @dJuL.
Je m’appuie sur Macrodroid et Automate, tellement pratique.

Bonne lecture !


Eléments de réflexion pour une installation domotique :

Catégorie sécurité :

Catégorie interactions :

Catégorie automatisation :

Catégorie autres :


Le matériel et sa configuration nécessaire pour une installation domotique :

L’installation et la configuration d’un hyperviseur permettant la virtualisation :

Les machines virtuelles :

Je n’avance pas comme je le souhaite mais peu à peu le blog se remplit…

7 « J'aime »

Bonjour,

J’ai utilisé le code des chevrons de @benj29 (ci-dessous) et avec des valeurs comme par exemple -80% ou 11,3% les chevrons ne s’affichent pas, une idée de ce qui est faux ?

<link href='https://fonts.googleapis.com/css?family=Montserrat' rel='stylesheet' type='text/css'>
<div style="min-width:120px;min-height:40px;margin-right: 3px;margin-left: 3px;padding:1px !important;font-family:Montserrat, Arial; font-weight:normal;color:rgba(0,0,0,1);" class="cmd #history# container-fluid tooltips cmd cmd-widget" 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 style="font-weight: bold;font-size: 10px;#hideCmdName#" class="cmdName">#name_display#</span>
      <span style="font-weight: bold;line-height: 1.5" class="pull-right"></span>
		<span style="font-size: 1.7em;font-weight: bold;line-height: 1.5" class="center-block state"></span>    
      <span style="font-size: 1px;line-height: 1.5"class="iconCmd"></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:14px;"></i><span style="font-size:14px;color:#acacac;"> #state#<span style="font-size:14px;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:14px;"></i><span style="font-size:14px;color:#30b455;"> #state#<span style="font-size:14px;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:14px;"></i><span style="font-size:14px;color:#30b455;"> #state#<span style="font-size:14px;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:14px;"></i><span style="font-size:14px;color:#da3037;"> #state#<span style="font-size:14px;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:14px;"></i><span style="font-size:14px;color:#da3037;"> #state#<span style="font-size:14px;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:14px;"></i><span style="font-size:14px;color:#acacac;"> #state#<span style="font-size:14px;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:14px;"></i><span style="font-size:14px;color:#da3037;"> #state#<span style="font-size:14px;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:14px;"></i><span style="font-size:14px;color:#da3037;"> #state#<span style="font-size:14px;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:14px;"></i><span style="font-size:14px;color:#30b455;"> #state#<span style="font-size:14px;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:14px;"></i><span style="font-size:14px;color:#30b455;"> #state#<span style="font-size:14px;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>

Capture d’écran 2021-07-10 à 10.03.19

Merci, Joël

Bonjour,

Je te remets mon code ici :

<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>

Il fonctionne (j’ai pris soin de revérifier) :

De quel type est ton champ ?

Mon widget utilise un « sens » pour si sur-consommation ou sous-consommation pour la production ou la consommation (notamment pour le PV).

A défaut, le paramètre est à 0 (consommation). 1 c’est pour la production (gain en >).

1 « J'aime »

Bonjour @benj29,

Est-ce que tu aurais l’amabilité de placer le code du widget de lever/coucher du soleil ?

image

Ce serait sympa.

Merci, Joël

Le lever :

<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#]');
          
          cmd.attr('title','Valeur du '+_options.valueDate+', collectée le '+_options.collectDate);
          
          cmd.find('.iconCmd').empty().append('<i class="icon Mdi mdi-weather-sunset-up" style="color:#ff8c00;font-size:15px;"></i><span style="font-size:15px;color:#acacac;">#state#</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>

Le coucher :

<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#]');
          
          cmd.attr('title','Valeur du '+_options.valueDate+', collectée le '+_options.collectDate);
          
          cmd.find('.iconCmd').empty().append('<i class="icon Mdi mdi-weather-sunset-down" style="color:#da3037;font-size:15px;"></i><span style="font-size:15px;color:#acacac;">#state#</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>

Avec les dizaines de code donnés sur le forum sur ce modèle (icone + texte) et que j’ai aussi donnée dans ces pages, c’est un peu le fainéantise des vacances non :smiley: !

2 « J'aime »

Hello,

Mise à jour de plusieurs articles :

  • gestion de la présence : ajout des dernières nouveautés de Macrodroid sur les déclencheurs de zones (antennes relais), protection sur position inconnue pour les faux positifs.

  • gestion de la piscine : simple mémo sur le fait qu’IOpool va mettre en place dans les mois à venir une API. A suivre !

  • gestion du confort, thermostat : optimisation scénario de pilotage des thermostats, passage en mode temporel, contournement de la protection sur température estivale du mode climatisation (quand la température extérieure est inférieure à la pièce, la clim ne démarre pas).

  • gestion de l’humidité : j’ai remis à jour lors de la V4 en m’appuyant sur les modes, entrées/sorties, scénario et petit virtuel de gestion.

Prochaine mise à jour la partie JPI et gestion des affichages des tablettes et de la présence par zone.

J’espère pouvoir ensuite attaquer un article sur mes designs en V4.

4 « J'aime »

Petit délire de la soirée :

  • ajout de 2 nuts pour les vélos de la famille,
  • ajout de l’automatisation du garage (sur alarme, vérification de présence récente) comme expliqué dans l’article de la présence/alarme.

Mode fainéant, quand j’arrive ou que madame arrive avec le petit loup derrière, le garage s’ouvrira pour ranger les vélos. Elle n’est pas belle la vie avec la domotique !

  • gestion des automatisations :

  • gestion des nuts :

  • état des personnes :

Le scénario est celui dans l’article de la présence et des automatisations :

Forcément maintenant le contre la montre va rentrer plus vite :smiley:

4 « J'aime »

Bonsoir @benj29

J’ai lu ton article Notifications par email sous Proxmox lien je me suis cassé les dents malgré avoir suivis scrupuleusement ton article,
Je te mets dans le contexte quand même: Proxmox VE 7.0-11 à jour sur un Hystou i7 8ème génération,
après quelques recherches et conseils (@nebz pour ne pas le citer ^^) j’ai appliqué et déroulé l’article suivant Obtenir postfix pour envoyer des mails en externe,
J’ai lu les commentaires des différents lecteurs qui se sont heurtés aux mêmes soucis que moi,
Si ma trouvaille peut servir au plus grand nombre :slight_smile:

Au plaisir, bonne soirée,

4 « J'aime »

Hello, je vois c’est proxmox 7, suis encore sous 6.
Le debian est peut être la raison ?
Faut que j’installe un serveur pour un ami bientôt, ce sera l’occasion de voir cela, merci.

Bonjour Benj,

J’avais le même problème avec la version 6 de proxmox,

Au plaisir, bon week-end,

1 « J'aime »

Bonjour Benjamin,
Je te remercie encore pour tes articles !
Celui de JPI n’est plus accessible. Est-ce normal ou c’est parce que tu es en train de le mettre à jour ?
Pourrais-tu le remettre stp ? :blush: