Initial commit
This commit is contained in:
@@ -0,0 +1,179 @@
|
||||
---
|
||||
date: "2023-09-03"
|
||||
title: Nouveau site en ligne
|
||||
---
|
||||
|
||||
Me voilà enfin débarrassé de deux outils sur lesquels je (et d’autres) râle depuis quelques temps : Hugo, et Tailwind.
|
||||
|
||||
<details class="read-more"><summary>Voir aussi</summary>
|
||||
|
||||
- [/interets/liens-interessants/2023/08/11/3ebdad4c/](/interets/liens-interessants/2023/08/11/3ebdad4c/)
|
||||
- [/interets/informatique/2023/04/06/rant-mon-site-c-est-de-la-merde/](/interets/informatique/2023/04/06/rant-mon-site-c-est-de-la-merde/)
|
||||
- [/interets/informatique/2022/02/12/rant-hugo-et-tailwind/](/interets/informatique/2022/02/12/rant-hugo-et-tailwind/)
|
||||
|
||||
</details>
|
||||
|
||||
Maintenant, on va pouvoir s’amuser.
|
||||
Maintenant, je vais avoir un blog véritablement à mon image, épuré de technologies qui ne me conviennent pas, auxquelles je n’adhère pas, utilisées juste sous prétexte que c’est _hype_.
|
||||
Ce nouveau site, c’est 100% Richard Dern (ou presque).
|
||||
|
||||
Il va donc falloir vous habituer à ces inclusions d’articles dans l’article parce que j’en suis assez fan personnellement.
|
||||
Je ne m’en servirai **jamais** pour introduire un contenu qui n’a rien à faire là : ces inclusions seront toujours pertinentes, mais c’est là l’occasion pour moi d’en abuser à titre démonstratif.
|
||||
J’ai juste à faire :
|
||||
|
||||
```blade@verbatim
|
||||
<x-read-more :urls="/interets/informatique/2023/04/18/refonte-du-site/" />@endverbatim
|
||||
```
|
||||
|
||||
Ou :
|
||||
|
||||
```blade@verbatim
|
||||
<details class="read-more"><summary>Voir aussi</summary>
|
||||
|
||||
- [/interets/liens-interessants/2023/08/11/3ebdad4c/](/interets/liens-interessants/2023/08/11/3ebdad4c/)
|
||||
- [/interets/informatique/2023/04/06/rant-mon-site-c-est-de-la-merde/](/interets/informatique/2023/04/06/rant-mon-site-c-est-de-la-merde/)
|
||||
- [/interets/informatique/2022/02/12/rant-hugo-et-tailwind/](/interets/informatique/2022/02/12/rant-hugo-et-tailwind/)
|
||||
|
||||
</details>@endverbatim
|
||||
```
|
||||
|
||||
Comme au début de cet article, pour que mes inclusions se fassent.
|
||||
De façon plus générale, je peux travailler avec [Blade](https://laravel.com/docs/blade) dans les articles, et donc en PHP.
|
||||
Évidemment, pour un développeur PHP, c’est beaucoup plus agréable…
|
||||
|
||||
J’ai développé mon propre générateur de site statique.
|
||||
Il n’est pas fait pour être redistribué : n’espérez pas télécharger les sources et lancer votre propre blog.
|
||||
Déjà parce que les sources de mes propre articles sont incluses[^sources_incluses], et puis parce que je l’ai développé pour répondre à mes besoins et envies spécifiques.
|
||||
Par contre, j’encourage la lecture du code : vous y trouverez peut-être une bonne idée ou deux.
|
||||
|
||||
[^sources_incluses]: Ce n’est plus le cas depuis le 6 septembre : [sources des articles](https://git.dern.ovh/Blog/contenu)
|
||||
|
||||
Le moteur repose sur [Laravel](https://laravel.com/) dans sa dernière version.
|
||||
La partie UI/UX, c’est moi, vraiment à 100%.
|
||||
Non pas qu’il y ait de quoi se vanter, je ne cherche pas à faire du beau, je cherche à faire du “moi” : c’est pas très beau parce que je n’ai aucun goût (pas pour rien que je suis développeur back-end), mais je suis content du résultat.
|
||||
|
||||
Pas de framework pour le CSS, j’ai tout fait à la main, et ça correspond enfin à une esthétique de laquelle je me sens proche.
|
||||
Les sources du CSS sont moches et pas franchement optimisées, j’ai du refactoring à faire, mais c’est ce qui arrive quand on ne sait pas trop où l’on va.
|
||||
Mais au final, je suis assez satisfait de **mes** choix esthétiques.
|
||||
Encore une fois, je sais que ça ne plaira pas à tout le monde, mais pour mon blog, c’est terminé : je n’utiliserai plus rien de prémâché.
|
||||
Je me considère comme un artisan, je fais de l’artisanat, et puis zut.
|
||||
|
||||
> Promis, je ne ferai pas trop d’inclusions sauvages dans les futurs articles, mais j’aime bien mon nouveau super-pouvoir…
|
||||
|
||||
En ce qui concerne les fonctionnalités, on va dire que je considère disposer d’un _Minimum Viable Product_ : dans mon cas, cela signifie que je dispose à peu près des mêmes fonctionnalités que celles que j’utilisais avec Hugo.
|
||||
En fait, mes sources markdown sont récupérées pratiquement telles quelles, seuls les _shortcodes_ ont été un peu chiants à réécrire parce que cela impliquait changer tous les appels bizarres à `@{{\< shortcode [...] />}}`, là où maintenant j’ai des **balises**, beaucoup mieux question interopérabilité.
|
||||
|
||||
Puisque j’ai là un _MVP_, et qu’en plus de dégager Hugo et Tailwind je poursuivais d’autres objectifs, je vais désormais pouvoir faire des choses vraiment intéressantes que je veux faire depuis longtemps sans savoir comment m’y prendre avec Hugo.
|
||||
|
||||
J’ai déjà un système partiellement fonctionnel pour les liens externes et internes mais je veux aller plus loin.
|
||||
À titre informatif, voilà ce que je dois faire sous Hugo :
|
||||
|
||||
```go@verbatim
|
||||
{{- /*
|
||||
Putain mais que c'est dégueulasse...
|
||||
Les séquences d'échappement sont pour éviter les espaces indésirables dans les
|
||||
liens.
|
||||
Le but ici est de changer l'aspect des liens s'ils pointent vers une page
|
||||
externe ou interne, et dans ce dernier cas, en fonction de la section concernée.
|
||||
*/ -}}{{ $ext := strings.HasPrefix .Destination "http" }}{{- /* Check si l'URL est absolue ou relative
|
||||
*/ -}}{{ $url := .Destination | safeURL }}{{- /* Hugo déconne plus loin sans ça...
|
||||
*/ -}}{{ $content := .Text | safeHTML }}{{- /*
|
||||
*/ -}}{{ if $ext }}{{- /* Lien externe
|
||||
*/ -}}<a rel="noopener noreferrer" class="link external inline-flex items-center space-x-1"
|
||||
title="Lien externe : {{ $url }}" href="{{ $url }}">{{- /*
|
||||
*/ -}}<span>{{ $content }}</span>{{- /*
|
||||
*/ -}}<span class="icon-[ri--external-link-line] h-4 w-4 text-slate-400 ml-1"></span>{{- /*
|
||||
*/ -}}</a>{{- /*
|
||||
*/ -}}{{ else }}{{- /* Lien interne
|
||||
🤮 */ -}}{{ with (index (where .Page.Site.AllPages "RelPermalink" .Destination) 0) }}{{- /* Référence à la page liée
|
||||
🤮 */ -}}{{ $date := .PublishDate | time.Format ":date_long" }}{{- /*
|
||||
🤮 */ -}}{{ $section := .Parent }}{{- /* .Section ne fonctionne pas...
|
||||
🤮 */ -}}{{ $title := "" }}{{- /* Le titre du lien est la concaténation de plusieurs éléments ci-dessous...
|
||||
🤮 */ -}}{{ $parentTitle := delimit (slice "[" .Parent.Title "] ") "" }}{{- /*
|
||||
🤮 */ -}}{{ if eq .Section "tags" }}{{- /* On ne met pas de date de publication si c'est un lien vers un mot-clé
|
||||
🤮 */ -}}{{ $title = delimit (slice $parentTitle .Title) "" }}{{- /*
|
||||
🤮 */ -}}{{ else }}{{- /*
|
||||
🤮 */ -}}{{ $formatedDate := delimit (slice ", publié le" $date) " " }}{{- /*
|
||||
🤮 */ -}}{{ $title = delimit (slice $parentTitle .Title $formatedDate) "" }}{{- /*
|
||||
🤮 */ -}}{{ end }}{{- /*
|
||||
*/ -}}<a rel="noopener noreferrer" class="link internal inline-flex items-center space-x-1" title="{{ $title }}"
|
||||
href="{{ $url }}">{{- /*
|
||||
*/ -}}{{ if eq .Section "tags" }}{{- /*
|
||||
*/ -}}<span class="icon-[bi--tags-fill] text-emerald-600 h-4 w-4"></span>{{- /*
|
||||
*/ -}}{{ else }}{{- /*
|
||||
*/ -}}<span class="{{ $section.Params.icon }} {{ $section.Params.color }} h-4 w-4"></span>{{- /*
|
||||
*/ -}}{{ end }}{{- /*
|
||||
*/ -}}<span>{{ $content }}</span>{{- /*
|
||||
*/ -}}</a>{{- /*
|
||||
*/ -}}{{ end }}{{- /*
|
||||
*/ -}}{{ end }}{{- /*
|
||||
*/ -}}@endverbatim
|
||||
```
|
||||
|
||||
C’est juste a-bo-mi-na-ble.
|
||||
À gerber.
|
||||
Avec PHP/Laravel/mon moteur, toute la logique se fait là où elle doit être faite : dans un fichier **PHP**, et l’affichage du résultat se fait là où il doit être fait : dans un fichier **HTML**.
|
||||
Plus exactement, c’est le parseur [CommonMark de PHPLeague](https://commonmark.thephpleague.com/2.4/) qui m’offre la possibilité de [détecter un lien et le modifier](https://commonmark.thephpleague.com/2.4/extensions/external-links/) pour affichage.
|
||||
C’est propre, lisible, maintenable.
|
||||
On pourra toujours m’objecter que c’est parce que je ne maîtrise pas Go.
|
||||
|
||||
<details class="spoiler"><summary>Spoiler</summary>
|
||||
|
||||
Non, c'est juste que Go c'est de la merde.
|
||||
En particulier son templating mais je ne vais pas radoter.
|
||||
|
||||
</details>
|
||||
|
||||
En fait, le développement de mon moteur s’est fait en plusieurs phases.
|
||||
La première phase, j’ai tenté de mimer le fonctionnement d’Hugo.
|
||||
Les performances étaient excellentes, parfois meilleures (alors qu’Hugo se prend pour le plus rapide du monde).
|
||||
Mais très vite je suis arrivé aux mêmes limitations : toute modification dans ce que je veux faire prend des proportions dantesques et rend très vite le code dégueulasse.
|
||||
Si Go, c’est de la merde, en fait, ça va un peu plus loin que ça (évidemment).
|
||||
|
||||
Je critique donc un paradigme de programmation qui s’est très vite répandu (et qui d’ailleurs, infeste les 3/4 du web), c’est le principe du [_Just-in-Time_](<https://fr.wikipedia.org/wiki/Juste-à-temps_(gestion)>).
|
||||
En gros, on repousse l’exécution d’une instruction jusqu’au tout dernier instant.
|
||||
Au lieu de lancer quelques instructions préliminaires pendant lesquels l’utilisateur a l’impression que rien ne se passe ou que sa machine rame, toute instruction est divisée en plein de micro-instructions qui ne seront exécutées que lorsque l’utilisateur veut que quelque chose se passe.
|
||||
|
||||
C’est assez difficile à expliquer concrètement mais ce qui rend Hugo si rapide, c’est qu’il ne génère le rendu d’une page que lorsqu’il n’a plus le choix.
|
||||
Il diffère le plus possible le plus d’instructions possibles, de sorte à économiser les ressources.
|
||||
|
||||
Ma deuxième tentative aurait pu me faire _croire_ que c’était effectivement la meilleure chose à faire.
|
||||
J’ai décidé d’opter pour une approche qui anticipe beaucoup plus les choses, avec une étape de collecte d’informations, une étape de transformation, et une étape d’enregistrement, le tout en utilisant massivement toutes sortes de caches, au risque de dupliquer des caches que Laravel aurait déjà fait pour moi “sans que je sois au courant”.
|
||||
Il en a résulté une application vraiment lente (plus de 10 minutes pour une génération du site à froid).
|
||||
|
||||
Et puis, je me suis dit que ce n’est pas parce que je développe un site statique que mon moteur doit être minimaliste : je veux que mon moteur génère un site statique de la façon la plus personnalisée possible, c’est-à-dire qui respecte **mes** besoins et envies.
|
||||
J’ai ainsi abandonné l’idée de faire une application sans base de données, et je suis reparti d’une feuille blanche pour la dernière fois.
|
||||
|
||||
Il faut environ 1m30 à Hugo pour générer à froid (caches vides) l’ensemble de mon site, dans un container docker avec la surcouche Rosetta d’Apple.
|
||||
Il ne lui faut ensuite plus que 8 secondes pour “rafraîchir” le site après une petite modification.
|
||||
|
||||
Mon générateur est exactement aussi rapide.
|
||||
À la seconde près, en fait.
|
||||
|
||||
Mais la vraie force de mon générateur par rapport à Hugo est sa capacité à identifier et m’aider à corriger les problèmes.
|
||||
Actuellement, il est capable de me dire quels fichiers sources devraient être renommés (par exemple, `/test-du-bidule-machin.md` vers `/test-du-bidule-machin/index.md`), quels attributs front matter sont problématiques (inutilisés, obsolètes, mal-formés, orphelins, etc.), lister les liens morts, etc.
|
||||
Et il peut corriger tout seul certains de ces problèmes.
|
||||
|
||||
Ce qui traduit un deuxième paradigme moderne sur lequel je peste aussi tout le temps : **il faut cacher les problèmes aux utilisateurs**.
|
||||
Ils ne doivent pas savoir qu’il se passe un truc pas normal, on doit poursuivre l’exécution coûte que coûte.
|
||||
Du coup, j’ai des anomalies dans mes articles, et Hugo s’en fout, mon site est généré.
|
||||
|
||||
Mon moteur va me dire (prochainement) s’il existe des mots-clés orphelins, sous-utilisés, ou qui se rapprochent sémantiquement d’autres mots-clés pré-existants, voire corriger automatiquement des erreurs de syntaxe à la con (j’avais un mot-clé appelé “Intelligence Atificielle” : vas demander à Hugo de rajouter le “r” manquant et mettre à jour tout seul les pages qui référencent ce mot-clé erroné).
|
||||
|
||||
Autre fonctionnalité qu’il me tarde de mettre en place : les dossiers.
|
||||
Une façon de regrouper des articles éparpillés dans le temps ou dans les sections du site, d’une façon ordonnée, triée et navigable.
|
||||
Je pense évidemment à mon livre [_L’humain, cette espèce primitive_](/interets/philosophie/2023/05/18/lhumain-cette-espece-primitive-lhumain-cette-espece-primitive/) dont la lecture est actuellement hasardeuse et décousue.
|
||||
Mais ça serait pertinent pour d’autres séries d’articles, telles que :
|
||||
|
||||
<!-- Invalid x-read-more format -->
|
||||
|
||||
Enfin, j’aimerais des liens entre taxonomies.
|
||||
Par exemple, pour les films et séries, j’ai une taxonomie pour les acteurs et une taxonomie pour les personnages fictifs, mais rien pour dire que Bryce Dallas Howard interprète Claire Dearing dans la saga _Jurassic World_.
|
||||
Je veux, dans un avenir proche, que si vous êtes sur la page consacrée à Bryce Dallas Howard, vous voyez le personnage qu’elle a interprété et dans quel(s) film(s) et séries.
|
||||
Auparavant, sous Hugo, je n’avais pas la moindre idée de la faisabilité du truc.
|
||||
Maintenant, j’ai beaucoup plus de flexibilité à disposition.
|
||||
|
||||
J’ai évidemment un peu de polissage à faire, et une tonne de choses dans ma TODO pour ce nouveau moteur, mais en l’état, j’en suis très content.
|
||||
Il y a de la marge pour l’améliorer, comme le veut l’expression consacrée, mais je peux déjà en faire plus qu’après deux ans d’expérience avec Hugo.
|
||||
|
||||
Maintenant, je me sens un peu plus chez moi.
|
||||
@@ -0,0 +1,115 @@
|
||||
---
|
||||
date: "2023-09-04"
|
||||
title: Je me suis acheté un bracelet connecté
|
||||
---
|
||||
|
||||
## Contexte
|
||||
|
||||
En tant que nerd, je veux tout mesurer.
|
||||
C'est d'ailleurs pour ça que j'ai un intérêt particulier pour la météorologie.
|
||||
Ayant déjà fait le tour de la question, je dispose d'une [station météo](/interets/informatique/2022/02/14/la-station-meteo-parfaite/) que j'ai conçu moi-même et j'ai des capteurs [un peu partout](/interets/informatique/2021/03/09/mon-reseau/#serveur-domotique) dans la maison et à l'extérieur.
|
||||
J'aimerais bien mesurer tout ce pour quoi on dispose de capteurs...
|
||||
|
||||
Alors, quand [Olivier](/interets/liens-interessants/2022/03/09/f71dac00/) est venu me faire coucou et qu'il en a profité pour me faire une démonstration de son drone [Dji Mavic Mini](https://www.amazon.fr/dp/B07RGF1VDR), je suppose qu'il pensait m'insuffler l'envie d'en posséder un, sans se douter un instant que mon intérêt allait se porter sur quelque chose de plus petit et de bien moins cher : son traqueur d'activité, qui a réveillé en moi le désir de tout mesurer, y compris moi-même, que j'avais momentanément mis en sourdine.
|
||||
|
||||
Je n'ai porté une montre que brièvement dans ma vie, alors j'ai décidé de commencer par un bracelet connecté, histoire de voir si j'arrivais à me réhabituer à avoir quelque chose au poignet en permanence, avec le but avoué que je finisse par passer sur une [Apple Watch](https://www.apple.com/fr/watch/).
|
||||
|
||||
## Ce que j'en attends et ce que je n'en attends pas
|
||||
|
||||
Spécifiquement pour cet achat, j'attends évidemment de savoir si je vais supporter de porter un bracelet ou une montre.
|
||||
Mais au-delà, en admettant que je le supporte, j'espère disposer d'un maximum d'informations sur "ma santé" (mes caractéristiques physiques).
|
||||
Des données brutes, diverses et variées, utiles ou non mais réelles.
|
||||
|
||||
Le nombre de pas ou les calories dépensées, je suppose que c'est un acquis, et que n'importe quel traqueur d'activité les mesure.
|
||||
J'aimerais bien un suivi de mon rythme cardiaque par exemple.
|
||||
Mais plus généralement, plus il y a de capteurs intégrés, mieux ce sera.
|
||||
|
||||
Je veux des infos, un max d'infos sur ce que fait mon corps.
|
||||
Juste parce que j'aime ça.
|
||||
Par contre, j'aimerais éviter les messages d'encouragement, ou pire, les messages culpabilisants.
|
||||
Je ne cherche pas un bracelet connecté qui me pousse à faire plus de sport : je n'en fait pas, je n'en ferai jamais, ce n'est pas mon but.
|
||||
Mon activité physique principale (m'occuper de 15 enfants 🐕🐈🐓🐐) n'est pas considérée comme du sport, mais j'ai une bonne santé (exception faite d'une hernie discale qui occasionne de temps en temps une invalidité partielle...).
|
||||
|
||||
Je n'ai pas besoin de faire 10 000 "pas" par jour ou 15 minutes d'"exercice".
|
||||
Ce sont des conseils d'ordre général, exprimés avec des unités qui ne correspondent à rien de "physique" (dans le sens, discipline scientifique), et je pense que le sens vulgarisé de ces mots entraîne une phobie ou une obsession.
|
||||
Je brûle autant de calories en m'occupant de mes enfants qu'en marchant 10 000 "pas", et je m'y attelle plus de 15 minutes par jour.
|
||||
|
||||
C'est précisément ce que je cherche dans un capteur d'activité : me donner raison sur ce point, pour qu'on cesse de s'imaginer que je mène une vie de noix de Saint Jacques[^st-jacques], collé devant mon écran 12 heures par jour.
|
||||
|
||||
[^st-jacques]: Expression tirée de l'excellente série française Kaamelott.
|
||||
|
||||
Malheureusement, jouer à la bagarre avec le chien et les chèvres ou au lancer de souris en peluche avec les chats, faire des câlins aux poules et nettoyer leur habitat ne sont pas reconnues comme activités physiques dans les applications de santé.
|
||||
Mais honnêtement, ça devrait !
|
||||
|
||||
## Choix du bracelet
|
||||
|
||||
Mon choix s'est porté sur un [Honor Band 5](https://www.hihonor.com/global/wearables/honorband5/), et ce pour plusieurs raisons.
|
||||
|
||||
Je ne compte pas le porter longtemps : je me laisse un mois pour apprécier (ou pas) sa présence à mon poignet et sa pertinence.
|
||||
Si ça me convient, je passe sur une Apple Watch.
|
||||
Si ça ne me convient pas, je ne porterais rien d'autre, évidemment.
|
||||
|
||||
Par conséquent, inutile d'investir dans un bracelet cher.
|
||||
Le Honor Band 5 se trouve [à moins de 40 euros](https://www.amazon.fr/dp/B07Y614WRS), c'est moitié moins que le budget que je pensais nécessaire, c'est donc parfait.
|
||||
|
||||
Du coup, peu m'importe l'obsolescence (très relative) du bracelet, ou le manque de fonctionnalités, et même l'inexactitude de certaines données : il sera soit oublié, soit remplacé assez rapidement.
|
||||
Dans tous les cas, je peux même lui ouvrir le ventre sans culpabiliser pour voir ce que je peux en faire (il y a peut-être moyen de réutiliser la batterie par exemple).
|
||||
|
||||
## Le positif
|
||||
|
||||
Le point que j'apprécie le plus est qu'il n'a pas besoin d'envoyer des données à Honor.
|
||||
Si un compte Honor/Huawei est bien requis pour procéder à son installation (qui implique de fait l'installation d'une application sur le téléphone), il est possible de totalement désactiver l'envoi des données ultérieurement.
|
||||
Il ne communiquera alors qu'avec mon iPhone, où deux applications vont donc cohabiter : Apple Santé qui va récupérer les donnés de Honor Santé.
|
||||
|
||||
On retrouve les données classiques, telles que le nombre de pas et les calories dépensées, et des données peut-être un peu moins classiques dans cette gamme de prix comme le rythme cardiaque et la saturation en oxygène.
|
||||
Et puis il y a le suivi du sommeil qui est fait en collaboration avec l'iPhone : le bracelet détecte les différentes phases du sommeil et l'iPhone surveille sa qualité, incluant des enregistrements audio des ronflements et le niveau de bruit ambiant.
|
||||
C'est vexant (s'entendre ronfler à faire craquer les joints des murs[^ronfler] est traumatisant...) mais ce sont des informations intéressantes auxquelles je n'avais pas pensé : c'est exactement ce que je voulais.
|
||||
|
||||
[^ronfler]: Autre expression tirée de Kaamelott. Je n'ai aucune personnalité...
|
||||
|
||||
D'ailleurs, on peut faire autant de reproches que l'on veut à l'application d'Honor, mais je trouve que la quantité d'informations qui s'y trouvent est très satisfaisante.
|
||||
J'étais très content de savoir que le bracelet disposait d'un capteur supplémentaire par rapport aux autres bracelets de sa catégorie (la saturation en oxygène), mais j'ignorais que je n'en n'avais pas vraiment l'utilité !
|
||||
Ce sont les encarts d'informations qui m'ont appris qu'il était surtout utile aux sports d'altitude (alors que le Honor Band 5 n'intègre malheureusement pas de capteur de pression atmosphérique, ce qui lui aurait permis de détecter les 25 ascensions et descentes quotidiennes de mes escaliers...).
|
||||
|
||||
Autre point - très - positif : l'autonomie du bracelet.
|
||||
Je sais que je ne peux pas en attendre autant de l'Apple Watch (que je devrai recharger toutes les 18 heures d'après les données officielles), mais si je finis par l'acheter, ce point ne sera pas rédhibitoire.
|
||||
Bref, le Honor Band 5 s'en sort très bien : je l'ai poussé à dix jours sans recharge, avec le suivi du rythme cardiaque activé en permanence.
|
||||
De plus, j'aime bien le petit clip qui s'y attache.
|
||||
J'y ai glissé un embout de [câble USB magnétique](https://www.amazon.fr/dp/B08LVKBF9G) : c'est très pratique, je recommande.
|
||||
|
||||
## Le négatif
|
||||
|
||||
Bien que je me sois fait au bracelet, le plastique est un truc d'imberbe.
|
||||
Je suis poilu et fier de l'être, mais c'est plus ou moins incompatible avec le plastique employé par Honor, alors qu'il n'est pas forcément de mauvaise qualité.
|
||||
Le problème, c'est qu'une fois mouillé, ce qui arrive très souvent dans la journée étant donné le rythme auquel je me lave les mains, il devient assez collant, et mes poils s'emmêlent dessus et c'est assez désagréable.
|
||||
Ce problème n'existera plus avec l'Apple Watch, considérant les différents types de bracelets disponibles.
|
||||
|
||||
À vrai dire, c'est bien le seul reproche que j'ai à faire, le seul point qui, au quotidien, s'avère un peu gênant.
|
||||
Il y aurait d'autres choses à en dire pour quelqu'un qui l'utiliserait vraiment comme un bracelet de sport, comme l'absence de GPS, l'écran tactile qui manque un peu de répondant, voire la faiblesse de la compatibilité avec les téléphones portables (chez Apple, je dois faire l'impasse sur les options de personnalisation, des possibilités de notifications limitées, etc.).
|
||||
|
||||
Je pourrais aussi lui reprocher son manque d'ouverture : j'espérais pouvoir stocker les données qu'il collecte sur mon serveur de façon plus ou moins native ou en tout cas facile, ou pouvoir lui envoyer des notifications personnalisées, ce genre de choses.
|
||||
|
||||
Autant de "défauts" qui n'ont aucune importance à mes yeux puisqu'ils seront rendus complètement obsolètes par le passage à l'Apple Watch.
|
||||
|
||||
## Les leçons
|
||||
|
||||
J'en suis à la moitié de ma "période d'essai", mais je sais déjà quelle sera l'issue.
|
||||
Je tolère bien le bracelet à mon poignet, et même si l'Apple Watch est moins discrète, son revêtement sera plus agréable.
|
||||
La quantité de données que l'Apple Watch peut capter et me restituer dans une unique application constituent deux excellents points supplémentaires.
|
||||
Si je suis très content des données remontées par un "simple" bracelet, l'Apple Watch me comblera.
|
||||
|
||||
En prime, j'ai eu confirmation de mes supputations : je me connais, je connais mon corps, je l'écoute, je sais comment il fonctionne, et le traqueur d'activité me le confirme.
|
||||
Il ignore que mon activité physique ne consiste pas en la course ou le vélo, mais il n'ignore pas que j'en ai une, et c'est tout ce qui compte.
|
||||
Enfin, étant sujet aux insomnies chroniques, le suivi du sommeil est une catégorie de données qui m'est particulièrement utile et intéressante (et vexante...).
|
||||
|
||||
## Conclusion
|
||||
|
||||
Du coup, en attendant l'arrivée de l'Apple Watch dans les mois à venir, je suis en confiance.
|
||||
Je vais passer d'un bracelet à 40 euros à une montre Apple à 500 euros.
|
||||
Nul doute que le changement de gamme s'accompagnera d'une accumulation de données que je pourrais analyser et confronter à ma propre perception de mon corps.
|
||||
|
||||
Et en plus, c'est un gadget technologique parmi les plus avancés et les plus luxueux, tout en étant assez _main stream_ pour ne pas être ostentatoire.
|
||||
Je risque même d'en faire un accessoire "de mode", moi qui ne suis pourtant pas de cette veine-là...
|
||||
|
||||
Ce qui me surprend le plus dans toute cette histoire en fait, c'est qu'il y a quelques mois à peine, je disais à mon ami Christopher (qui m'a introduit dans l'univers merveilleux d'Apple) qu'il était peu probable que je m'intéresse un jour à l'Apple Watch.
|
||||
Et c'est "à cause" de mon ami Olivier que je vais finir par en avoir une !
|
||||
@@ -0,0 +1 @@
|
||||
file: images/5vZqmW.jpg
|
||||
@@ -0,0 +1 @@
|
||||
file: images/AxFjDL.jpg
|
||||
@@ -0,0 +1 @@
|
||||
file: images/BgpIyG.jpg
|
||||
@@ -0,0 +1,3 @@
|
||||
file: images/GvhyaB.jpeg
|
||||
title: Désolé d'avoir zoomé comme un porc mais je ne voulais pas attirer les poules
|
||||
et les chèvres...
|
||||
@@ -0,0 +1 @@
|
||||
file: images/s8QpNt.jpg
|
||||
@@ -0,0 +1 @@
|
||||
file: images/zUwrM0.jpg
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 141 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 403 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 311 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.8 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.6 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 401 KiB |
@@ -0,0 +1,166 @@
|
||||
---
|
||||
date: '2023-09-15'
|
||||
title: Mise à jour de ma station météo
|
||||
---
|
||||
|
||||
Autant vous le dire tout de suite : j'ai choisi un modèle pré-fabriqué.
|
||||
Désolé si vous espériez lire la suite de mes pérégrinations, mais peut-être que mon cheminement vous intéressera malgré tout.
|
||||
|
||||
## Contexte
|
||||
|
||||
Cela fait depuis [février 2022](/interets/informatique/2022/02/14/la-station-meteo-parfaite/) que je planche sur le remplacement de ma station actuelle.
|
||||
Pour rappel, celle-ci est constituée de deux boîtiers : le premier contient le micro-contrôleur (un ESP8266), une alimentation, un capteur de température et d'humidité relative (SHT31) qui pilote la résistance PTC de 80℃ et les deux ventilateurs Noctua de 8 et 12cm destinés à réguler la température du boîtier, aussi bien en conditions froides que chaudes, et enfin un capteur de luminance (TSL2561).
|
||||
Ce boîtier "principal" se trouve sous le toit de ma véranda, et prend les coups de chaleur en pleine tronche.
|
||||
Il n'est pas rare qu'alors que les ventilateurs tournent à fond, le SHT mesure 60℃ dans le boîtier, ce qui me fait craindre pour l'alimentation.
|
||||
Et la petite PTC n'arrive pas maintenir une température supérieure à 0℃ par grand froid.
|
||||
|
||||
Le second boîtier ne contient que le capteur de température, humidité relative et pression atmosphérique BME280.
|
||||
Les deux boîtiers sont reliés par un câble RJ45 blindé de moins de deux mètres.
|
||||
|
||||
J'ai construis moi-même tous les PCB utilisés dans ce montage, de leur dessin jusqu'à leur nettoyage post-bain d'acide.
|
||||
J'ai oublié une étape absolument capitale pour des composants exposés à l'air libre : le vernissage.
|
||||
Résultat : les pistes en cuivre se sont oxydées au fil du temps, et la station déconne de plus en plus fréquemment, même si ça se limite à la perte de communication I2C occasionnelle avec l'un ou l'autre des capteurs.
|
||||
|
||||
Du coup, [j'ai travaillé sur une nouvelle station météo](/interets/informatique/2023/01/07/la-station-meteo-parfaite/), avec pas mal de mises à jour.
|
||||
Je passerai de l'ESP8266 à l'ESP32, du BME280 au BME681, du TSL2561 au TSL2591.
|
||||
Mais il me manquerait toujours les trois composants qui m'ont toujours fait défaut : anémomètre, girouette et pluviomètre.
|
||||
Mais s'il n'y avait eu que ça...
|
||||
|
||||
[Le gros du problème](/interets/informatique/2023/01/20/la-station-meteo-parfaite/) consistait à trouver ou fabriquer un ou deux boîtiers, et trouver comment les alimenter.
|
||||
J'ai fait quelques essais avec une batterie au plomb de 5Ah sur un panneau solaire de 25W : la station s'est éteinte avant que le soleil ne reparaisse.
|
||||
Je devais donc abandonner l'idée d'une station énergétiquement autonome, à moins de changer de panneau, de batterie et de chargeur.
|
||||
|
||||
Outre l'alimentation, l'autre défit consistait à trouver un protocole de communication entre la station et le reste de mon réseau : avec mes murs en béton armé, pas de wifi possible.
|
||||
|
||||
J'ai fouillé tout Internet pour trouver une solution, une idée lumineuse qui m'aurait échappé, sans succès.
|
||||
J'en suis arrivé à un budget de plus de 400 euros, dont le tiers était déjà dédié aux capteurs analogiques dont je viens de parler.
|
||||
Le reste, c'était pour le boîtier et un système d'alimentation sur le 230V.
|
||||
|
||||
Alors, quitte à claquer autant d'argent, autant le faire pour une station pré-fabriquée, et grand bien m'en a pris.
|
||||
|
||||
## La station
|
||||
|
||||
J'ai choisi la [Bresser MeteoChamp HD Wifi 7-en-1](https://www.bresser.de/fr/Temps/BRESSER-Station-meteo-7-en-1-Wifi-HD-professionnelle-avec-differents-modes-d-affichage.html).
|
||||
|
||||

|
||||
|
||||
De base, j'ai clairement été séduit par son écran et toutes ses possibilités : deux modes de visualisation de base, des pages de graphiques, des logs à n'en plus finir, plein de paramètres à configurer partout, bref, je kiffe.
|
||||
|
||||

|
||||
|
||||
Ensuite, je savais en l'achetant que je pourrai lui faire envoyer ses données où je veux, et surtout, pas dans le cloud.
|
||||
Ça a nécessité un peu de documentation et d'essais/erreurs, mais elle est désormais parfaitement intégrée à [HomeAssistant](https://www.home-assistant.io/integrations/rest/), et sans passer par Internet.
|
||||
|
||||
Le packaging de la station fait très "entrée de gamme" pour un produit à 300 euros en promo, avec un carton très léger et assez peu de protections.
|
||||
Fort heureusement, tout est arrivé en parfait état.
|
||||
|
||||
L'ensemble est assez complet ; on regrettera simplement l'absence d'une pile bouton CR2032 utilisée par l'écran et trois piles AA LR06 pour le capteur supplémentaire.
|
||||
En revanche, un bloc d'accus est fourni pour l'ensemble de capteurs extérieurs.
|
||||
|
||||

|
||||
|
||||
Ça aussi, c'était un point qui m'a décidé à choisir ce modèle : l'ensemble de capteurs extérieurs est totalement autonome en terme d'énergie.
|
||||
Un petit panneau solaire recharge les accus (qui semblent être un groupe de 3 AA rechargeables et facilement remplaçables), et selon les dires du constructeur, il devrait pouvoir faire nuit pendant un tiers de l'année que l'ensemble aurait encore assez d'énergie pour ne pas totalement être réduit au silence.
|
||||
J'ai déjà bien assez à faire pour lui trouver un emplacement idéal et assembler les composants requis (lire plus loin) pour ne pas m'embêter à changer les piles tous les 15 jours...
|
||||
|
||||
Cet ensemble extérieur est constitué d'une girouette, d'un anémomètre, d'un pluviomètre, d'un capteur d'irradiation solaire, et d'un capteur de température/humidité.
|
||||
N'ayant pas démonté l'ensemble juste pour voir (je n'arrive pas à m'y résoudre), j'ignore quels composants sont employés.
|
||||
Le pluviomètre est assez classique, avec une cuiller dont la bascule incrémente un compteur, de même que la girouette qui fonctionne sûrement grâce à un réseau de résistances.
|
||||
|
||||
Je regrette tout de même l'absence de ventilateur en amont du capteur de température et d'humidité, alors que j'avais noté son existence sur les visuels de la station démontée.
|
||||
Mais pour la défense de Bresser : les visuels ne sont pas contractuels, et c'est probablement une mauvaise identification de la station démontée vue en photo qui m'a conduit à penser que la mienne en serait équipée.
|
||||
Sûrement un modèle un peu plus haut de gamme.
|
||||
On verra si et quand ça influera négativement sur mes relevés.
|
||||
|
||||
La liaison avec la base se fait évidemment sans-fil (en 868MHz).
|
||||
Pour le coup, à la même hauteur que la base, le module extérieur se connecte parfaitement.
|
||||
Si je descends la base dans mon bureau, impossible de se connecter.
|
||||
Une vraie cage de Faraday ma baraque...
|
||||
|
||||
Autre élément qui se connecte en 868MHz à la station : le capteur supplémentaire de température/humidité.
|
||||
On peut en associer jusqu'à 8, et on parle de modules additionnels tels que le capteur d'humidité de sol pour les cultures et le thermomètre pour piscines, par exemple.
|
||||
|
||||

|
||||
|
||||
La station, elle, se connecte en wifi.
|
||||
La procédure est courante pour ce genre de produit : on active le mode point d'accès (*AP*), on se connecte depuis un ordinateur à *192.168.1.1* et, depuis le navigateur, on procède à quelques réglages.
|
||||
Une fois connectée au wifi, elle ne fait rien par elle-même, sinon récupérer le temps par NTP.
|
||||
Elle n'offre aucun serveur pour accéder à ses données en local : il va falloir ruser, on verra ça plus loin.
|
||||
Mais en même temps, la quantité de choses qu'il est possible d'afficher est vraiment très satisfaisante, et là je ne cherche qu'à en récupérer le plus possible pour les afficher sur ma tablette domotique, et pour piloter les lumières en remplacement du capteur de luminance de mon ancienne station.
|
||||
|
||||

|
||||
|
||||
## Mise en place
|
||||
|
||||
Mon environnement n'est pas idéal pour une station météo : j'ai des arbres partout, et là où il n'y en a pas, il y a des cailloux ou du goudron.
|
||||
Pas bon pour l'inertie thermique...
|
||||
Malgré cela, j'ai un emplacement idéal en plein milieu du jardin : à 5 mètre de tout arbre ou maison, dans le vent, où la station ne risque pas de se prendre une pomme ou des graines dans la gueule, et à une distance suffisante pour accrocher le 868MHz sans broncher.
|
||||
|
||||
Par contre, j'ai deux chèvres, qui ont bousillé leur abri en tôle, et qui aime se frotter à tout ce qui dépasse.
|
||||
|
||||
Comme il est hors de question que je coule du béton en plein milieu du jardin, j'ai du opter pour un pied de parasol, retenu en place par 4 conteneurs qui, une fois remplis d'eau, pèsent 15 kilos chacun.
|
||||
J'ai acheté un simple tuyau de plomberie en PVC de 42mm, qui me semble offrir un excellent compromis entre résistance et flexibilité : il ne se cassera ni au vent ni aux cornes des chèvres.
|
||||
Une fois le tout installé, je réalise que les chèvres commencent à bouffer les boulons de serrage au pied du mât.
|
||||
En outre, je remarque une certaine instabilité de la base (le sol à cet endroit est rendu inégal par la caillasse fouillée et creusée par les poules et les chèvres).
|
||||
|
||||
Qu'à cela ne tienne, j'ai une énoooorme palette en réserve, lourde, robuste, in-des-truc-tible.
|
||||
Palette en place, pied posé, réservoirs installé, mât serré, tout est stable et ne bouge pas d'un centimètre.
|
||||
Reste ces boulons que les chèvres ont décidément pour objectif de grignoter jusqu'à ce qu'il n'en reste rien.
|
||||
J'ai aussi 3 pneus en réserve (le quatrième leur sert de bascule pour une palette, elles adorent jouer dessus), que j'ai simplement empilé autour du mât.
|
||||
|
||||
Le résultat me donne l'impression d'une station météo Mad Max.
|
||||
|
||||

|
||||
|
||||
Avec un tel équipement, les chèvres devraient pouvoir mettre un coup de corne dans un pneu, voire chercher à le dégager de la pile, la station ne devrait pas broncher.
|
||||
Pour l'instant, je suis en confiance.
|
||||
|
||||
Pfiou... Ça faisait longtemps qu'un projet ne m'avait pas autant consommé mon énergie !
|
||||
|
||||
## Logiciel
|
||||
|
||||
Comme je l'ai dit plus haut, la station est censée émettre ses données vers des services comme ProWeatherLive, Wunderground et que sais-je encore.
|
||||
RA-NA-FOUT.
|
||||
Je veux héberger ces données **chez moi**.
|
||||
Fort heureusement - et ce n'est pas le cas des stations moins onéreuses de la marque - la MeteoChamp offre un champ vide, labellisé "URL", qui me porte à croire qu'avoir un petit bridge ne sera pas trop difficile.
|
||||
|
||||
En réalité, il faut comprendre ce champ "URL" comme un champ "Hôte" : la station attend ici un simple nom d'hôte et non un chemin complet vers un script recevant les données.
|
||||
Même le protocole ne doit surtout pas être mentionné, et les noms d'hôte à rallonge vont devoir se raccourcir.
|
||||
En ce qui me concerne, ça passe, avec une IP locale.
|
||||
J'ai ensuite appris fortuitement que la station envoie ses données à un script */weatherstation/updateweatherstation.php*, donc peut importe comment je m'y prends, je dois créer un serveur qui répond à cette URL.
|
||||
|
||||
J'ai appris tout aussi fortuitement et non sans surprise que l'envoi des données ne se fait qu'en clair via ce bon vieil HTTP, sans certificat.
|
||||
Tu mets du HTTPS dans la boucle, tout ce qu'il y a de plus officiel, la station reste muette.
|
||||
J'envoie pas mes codes de carte bleue mais quand même, je suis content que mes coordonnées GPS ne foutent pas le camp dans la nature, et qu'elles restent finalement dans mon réseau local.
|
||||
|
||||
Donc la station ne s'embête pas : elle m'envoie une requête GET (oui, pas POST, GET) avec les capteurs et leurs valeurs dans l'URL.
|
||||
Du coup, ça se parse facilement, et on les ressert sans le moindre traitement.
|
||||
C'est dans HomeAssistant qu'on va configurer quelques capteurs via [l'intégration REST](https://www.home-assistant.io/integrations/sensor.rest/), et c'est tout.
|
||||
Même pas besoin de s'emmerder avec les conversions d'unités, tout se fait presque tout seul.
|
||||
|
||||
En plus, la station envoie ses données toutes les 10 secondes.
|
||||
Pour ça aussi, je suis content qu'elle ne passe pas par Internet.
|
||||
|
||||
Juste pour être clair : rien de tout ça n'est documenté, validé ou même approuvé par Bresser : ce champ est fait initialement pour le réseau Arekas.
|
||||
Heureusement que la cible de ce genre de produit n'est pas les informaticiens...
|
||||
Bref, du coup ça fonctionne, j'ai mes capteurs dans HomeAssistant.
|
||||
|
||||
Par contre, je m'étonne de la pauvreté des données communiquées par la station par ce biais.
|
||||
J'espérais disposer d'autant d'informations que sur l'écran lui-même, par exemple les heures de lever et de coucher du soleil, la version du firmware de la station, une certaine organisation pour les capteurs sur les 8 canaux optionnels, ce genre de choses.
|
||||
Non, là, c'est le minimum syndical.
|
||||
Ça me laisse la désagréable impression de gens qui savent construire des stations météo mais qui ne savent pas en coder le firmware (qui se met à jour en deux étapes d'ailleurs, jamais vu ça auparavant, très étrange...).
|
||||
|
||||
## Conclusion
|
||||
|
||||
Voilà qui conclue ma recherche d'une nouvelle station météo.
|
||||
J'espère qu'elle me tiendra quelques années, au moins autant que ma station météo personnelle qui aura durée 5 ans avant de se faire ronger les circuits par l'humidité.
|
||||
La présence de pièces détachées sur le site du constructeur est rassurante, et si un jour l'envie me prend de mettre mes propres composants, j'aurais enfin un boîtier digne de ce nom, et les capteurs "essentiels".
|
||||
|
||||
Je trouve honnêtement que 300 euros en promo est un coût élevé.
|
||||
Mais c'est un achat très ponctuel, et assez qualitatif (le plastique est solide, les finitions sont bonnes, le bundle est complet, l'écran, bien que non tactile, est agréable à consulter, etc.).
|
||||
Je doute que j'aurai besoin de la remplacer de si tôt, à moins qu'une chèvre la charge frontalement avec la volonté de lui défoncer la mouille, ou qu'un oiseau décide de faire son nid dans le pluviomètre (un risque connu et réel parmi les météorologues amateurs...).
|
||||
|
||||
Malgré ce tarif élevé, je suis très content de mon achat.
|
||||
J'ai plein de choses à bidouiller, à mesurer et à analyser, et je vais pouvoir recycler l'ancienne station en d'autre projets que j'ai en tête, tels qu'un compteur pour l'eau, ou un système d'injection d'eau de pluie dans le sol quand mon réservoir est plein et que la terre est sèche, bref, il y a de quoi faire.
|
||||
|
||||
Je publierai une petite mise à jour dans quelques mois pour voir si cette station a rempli ses promesses !
|
||||
Reference in New Issue
Block a user