{"id":22542,"date":"2025-11-25T08:24:58","date_gmt":"2025-11-25T07:24:58","guid":{"rendered":"http:\/\/www.on4cn.be\/blog_radio\/?p=22542"},"modified":"2025-11-25T08:24:58","modified_gmt":"2025-11-25T07:24:58","slug":"python-et-ce-que-jai-fait-recemment","status":"publish","type":"post","link":"http:\/\/www.on4cn.be\/blog_radio\/2025\/11\/25\/python-et-ce-que-jai-fait-recemment\/","title":{"rendered":"Python et ce que j\u2019ai fait r\u00e9cemment"},"content":{"rendered":"<article class=\"article\">\n<center><strong><span style=\"color: #ff0000;\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcRpwv4MDDXUJhpgQTA-l0MnCiQ7TfllfEKgXQ&#038;s\" width=\"60\" height=\"80\" alt=\"\"> AmateurRadio.com<\/span><\/strong><\/center><br \/>\n<center><b><span style=\"color: #0000ff;\">Article traduite en Fran\u00e7ais via Google Translate<\/b><\/center><\/p>\n<h1>\n<p style=\"text-align: center;\"><span style=\"color: #ff0000;\">Python et ce que j\u2019ai fait r\u00e9cemment<\/span><\/p>\n<\/h1>\n<p><b>Le 25 Novembre 2025<\/b><\/p>\n<h2><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.amateurradio.com\/wp-content\/themes\/amateurradio_3_3\/images\/PostHeaderIcon.png\" width=\"15\" height=\"31\" alt=\"\"><br \/>\n<a href=\"https:\/\/www.amateurradio.com\/python-and-what-i-have-been-up-too\/\">Python et ce que j\u2019ai fait r\u00e9cemment<\/a><\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.amateurradio.com\/wp-content\/themes\/amateurradio_3_3\/images\/PostDateIcon.png\" width=\"17\" height=\"18\" alt=\"\"><br \/>\n  24 novembre 2025 | par<br \/>\n  <a href=\"https:\/\/ve3wdm.blogspot.com\" target=\"_blank\">Mike VE9KK<\/a> |<br \/>\n  <a href=\"https:\/\/www.amateurradio.com\/python-and-what-i-have-been-up-too\/#leaveacomment\">Laisser un commentaire<\/a> (0)<\/p>\n<table align=\"center\" cellpadding=\"0\" cellspacing=\"0\" style=\"margin-left: auto; margin-right: auto;\">\n<tr>\n<td style=\"text-align: center;\">\n      <a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhD0CFTIUtwKp1irklNTZi_Aq-orUrOZO8qxsWWK5yk10BLjzqNliKQGO1-ZDx5xq2pHDk_P-dyBcr6nwOHOpOVTC4nfCvokbLbkInlz54Dl-bT4vbhUYWH2o76RQVb51kvugfyDTBhtNRetdYSCZD067mtyvBgs8eAAjaQ4U04v3Py_k9vybcRTapJ63c\/s1120\/pythonshutdown%20.png\"><br \/>\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhD0CFTIUtwKp1irklNTZi_Aq-orUrOZO8qxsWWK5yk10BLjzqNliKQGO1-ZDx5xq2pHDk_P-dyBcr6nwOHOpOVTC4nfCvokbLbkInlz54Dl-bT4vbhUYWH2o76RQVb51kvugfyDTBhtNRetdYSCZD067mtyvBgs8eAAjaQ4U04v3Py_k9vybcRTapJ63c\/w640-h350\/pythonshutdown%20.png\" width=\"640\" height=\"350\" alt=\"python shutdown\"><br \/>\n      <\/a>\n    <\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\">Un extrait du script Python d\u2019arr\u00eat pendant les actions.<\/td>\n<\/tr>\n<\/table>\n<h3><strong>Python et ce que j\u2019ai fait r\u00e9cemment\u2026 laissez-moi vous raconter !<\/strong><\/h3>\n<p>J\u2019ai honn\u00eatement r\u00e9ussi \u00e0 me surprendre avec l\u2019automatisation que j\u2019ai construite pour le d\u00e9marrage et l\u2019arr\u00eat de mon installation de contest. Avant Python, la proc\u00e9dure de d\u00e9marrage \u00e9tait une longue cha\u00eene d\u2019actions manuelles : lancer <a href=\"https:\/\/eterlogic.com\/Products.VSPE.html\">VSPE<\/a> et attendre, puis cliquer sur<br \/>\n<a href=\"https:\/\/icom.va2fsq.com\/\">Win4Icom Suite<\/a> et attendre encore, puis d\u00e9marrer <a href=\"https:\/\/n1mmwp.hamdocs.com\/\">N1MM+<\/a> et attendre de nouveau, puis ouvrir Firefox, naviguer jusqu\u2019au<br \/>\n<a href=\"https:\/\/www.reversebeacon.net\/main.php?rows=10&amp;max_age=10,hours&amp;hide=distance_km\">Reverse Beacon Network<\/a>, entrer mon indicatif, v\u00e9rifier si j\u2019\u00e9tais rep\u00e9r\u00e9, et actualiser toutes les 10 minutes.<\/p>\n<p>Maintenant ? Gr\u00e2ce \u00e0 Python, tout cela se fait en un seul clic de souris. <strong>J\u2019ADORE !<\/strong><\/p>\n<p>D\u2019un seul clic, ma prise Kasa s\u2019allume, alimente mon bloc d\u2019alimentation Astron et mon Pi4B qui commence son d\u00e9marrage.<br \/>\nEnsuite VSPE d\u00e9marre, puis Win4Icom, puis N1MM+, et enfin Firefox s\u2019ouvre sur Reverse Beacon Network, se connecte et entre automatiquement mon indicatif pour montrer qui entend mes appels CQ \u2014 avec un rafra\u00eechissement toutes les 10 minutes.<\/p>\n<p>Si vous \u00eates curieux des probl\u00e8mes et d\u00e9fis rencontr\u00e9s en chemin, continuez votre lecture. Ou, si vous pr\u00e9f\u00e9rez aller \u00e0 l\u2019essentiel, rendez-vous \u00e0 la fin o\u00f9 je partage mes prochains projets Python et radio amateur \u2014 vous pourriez \u00eatre surpris !<\/p>\n<h3>Le d\u00e9but : la prise Wi-Fi<\/h3>\n<p>Pour lancer toute la proc\u00e9dure de d\u00e9marrage, j\u2019avais besoin d\u2019une biblioth\u00e8que Python pour communiquer avec ma <a href=\"https:\/\/www.kasasmart.com\/us\/products\/smart-plugs\">prise Kasa<\/a> \u2014 facile. Ensuite je devais trouver l\u2019adresse IP de la prise \u2014 encore facile.<br \/>\nMais un jour, mon terminal Python a soudainement affich\u00e9 une erreur li\u00e9e \u00e0 la prise Wi-Fi. Apr\u00e8s quelques recherches, j\u2019ai d\u00e9couvert que notre routeur avait red\u00e9marr\u00e9 et r\u00e9assign\u00e9 une nouvelle adresse IP \u00e0 la prise. Cela a compl\u00e8tement cass\u00e9 mon script.<\/p>\n<p>Plus de recherches m\u2019ont men\u00e9 \u00e0 une excellente solution : je pouvais attribuer un <strong>nom<\/strong> \u00e0 la prise et demander \u00e0 Python de la rechercher par nom, puis de d\u00e9couvrir automatiquement la nouvelle adresse IP assign\u00e9e par le routeur. Probl\u00e8me r\u00e9solu \u2014 \u00e9l\u00e9gamment.<\/p>\n<h3>Ensuite, la s\u00e9quence de d\u00e9marrage<\/h3>\n<p>Une fois la prise Wi-Fi r\u00e9gl\u00e9e, je suis pass\u00e9 au script du reste de la s\u00e9quence. J\u2019ai ajout\u00e9 tous les programmes n\u00e9cessaires, dans l\u2019ordre exact o\u00f9 ils devaient s\u2019ouvrir, et tout fonctionnait \u00e0 merveille\u2026 jusqu\u2019\u00e0 ce que je remarque que certains programmes se chargeaient plus lentement que d\u2019autres.<br \/>\nR\u00e9sultat : certaines t\u00e2ches n\u2019\u00e9taient pas pr\u00eates quand le programme suivant d\u00e9marrait, et tout se figeait. La solution \u00e9tait simple : ins\u00e9rer des d\u00e9lais entre les lancements pour laisser \u00e0 chaque programme le temps de s\u2019initialiser.<\/p>\n<h3>Win4Icom et les mises \u00e0 jour<\/h3>\n<p>Tom, VE2FSQ, fait un travail incroyable pour tenir son logiciel \u00e0 jour \u2014 il y a une nouvelle version presque chaque mois. Mais lorsqu\u2019une mise \u00e0 jour sortait, mon script Python continuait d\u2019ouvrir <strong>l\u2019ancienne<\/strong> version. Pour corriger cela, j\u2019ai \u00e9crit du code pour v\u00e9rifier automatiquement la derni\u00e8re version install\u00e9e et lancer celle-ci.<\/p>\n<h3>Arr\u00eat incorrect du 7610 : probl\u00e8me r\u00e9gl\u00e9<\/h3>\n<p>J\u2019ai rencontr\u00e9 un autre souci : parfois Python n\u2019arr\u00eatait pas correctement mon Icom 7610 via Win4Icom. Cela signifiait que la radio \u00e9tait brutalement coup\u00e9e lorsque la prise Wi-Fi \u00e9teignait mon alimentation. <strong>PAS BON.<\/strong>  Au lieu d\u2019utiliser Win4Icom pour l\u2019arr\u00eat, j\u2019ai ajout\u00e9 la commande CI-V d\u2019arr\u00eat directement dans mon script Python. R\u00e9sultat : le 7610 s\u2019\u00e9teint proprement chaque fois.<\/p>\n<p>Mon Pi4B est aussi branch\u00e9 sur la m\u00eame prise Wi-Fi, mais ce c\u00f4t\u00e9-l\u00e0 est simple : lorsque la prise s\u2019allume, le Pi d\u00e9marre naturellement, aucun Python n\u00e9cessaire. Pour l\u2019arr\u00eat du Pi, c\u2019est une autre histoire impliquant Windows et Python\u2026 que je garde pour le prochain article.<\/p>\n<h3>Ce qui vient ensuite\u2026<\/h3>\n<p>Comme promis, voici un aper\u00e7u de ce sur quoi je travaille maintenant. Apr\u00e8s un contest, je dois habituellement :<\/p>\n<ol>\n<li>Aller sur le site <a href=\"https:\/\/www.3830scores.com\/\">3830 scoring<\/a> et entrer mon score manuellement.<\/li>\n<li>G\u00e9n\u00e9rer un fichier CAB et l\u2019envoyer au sponsor du contest.<\/li>\n<li>G\u00e9n\u00e9rer un fichier ADIF dans N1MM+.<\/li>\n<li>Soumettre cet ADIF dans mon programme de log Amateur Radio Contest Log, puis faire de m\u00eame pour<br \/>\n    <a href=\"https:\/\/lotw.arrl.org\/lotwuser\/default\">LOTW<\/a>,<br \/>\n    <a href=\"https:\/\/clublog.org\/logsearch.php\">Club Log<\/a>,<br \/>\n    <a href=\"https:\/\/cwops.org\/\">CWops<\/a>,<br \/>\n    <a href=\"https:\/\/www.qrz.com\/\">QRZ.com<\/a>.\n  <\/li>\n<\/ol>\n<p>\nJe d\u00e9veloppe un programme Python qui fera <strong>tout<\/strong> cela automatiquement :<br \/>\n\u2022 Connexion \u00e0 3830, remplissage des bandes, multiplicateurs, QSO et score final.<br \/>\n\u2022 G\u00e9n\u00e9ration du fichier CAB depuis N1MM+.<br \/>\n\u2022 G\u00e9n\u00e9ration du fichier ADIF et import dans Amateur Radio Contest Log.<br \/>\n\u2022 Depuis Amateur Radio Contest Log, ouverture automatique de Club Log et LOTW pour soumettre les logs.<br \/>\n\u2022 Connexion \u00e0 QRZ.com et CWops pour soumettre les r\u00e9sultats \u00e9galement.<\/p>\n<p>Tout cela d\u2019un seul clic \u2014 pendant que je me d\u00e9tends et regarde.<\/p>\n<p>Mon prochain article sera consacr\u00e9 au processus d\u2019arr\u00eat du contest. Pour le moment, je commence juste le nouveau projet mentionn\u00e9 ci-dessus.<\/p>\n<p><strong><a href=\"https:\/\/ve3wdm.blogspot.com\/\">Mike Weir, VE9KK<\/a><\/strong>, contributeur r\u00e9gulier \u00e0 AmateurRadio.com, \u00e9crit depuis le Nouveau-Brunswick, Canada.  Contact : <a href=\"mailto:ve9kk@hotmail.com\">ve9kk@hotmail.com<\/a>.<\/p>\n<p>Info de la Source Publi\u00e9 <a href=\"https:\/\/www.amateurradio.com\/\" target=\"_blank\"><b><span style=\"color: #ff0000;\"> * ICI<\/span><\/b><\/a><\/p>\n<\/article>\n","protected":false},"excerpt":{"rendered":"<p>AmateurRadio.com Article traduite en Fran\u00e7ais via Google Translate Python et ce que j\u2019ai fait r\u00e9cemment Le 25 Novembre 2025 Python et ce que j\u2019ai fait r\u00e9cemment 24 novembre 2025 | par Mike VE9KK | Laisser un commentaire (0) Un extrait du script Python d\u2019arr\u00eat pendant les actions. Python et ce que j\u2019ai fait r\u00e9cemment\u2026 laissez-moi &hellip; <a href=\"http:\/\/www.on4cn.be\/blog_radio\/2025\/11\/25\/python-et-ce-que-jai-fait-recemment\/\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;Python et ce que j\u2019ai fait r\u00e9cemment&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35,24,25],"tags":[],"class_list":["post-22542","post","type-post","status-publish","format-standard","hentry","category-info","category-trafic-radio","category-trafic-radioamatuer"],"_links":{"self":[{"href":"http:\/\/www.on4cn.be\/blog_radio\/wp-json\/wp\/v2\/posts\/22542","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.on4cn.be\/blog_radio\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.on4cn.be\/blog_radio\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.on4cn.be\/blog_radio\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.on4cn.be\/blog_radio\/wp-json\/wp\/v2\/comments?post=22542"}],"version-history":[{"count":1,"href":"http:\/\/www.on4cn.be\/blog_radio\/wp-json\/wp\/v2\/posts\/22542\/revisions"}],"predecessor-version":[{"id":22543,"href":"http:\/\/www.on4cn.be\/blog_radio\/wp-json\/wp\/v2\/posts\/22542\/revisions\/22543"}],"wp:attachment":[{"href":"http:\/\/www.on4cn.be\/blog_radio\/wp-json\/wp\/v2\/media?parent=22542"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.on4cn.be\/blog_radio\/wp-json\/wp\/v2\/categories?post=22542"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.on4cn.be\/blog_radio\/wp-json\/wp\/v2\/tags?post=22542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}