Community Forum
    • Blog
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Tasmota

    Scheduled Pinned Locked Moved Téléinfo
    525 Posts 31 Posters 180.9k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • CharlesC Offline
      Charles @Barbu Dor
      last edited by

      @barbu-dor J’Ai fait des modifs pour afficher plus de chose en mode standard je dois avoir un bug dans un des sends pour afficher ou envoyer des donnés mais sans linky chaud à trouver

      1 Reply Last reply Reply Quote
      • CharlesC Offline
        Charles @Barbu Dor
        last edited by

        @barbu-dor yes j’y suis. 😉

        Oui j’ai vu que ça dépendait du module energy après coup depuis le début je le dit que c’était pas forcément la meilleure des idées de pas passer par un driver standard 😉

        Barbu DorB 1 Reply Last reply Reply Quote
        • Barbu DorB Offline
          Barbu Dor @Charles
          last edited by

          @charles Theo vient de merger ma PR
          Il y a maintenant une commande EnergyConfig qui est poussée jusqu'au driver energie actif
          A partir de là tu peux traite la commande comme tu veux (la chaine est dans XDrvMailbox.data)
          Regarde le petit exemple ajouté dans xnrg_20_dummy

          CharlesC 2 Replies Last reply Reply Quote
          • CharlesC Offline
            Charles @Barbu Dor
            last edited by

            @barbu-dor ok top je fais ça ASAP s'suis déjà sur 2 autres trucs, mais tu connais ça je suppose

            1 Reply Last reply Reply Quote
            • CharlesC Offline
              Charles @Barbu Dor
              last edited by Charles

              @barbu-dor et voila c'est fait un grand merci à toi

              Maintenant toute la config téléinfo se fait en mode console et sans les SetOption, donc depuis la branche developpement de tasmota de ce matin, les 2 options SetOption102 et SetOption108 n'ont plus d'incidence elles ne servent plus à rien et ont été marquée obsolètes dans le code.

              Description:

              Comment ça se passe maintenant ? Très simple avec la commande EnergyConfig depuis la console

              EnergyConfig affiche la configuration de la téléinfo

              14:03:38.161 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "ADCO":"031428067147","OPTARIF":"HC..","ISOUSC":15,"HCHC":2478378,"HCHP":0,"PTEC":"HC..","IINST":0,"IMAX":2,"PAPP":100,"HHPHC":3,"MOTDETAT":0}
              14:03:38.605 CMD: EnergyConfig
              14:03:38.609 TIC: Settings Mode:historique, Raw:full, Skip:0, Limit:0
              14:03:38.630 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/stat/RESULT = {"EnergyConfig":"Done"}
              14:03:39.664 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "ADCO":"031428067147","OPTARIF":"HC..","ISOUSC":15,"HCHC":2478378,"HCHP":0,"PTEC":"HC..","IINST":0,"IMAX":2,"PAPP":100,"HHPHC":3,"MOTDETAT":0}
              14:03:41.411 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "ADCO":"031428067147","OPTARIF":"HC..","ISOUSC":15,"HCHC":2478378,"HCHP":0,"PTEC":"HC..","IINST":0,"IMAX":2,"PAPP":100,"HHPHC":3,"MOTDETAT":0}
              14
              

              EnergyConfig Standard Configure la téléinfo en mode Linky Standard (9600bps)
              EnergyConfig Historique Configure la téléinfo en mode Linky Historique (1200bps)

              Au dela de la trame complète de télémetrie (topic SENSOR) envoyée régulièrement (menu configuration/configure logging)

              14:00:01.561 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/SENSOR = {"Time":"2021-04-10T14:00:01","ENERGY":{"TotalStartTime":"2021-04-09T23:32:17","Total":0.602,"Yesterday":0.000,"Today":0.602,"Period":6,"Power":110,"Current":0.000,"Load":0,"ADCO":"031428067147","OPTARIF":"HC..","ISOUSC":15,"HCHC":2478373,"HCHP":0,"PTEC":"HC..","IINST":0,"IMAX":2,"PAPP":110,"HHPHC":3,"MOTDETAT":0}}
              

              il est possible d'envoyer en plus les données complètes à chaque trame reçue

              EnergyConfig full active l'envoi complet à chaque trame reçue
              EnergyConfig changed active l'envoi uniquement des données modifiées (depuis la dernière trame donc) à chaque trame reçue

              14:05:18.411 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "ADCO":"031428067147","OPTARIF":"HC..","ISOUSC":15,"HCHC":2478380,"HCHP":0,"PTEC":"HC..","IINST":0,"IMAX":2,"PAPP":110,"HHPHC":3,"MOTDETAT":0}
              14:05:19.241 CMD: EnergyConfig Changed
              14:05:19.245 TIC: Raw to 'changed'
              14:05:19.267 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/stat/RESULT = {"EnergyConfig":"Done"}
              14:05:20.105 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "PAPP":100}
              14:05:23.209 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "HCHC":2478381}
              14:06:06.201 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "PAPP":110}
              14:06:09.160 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "HCHC":2478382}
              14:06:53.737 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "HCHC":2478383}
              14:07:12.914 MQT: emoncms/ch2i/factory/wifinfo_09AFD3/tele/RESULT = { "PAPP":100}
              

              EnergyConfig noraw désactive l'envoi (complet ou changed) de chaque trame reçue
              EnergyConfig Skip 5 envoi seulement 1 trame sur x (ici 5) lors de l'envoi des données, permet de limiter un peu le trafic et surtout l'envoi en base systématique par exemple.
              EnergyConfig Skip 0 désactive l'option précédente.

              Attention, a partir du moment ou vous avez activé le skip mode l'option changed devient caduque car le changed sera appliqué sur la dernière trame reçue et pas celle envoyée, et en plus elle peut être "skippée".

              N'hésitez pas si vous avez des questions ou des remarques

              Barbu DorB SebHS 2 Replies Last reply Reply Quote
              • Barbu DorB Offline
                Barbu Dor @Charles
                last edited by Barbu Dor

                @charles Super 👏

                Est-ce que les settings sont sauvegardés ?
                Ou bien faut-il les remettre à chaque démarrage ?
                C'est assez facile soit avec une Rule type

                on system#boot do backlog EnergyConfig xxxx; EnergyConfig xxx endon
                

                De plus maintenant en activant le FileSystem en flash on peut aussi avoir un fichier `autexec.bat' 😉 qui enchaîne des commandes de configuration. Même sur un module minimum de 1MB on peut avoir 48kB de filesystem, largement suffisant pour un autoexec.bet conséquent. Avec un MiniD1/NodeMCU de 4MB on peut avoir 2MB de filesystem.
                Sur ESP32, la place réservé au code est plus importante (2 * 1,9MB pour gérer l'OTA) et donc le filesystem minimum est de 48kB aussi.

                Ca serait bien de faire une page de doc dédiée mais par contre, il faudra la faire en anglais pour être cohérent avec le reste. Je peux regarder cela un peu plus tard.

                CharlesC 1 Reply Last reply Reply Quote
                • V Offline
                  Vincent835
                  last edited by

                  Bonjour,

                  Merci pour votre travail pour intégrer la téléinfo dans Tasmota.

                  Sur la version tasmota 9.3.1.1, en mode téléinfo standard, les compteurs triphasés ne semblent pas correctement traités.
                  Sur la page d'accueil, il n'apparait qu'une seule tension et une seule intensité.
                  Tasmota 9.3.1.1 Téléinfo.png
                  Est-ce que cela a été corrigé sur Tasmota 9.3.1.2?

                  Je vous remercie.

                  Vincent

                  1 Reply Last reply Reply Quote
                  • V Offline
                    Vincent835 @Barbu Dor
                    last edited by

                    @barbu-dor said in Tasmota:

                    @Charles j'ai changé l'appel à MqttPublish() par MqttPublishRules() (ou du meme genre) ainsi le JSON est parsé par le moteur de règles
                    Chaque champ est alors un trigger

                    Bonjour,

                    Pourriez-vous m'indiquer à partir de quelle version de Tasmota cette fonction a été intégrée?
                    Est-ce bien la 9.3.1.1?
                    donc pas sur la 9.3.1?

                    Merci

                    Vincent

                    Barbu DorB 1 Reply Last reply Reply Quote
                    • Barbu DorB Offline
                      Barbu Dor @Vincent835
                      last edited by

                      @vincent835 Compte tenu que j'ai posté ce message le 11 février et que la 9.3.1 est sortie le 22 février, ma PR de février est donc dans le code de la release 9.3.1

                      MAIS n'oublie pas que Teleinfo n'est pas inclus par défaut dans aucun des binaires et qu'il faut compiler soit même.
                      Donc tant qu'a compiler, autant le faire sur la version de développement.

                      V 1 Reply Last reply Reply Quote
                      • SebHS Offline
                        SebH @Charles
                        last edited by SebH

                        @charles
                        J'ai tenté de charger ta dernière version logicielle, mais chez moi c'est toujours pareil sur un wemos D1 mini

                        00:00:00.032 CFG: Chargé de la flash à F8, Compte 15
                        00:00:00.034 FRC: Some settings have been reset (5)
                        00:00:00.039 Projet tasmota Tasmota Version 9.3.1.2(tasmota)-2_7_4(2021-04-11T13:29:44)
                        00:00:00.507 WIF: Connexion à l'AP1 Sylvia&Seb Channel 1 BSSId xxxxxx en mode 11n comme tasmota_D84B6D-2925...
                        00:00:01.752 WIF: Connecté
                        00:00:02.004 HTP: Serveur web actif sur tasmota_D84B6D-2925 avec l'adresse IP 192.168.1.151
                        12:43:18.047 RSL: tele/tasmota_D84B6D/INFO1 = {"Info1":{"Module":"Generic","Version":"9.3.1.2(tasmota)","FallbackTopic":"cmnd/DVES_D84B6D_fb/","GroupTopic":"cmnd/tasmotas/"}}
                        12:43:18.048 RSL: tele/tasmota_D84B6D/INFO2 = {"Info2":{"WebServerMode":"Admin","Hostname":"tasmota_D84B6D-2925","IPAddress":"192.168.1.151"}}
                        12:43:18.051 RSL: tele/tasmota_D84B6D/INFO3 = {"Info3":{"RestartReason":{"Exception":3,"Reason":"Exception","EPC":["40259a0c","00000000","00000000"],"EXCVADDR":"402950d0","DEPC":"00000000","CallChain":["4021d35c","402323a7","40255070","4024dd42","401060f9","4000050c","40232918","402328f5","40252ade","40252ad4","4024de3d","4021dab4","401010c0","402363bb","4021dde0","40220efc","40218d55","402328e7","4023293c","40100a58","40250ea0","40101d05"]}}}
                        12:43:21.447 QPC: Reset
                        12:43:22.413 RSL: tele/tasmota_D84B6D/STATE = {"Time":"2021-04-11T12:43:22","Uptime":"0T00:00:09","UptimeSec":9,"Heap":25,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":0,"Wifi":{"AP":1,"SSId":"Sylvia&Seb","BSSId":"xxxxxxxx","Channel":1,"RSSI":64,"Signal":-68,"LinkCount":1,"Downtime":"0T00:00:03"}}

                        Il me fait un reset du choix teleinfo sur la pin D7

                        CharlesC 1 Reply Last reply Reply Quote
                        • CharlesC Offline
                          Charles @Barbu Dor
                          last edited by Charles

                          @barbu-dor oui je pense que ca l'est automatiquement car c'est dans les settings globaux, mais faudra que je verifie qd même 🙂

                          yes j'ai vu ca maintenant j'active UFS par défaut aussi c'est top.

                          Oui pour la doc j'ai déjà fait 2/3 modifs, pour les vieux setoption mais aussi pour une carte ZigBee que j'ai ajouté dans la partie zigbee donc je devrais pouvoir m'en sortir

                          Pour la téléinfio oui le mieux est une page dédiée justement j'y pensais. Si tu peux "créer" cette page même vide (ou me dire comment faire) ca me permettrait de commencer à y mettre des choses.

                          Barbu DorB 1 Reply Last reply Reply Quote
                          • CharlesC Offline
                            Charles @SebH
                            last edited by

                            @sebh oui tu as tjs le pb car en mode standard, c'est depuis que j'ai changé des choses pour afficher dans l'interface, j'ai du faire une boulette quelque part mais sans linky je ne peux pas débugguer cette partie.

                            Essaie de suppriler toute cette partie, c'est la dedans que j'ai fais des modifs
                            https://github.com/arendst/Tasmota/blob/development/tasmota/xnrg_15_teleinfo.ino#L873-L897

                            Pour le reset en changement de pin rx comme l'a indiqué @Barbu-Dor c'est normal ca reset juste après pour recharger la nouvelle config serial. mais après le reset la config ne dois pas être perdue.

                            Tu peux aussi passer ta téléinfo en mode historique (ca fonctionnera pas nous sommes d'accord) mais ca ne devrait au moins pas planter.

                            CharlesC 1 Reply Last reply Reply Quote
                            • Barbu DorB Offline
                              Barbu Dor @Charles
                              last edited by

                              @charles Page de doc créée
                              https://github.com/tasmota/docs/blob/development/docs/Teleinfo.md

                              Pour la mise a jour, comme pour le code, soit tu fork, tu clones, tu PR
                              Ou alors directement en ligne dans GitHub (GitHUb fork et crée les branches et PR automatiquement)

                              Attention MKDOCS demande une syntaxe de markdown un peu particulière et la preview de GitHub n'est pas forcément correcte.
                              Tagguer quand tu aurs fait la PR pour que je vérifie (j'ai les outils mkdocs pour vérifier)
                              La page est dans la branche développement car elle se rapporte a des modifications disponibles dans la branche développement de Tasmota. Donc elle n'est pas visible autrement que sur GitHb (la doc publiée est celle de la release).
                              Elle passera en master quand la 9.3 sortira (avant fin avril)

                              CharlesC 1 Reply Last reply Reply Quote
                              • CharlesC Offline
                                Charles @Barbu Dor
                                last edited by

                                @barbu-dor Oh nice, tu as même déjà documenté, merci à toi. Oui pour la doc je le fais les edit depuis github, c'est assez pratique. Mais j'ai aussi déjà payé le prix du preview correct mais une fois mergé ca ne l'était plus, donc je vais faire attention 🙂

                                Merci à toi en tout cas, je pense que j'aurais quelques questions aussi sur les triggers et berry un peu plus tard.

                                1 Reply Last reply Reply Quote
                                • V Offline
                                  Vincent835 @Barbu Dor
                                  last edited by

                                  @barbu-dor Merci pour ton retour concernant les triggers sur les messages JSON.
                                  Je précise mon problème.
                                  Cela marche bien sur la version 9.3.1.1 que j'ai compilé.
                                  Par contre sur la 9.3.1, de Nicolas Bernaerts, les triggers sur les messages JSON ne marchent pas.
                                  Est-ce que cela pourrait venir de la forme des messages JSON qui ne sont pas formatés de la même façon que sur la version tasmota standard?

                                  19:49:06.821 MQT: tele/tasmota_DF20CB/SENSOR = {"Time":"2021-04-10T19:49:06","TIC":{"ADSC":"031776013513","VTIC":"02","DATE":"E210410194907","NGTF":"BASE","LTARF":"BASE","EAST":"027416815","EASF01":"015506752","EASF02":"009861893","EASF03":"000826037","EASF04":"000514699","EASF05":"000442412","EASF06":"000265022","EASF07":"000000000","EASF08":"000000000","EASF09":"000000000","EASF10":"000000000","EASD01":"009975618","EASD02":"008227431","EASD03":"002960408","EASD04":"006253358","IRMS1":"002","IRMS2":"002","IRMS3":"002","URMS1":"223","URMS2":"242","URMS3":"243","PREF":"12","PCOUP":"12","SINSTS":"01370","SINSTS1":"00462","SINSTS2":"00480","SINSTS3":"00428","SMAXSN":"06243","SMAXSN1":"03094","SMAXSN2": ...
                                  

                                  La règle que j'utilise est

                                  rule1 on URMS1 do var4 %value% endon
                                  

                                  Je te remercie.

                                  Barbu DorB 1 Reply Last reply Reply Quote
                                  • Barbu DorB Offline
                                    Barbu Dor @Vincent835
                                    last edited by

                                    @vincent835
                                    Par rapport au message SENSOR que tu postes il manque le niveau TIC
                                    Donc le trigger est TIC#URMS1 et la règle correspondante

                                    rule1 on TIC#URMS1 do var4 %value%
                                    

                                    Le message a t'il un format différent entre les 2 versions ?

                                    V 1 Reply Last reply Reply Quote
                                    • V Offline
                                      Vincent835 @Barbu Dor
                                      last edited by

                                      @barbu-dor
                                      Je viens d'essayer ta proposition de règle sans succés.
                                      Voici le message JSON sur la version 9.3.1.1

                                      19:53:50.015 MQT: tele/tasmota_DF20CB/RESULT = { "ADSC":"031776013513","VTIC":2,"NGTF":" BASE ","LTARF":" BASE ","EAST":27416857,"EASF01":15506794,"EASF02":9861893,"EASF03":826037,"EASF04":514699,"EASF05":442412,"EASF06":265022,"EASF07":0,"EASF08":0,"EASF09":0,"EASF10":0,"EASD01":9975618,"EASD02":8227473,"EASD03":2960408,"EASD04":6253358,"IRMS1":2,"IRMS2":2,"IRMS3":2,"URMS1":225,"URMS2":237,"URMS3":245,"PREF":12,"PCOUP":12,"SINSTS":1305,"SINSTS1":482,"SINSTS2":390,"SINSTS3":433,"SMAXSN":6243,"SMAXSN1":3094,"SMAXSN2":3214,"SMAXSN3":2158,"SMAXSN-1":5714,"SMAXSN1-1":3559,"SMAXSN2-1":1954,"SMAXSN3-1":2064,"CCASN":790,"CCASN-1":1550,"UMOY1":229,"UMOY2":240,"UMOY3":239,"STGE":"003A4001 
                                      
                                      Barbu DorB 1 Reply Last reply Reply Quote
                                      • Barbu DorB Offline
                                        Barbu Dor @Vincent835
                                        last edited by

                                        @vincent835
                                        Si

                                        MQT: tele/tasmota_DF20CB/SENSOR = {"Time":"2021-04-10T19:49:06","TIC":{"ADSC":"031776013513", ....
                                        

                                        les champs sont sous l'object TIC alors => on TIC#URMS1 do ...

                                        Si

                                        tele/tasmota_DF20CB/RESULT = { "ADSC":"031776013513","VTIC":2,"NGTF":" BASE " ....
                                        

                                        Les champs sont a la racinedu JSON alors => on URMS1 do ... (ou bien on URMS1#data do .... )
                                        Je ne me rappelle jamais la règle exacte quand il faut ajouter #data pour un champ à la racine. Je crois que c'est quand il est orphelin mais dans si le 1er ne marche pas essaye le 2nd

                                        Si ca ne marche pas il faudra que je remonte une manip de test

                                        V 2 Replies Last reply Reply Quote
                                        • V Offline
                                          Vincent835 @Barbu Dor
                                          last edited by

                                          @barbu-dor
                                          Lorsque les champs sont à la racine du JSON, il n'y a pas de problème: on URMS1 do...marche même sans #data.
                                          C'est lorsque les champs sont sous un objet que je n'arrive pas à faire déclencher le trigger.
                                          Même avec la forme on TIC#URMS1 do...
                                          Si tu trouves une solution, je suis preneur.
                                          Merci.

                                          1 Reply Last reply Reply Quote
                                          • CharlesC Offline
                                            Charles @Charles
                                            last edited by Charles

                                            @Seb-H as tu solutionné ton problème?

                                            J'essaie d'investiguer sur les bugs du mode standard avant la prochaine release, et j'ai créé un outil pour enregistrer les trames (et donc pouvoir les rejouer pour les tests et corriger les bugs)

                                            L'outil est ici https://github.com/hallard/tinfo_replay des informations de bases sont dispo dans le readme

                                            Je suis donc preneur de tout enregistrement de trame en provenance du linky avec idéalement une sur un contrat base et l'autre un contrat heures creuses, ca m'aiderait vraiment a améliorer la fiabilité.

                                            vous pouvez poster le fichier .txt directement sur un post de réponse ici (bouton upload file)
                                            ba4f0c0b-217a-4fd7-9c57-04d7b555aff7-image.png

                                            Surtout pas d'édition des fichiers dans un éditeur texte ça foutrait tout en l'air

                                            Merci à tous

                                            PS : il est aussi possible qu'en mode standard avec MQTT la trame soit trop longue ca fait beaucoup d'étiquettes et valeurs à mettre dans le payload, il faudrait peut être définir une liste des étiquettes à renvoyer pour limiter la taille du payload MQTT

                                            ADSC	J21976885617	I
                                            DATE	E200811150447	?
                                            NGTF	BASE	<
                                            LTARF	BASE	F
                                            EAST	002493204	'
                                            EASF01	002493204	:
                                            EASF02	000000000	#
                                            EASF03	000000000	$
                                            EASF04	000000000	%
                                            EASF05	000000000	&
                                            EASF06	000000000	'
                                            EASF07	000000000	(
                                            EASF08	000000000	)
                                            EASF09	000000000	*
                                            EASF10	000000000	"
                                            EASD01	40	@
                                            URMS2	240	A
                                            URMS3	238	I
                                            PREF	09	H
                                            PCOUP	09	"
                                            SINSTS	00897	^
                                            SINSTS1	00267	F
                                            SINSTS2	00591	G
                                            SINSTS3	00038	D
                                            SMAXSN	E200811115306	03320	.
                                            SMAXSN1	E200811115306	03050	_
                                            SMAXSN2	E200811131815	02350	%
                                            SMAXSN3	E200811095922	00130	(
                                            SMAXSN-1	E200810192506	04240	T
                                            SMAXSN1-1	E200810192506	03970	N
                                            SMAXSN2-1	E200810103044	00340	8
                                            SMAXSN3-1	E200810085137	00380	I
                                            CCASN	E200811150000	00578	>
                                            CCASN-1	E200811143000	00558	\
                                            UMOY1	E200811150000	239
                                            UMOY2	E200811150000	240	$
                                            UMOY3	E200811150000	238	,
                                            STGE	00
                                            MSG1	PAS DE MESSAGE	<
                                            PRM	19858176535209	F
                                            RELAIS	000	B
                                            NTARF	01	N
                                            NJOURF	00	&
                                            1JOURF+100008001 NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE	9
                                            
                                            Nicolas BernaertsN V SebHS 4 Replies Last reply Reply Quote
                                            • First post
                                              Last post

                                            0

                                            Online

                                            5.7k

                                            Users

                                            534

                                            Topics

                                            5.0k

                                            Posts

                                            Top Topics

                                            • Denky 4 - Domoticz - Triphasé -
                                              Nicolas BernaertsN
                                              Nicolas Bernaerts
                                              0
                                              7
                                              266

                                            • Denky D4 et Linky Standard TInfo Rx Non Configuré
                                              CharlesC
                                              Charles
                                              0
                                              5
                                              303

                                            Popular Tags

                                            teleinfo
                                            24 topics
                                            arduino
                                            19 topics
                                            remora
                                            16 topics
                                            esp8266
                                            10 topics
                                            arduipi
                                            10 topics
                                            wifinfo
                                            7 topics
                                            raspberry
                                            7 topics
                                            broadcast
                                            7 topics
                                            Copyright © 2022 Charles-Henri Hallard | Return to blog page | Powered by NodeBB