Archives de l’auteur : blog

Des trames MQTT avec Alexa

Vous vous êtes sans doute demandé comment on pouvait envoyer des trames MQTT avec Alexa et ainsi profiter de plus de fonctionnalités domotiques.
Commencez par installer le skill URL SWITCH sur votre Alexa :

Activez le skill depuis votre App Alexa puis rendez-vous sur https://www.virtualsmarthome.xyz/ pour venir créer vos interrupteurs, ces switches virtuels qui permettront d’interagir avec vos trames MQTT. Ici, nous avons créé volet salon, un switch destiné à télécommander l’ouverture et la fermeture des volets du salon :

Vous l’aurez compris, l’envoi d’une commande https suppose d’avoir un serveur hébergé, un p’tit VPS tout simple par exemple chez Pulsheberg que nous avons souvent utilisé pour nos dev, avec leur offre de base VPS Cloud à 5 ou 6 € par mois, largement suffisante pour héberger votre serveur Mosquitto, un certificat Let’s Encrypt et un Apache 2 pour vos pages de gestion Web en html ou php. Je passerai sur l’installation d’un serveur, d’Apache2 ou de PHP, c’est décrit un peu partout sur le web, la difficulté ne sera pas là 😉

Nous allons créer deux fichiers :

  • alexa.php pour faire l’appel vers un script python, hébergé sur /var/www/html de votre Apache 2
  • sendmessage.py, un script python hébergé sur /var/www/html/cgi-bin/sendmessage.py pour venir répondre aux commandes d’alexa.php et envoyer les trames MQTT

ALEXA.PHP :

<?php
// alexa.php

function sendMQTTMessage($topic, $message) {
    // On échappe chaque argument séparément pour éviter les injections shell
    $topicArg   = escapeshellarg($topic);
    $messageArg = escapeshellarg($message);

    $command = "python3 /var/www/html/cgi-bin/sendmessage.py $topicArg $messageArg";
    $output  = shell_exec($command);

    return $output;
}

// Récupération des paramètres depuis l’URL, par ex. :
// alexa.php?topic=maison/salon&message=allume+lampe
$topic   = isset($_GET['topic'])   ? $_GET['topic']   : '';
$message = isset($_GET['message']) ? $_GET['message'] : '';

// Un minimum de validation
if ($topic === '' || $message === '') {
    http_response_code(400);
    echo "Paramètres manquants. Utilisation : alexa.php?topic=xxx&message=yyy";
    exit;
}

// Appel du script Python
$result = sendMQTTMessage($topic, $message);

// Retour simple (à adapter selon tes besoins : JSON, texte, etc.)
header('Content-Type: text/plain; charset=utf-8');
echo "OK\n";
echo "Topic : $topic\n";
echo "Message : $message\n";
echo "Résultat Python :\n";
echo $result;

SENDMESSAGE.PY :

#!/usr/bin/env python3

import os
import sys

# Récupérer les arguments passés en ligne de commande
if len(sys.argv) != 3:
    print("Usage: python3 sendmessage.py <topic> <message>")
    sys.exit(1)

topic = sys.argv[1]
message = sys.argv[2]

# Configuration du broker MQTT
broker = "ip_du_serveur_MQTT"
port = 1883
username = "ton_nom_utilisateur"
password = "ton_mot_de_passe"

# Indiquer que le contenu est du texte brut (facultatif)
print()  # Ligne vide nécessaire

# Commande pour publier le message MQTT
command = f"mosquitto_pub -h {broker} -p {port} -u {username} -P {password} -t {topic} -m '{message}' -r"

# Exécuter la commande
exit_code = os.system(command)

if exit_code == 0:
    print("")
else:
    print("Erreur lors de l'envoi de la trame.")

Pas compliqué, si ?
Pensez à bien ajouter une mise à jour de votre certificat SSL par contre, dans crontab :

0 3 * * * root certbot renew --quiet

Pour protéger votre serveur Web, pensez à ajouter un .htaccess adapté… Vous pourrez alors par exemple envoyer une requête https comme suit :

https://login_htaccess:motdepasse_htaccess@iot.monserveurmqtt.fr/alexa.php?topic=/salon/volet&message=1

pour ouvrir et :

https://login_htaccess:motdepasse_htaccess@iot.monserveurmqtt.fr/alexa.php?topic=/salon/volet&message=1

pour fermer. Le login_htaccess et son mot de passe positionnés au début, suivis par @ permettent de contourner la fenêtre d’authentification du serveur web.

Mais vous pouvez tout à fait désactiver le .htaccess pour le simple fichier alexa.php, avec tous les risques que cela comporte bien entendu, en modifiant .htaccess :

 ===== Désactiver l'auth Basic pour alexa.php =====
# Auth sur tout sauf alexa.php
<FilesMatch "^(?!alexa\.php$).*">
    AuthUserFile /var/www/.htpasswd
    AuthType Basic
    AuthName "My restricted Area"
    Require valid-user
</FilesMatch>

# ===== Redirection HTTPS pour tout sauf alexa.php =====
RewriteEngine On

# EXCLURE alexa.php des redirections
RewriteCond %{REQUEST_URI} !^/alexa\.php$

# Pour tous les autres fichiers : forcer HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Protégez-vous des pubs intrusives en utilisant le DNS

Il est fort probable que vous soyez inondé par un flux incessant de publicités numériques chaque jour. Loin d’être une simple nuisance, cette omniprésence publicitaire représente un risque tangible pour votre sécurité. Une seule publicité malveillante peut suffire à installer un cheval de Troie, un logiciel espion ou même un rançongiciel sur tous vos équipements : ordinateurs, smartphones, tablettes, et même votre Smart TV.

Vous avez peut-être déjà eu recours à des extensions de navigateur performantes, comme uBlock Origin. Cependant, l’utilisation d’une extension nécessite une installation répétée sur chacun de vos appareils connectés. C’est un véritable défi, voire impossible, sur des équipements comme les téléviseurs intelligents ou les navigateurs mobiles qui ne supportent pas ces modules additionnels. Alors, comment assurer une défense cohérente et globale ?

La réponse est de prendre le contrôle de votre réseau domestique à sa source. En agissant au niveau de votre réseau local, vous pouvez bloquer les contenus indésirables avant qu’ils n’atteignent vos appareils. Voici comment procéder.

DNS icon in iOS 17 Outlined style

Votre routeur : la porte d’entrée de la protection

La majorité des réseaux domestiques fonctionnent selon un schéma simple : votre routeur utilise le protocole DHCP (Dynamic Host Configuration Protocol) pour assigner une adresse IP unique à chaque appareil. Il leur transmet également les adresses des serveurs DNS. Dans la plupart des cas, ces serveurs sont ceux par défaut de votre Fournisseur d’Accès Internet (FAI), et ils offrent rarement des fonctionnalités avancées de sécurité ou de confidentialité.

L’astuce consiste à ignorer les serveurs DNS de votre FAI et à configurer votre routeur pour qu’il utilise des serveurs DNS spécialisés dans le blocage de publicités.

Comment configurer un DNS anti-pubs sur votre routeur :

C’est la méthode la plus simple et la plus efficace pour sécuriser votre foyer.

  1. Identifiez l’interface d’administration : accédez à l’interface de gestion de votre routeur. Cela se fait généralement en tapant une adresse comme 192.168.1.1 ou 192.168.1.254 dans la barre d’adresse de votre navigateur.
  2. Localisez les réglages DNS : Naviguez jusqu’à la section des paramètres réseau (souvent appelée WAN, Internet ou DHCP).
  3. Remplacez les adresses : Saisissez les adresses IP d’un service DNS qui filtre activement les publicités et les traqueurs.

Plusieurs services de qualité proposent ces serveurs filtrants :

ServiceAdresses IP du Serveur Filtrant (Primaire / Secondaire)
AdGuard DNS94.140.14.14 et 94.140.15.15
NextDNS45.90.28.152 et 45.90.30.152
ControlD76.76.2.2 et 76.76.10.2
  • Exemple avec NextDNS : Vous entrerez 45.90.28.152 dans le champ DNS Primaire et 45.90.30.152 dans le champ DNS Secondaire de votre routeur.

Important : une fois ces nouvelles adresses configurées, vérifiez que tous vos appareils sont réglés pour obtenir leurs paramètres (y compris les serveurs DNS) automatiquement via le protocole DHCP. De cette manière, le routeur distribuera les adresses des serveurs de blocage à tous les utilisateurs.

Cette méthode s’applique sans soucis sur les hotspots Wifipak, protégeant le réseau WiFi de vos invités/clients.

L’alternative : configuration par appareil

Si vous êtes limité par votre routeur (votre FAI vous empêchant d’en modifier les réglages DNS), vous pouvez contourner le problème en effectuant la configuration manuellement sur chaque terminal. Il vous suffit alors de configurer l’un des ensembles de serveurs DNS mentionnés ci-dessus dans les paramètres réseau (Wi-Fi ou Ethernet) de votre ordinateur, de votre téléphone ou de votre tablette.

Vous trouverez également des routeurs destinés à se connecter à votre Box internet, tel ce routeur « Liberté » proposé pré-configuré chez Monwifi.fr.

En adoptant cette approche centralisée, vous transformez votre serveur DNS en un puissant bouclier pour l’intégralité de votre domicile, assurant une navigation plus rapide, plus propre et surtout plus sûre.

Boulanger pompe vos données, et il n’est pas le seul…

Peut-être avez vous déjà commandé en ligne chez Boulanger, grande enseigne d’électroménager française, oh combien compétente, sauf peut-être sur un détail : la capture discrète de vos données !

Vous allez vous faire livrer, puis vous recevrez un email demandant ce que vous avez pensé de la livraison :

Déjà, noter des humains, je n’aime pas ça, et pourtant tous le font, Chronopost en tête qui demande quel était l’état du camion, etc. Bref, passons… Mais c’est sur la seconde page que le gag arrive :

Là, stupéfaction, en quoi Boulanger, après m’avoir livré un frigo par exemple, peut-il s’intéresser à mon boulot, savoir si je suis homme/femme ou une célèbre chanteur-teuse, « paillasson genré grille-pain » ? A quoi bon savoir si je suis en appart ou maison, si je lou ou non, bref, quel intérêt pour un frigo ?

Eh bien figurez-vous que nombre d’enseignes jouent à ce jeu là, complètent leurs données, les fameuses DATA pour speaker l’angliche, ces données qui permettent, à force de croisements et de recoupements, de constituer une fiche précise de vous, Mme MICHU de Bêzons les Glamouilles, ou vous M. FLAMBYMOU de Tulle : et avec cette fiche, revendue en masse par nombre d’exploitants, on peut ainsi vous cibler le mieux possible :

Vous êtes une femme, en appart, 70 ans, allez zou, récupérons le fichier de Rance 3 et proposons des douches avec sièges, des protections anti-fuites. Vous avez une maison ? On va rajouter les monte-escaliers Nanard pour vous éviter trop d’effort pour rejoindre l’étage !! Vous êtes un mec de 75 ans ? Ajoutons MolleProstate pour revivifier votre MMS : le Matin / Midi / Soir s’est depuis transformé en Mars / Mai / Septembre, il est temps de faire quelque chose !! 🙂

Tu es un jeune post-ado de 35 ans ? En couple ? 3 enfants ? un break ? un chien ? une maison ? Waouuuh, jackpot !!! Tu vas avoir droit aux croquettes pour toutou, aux séjours en village-club-vacances avec garde chieurs gratos, à des offres dingues sur les véhicules PeuGel et leurs célèbres moteurs PureM…de (faut bien écouler les stocks !!!), des abonnements à 50% sur Tain-d’or, et j’en passe.

Tout ceci est ironique, mais c’est bien réel, n’imaginez pas une seule seconde que ces enseignes là cherchent à « mieux vous connaitre »… Perso, j’aurais tendance à leur facturer mes données, puisqu’elles sont ensuite utilisées pour faire du fric, et vous ?

Hotspot et caméras ?

Et si vous profitiez d’avoir un hotspot WiFi, avec un enregistreur de connexions qui fonctionne sous linux, pour venir y installer un serveur Web et mettre à disposition de vos utilisateurs les clichés instantanés d’une ou plusieurs vues des caméras IP de votre établissement ?

C’est ce qui motive le projet de Monwifi actuellement en version Beta, avec une interface d’administration pour ajouter et supprimer les caméras :

et une interface de visualisation destinée à vos utilisateurs et clients :

Ici nous avons choisi de capturer le flux de 3 caméras en montage, dont celle de Chamonix, excusez nous du peu 😉
Si vous cliquez sur une image, un onglet s’ouvre et elle s’affiche en pleine résolution, permettant aisément de zoomer. Cette page fonctionne sur PC, smartphone, ou tablette, bien entendu.

Imaginons maintenant que vous exploitiez un établissement avec une piscine : les utilisateurs de votre hotspot wifipak vont pouvoir visualiser en temps semi-réel l’occupation du bassin, je dis bien semi-réel car il n’est pas question d’être intrusif et de diffuser un flux vidéo, uniquement d’afficher un snapshot, c’est à dire une capture d’écran à un instant t.
De même, une caméra IP sur un parcours de golf, sur une terrasse de restaurant, sur une plage privée vous offriront la même possibilité : on y va ? on n’y va pas ? Trop de monde ? Y’a personne ?!
Mais on peut également imaginer visualiser une aire de jeux pour voir que le p’tit dernier s’amuse bien, sans risques.

Revenons à l’administration de ces captures, peut-être avez-vous remarqué ce détail :

RTSP ? Oui, rtsp, ce protocole sur pratiquement toutes les caméras IP qui permet de visualiser le flux vidéo. Toutes les caméras ne font hélas pas de snapshot, à l’instar des TP-Link TAPO : il faut dans ce cas pouvoir capturer le flux vidéo et en extraire une image à un instant donné, lors de cette rapide capture, avant de l’afficher.

Vous aurez ainsi le choix de plusieurs modèles de caméras, soit avec un flux RTSP, soit avec une capacité de snapshot. Nous avons pour le moment testé les caméras Ubiquiti, après avoir activé le snapshot dans l’interface d’administration de chaque caméra. Les caméras TAPO TP-Link refusent elle systématiquement la capture rtsp, aussi avons nous décidé de tester un matériel Imou :

Affaire à suivre… nous allons rapidement découvrir si ce matériel nous offrira toutes les fonctionnalités attendues, car à ce tarif (< 50 €), il ne manque pas de qualités 😉

Evolution des fonctionnalités :

Comment faire évoluer l’interface ? Cela va dépendre des idées de nos clients, il faudra dans un premier temps tester un prototype, voir si le retour des clients est positif, découvrir quels aspects nous devrons faire évoluer surtout.

Déjà, nous imaginons pouvoir ajouter l’envoi d’une image vers un serveur Web, pour par exemple afficher une vue en temps réel de la plage en face de votre établissement, l’enneigement des pistes de la station, une ligne d’horizon sur les montagnes voisines, ou tout paysage que vous voudrez bien proposer à vos visiteurs internet : un lien sur la caméra, un serveur ftp avec un login et un mot de passe, des heures de fonctionnement en fonction du lever du jour sur un lieu donné, et une fréquence d’actualisation. Simple non ?

L’IA, outil de taille :

Inutile de vous le cacher, nous avons utilisé plusieurs IA pour générer ces interfaces, avec en tête ChatGPT et MistralAI. Nous avons rapidement oublié Gemini par Google car à chaque correction, seule une partie des codes était affichée, nécessitant de redemander sans cesse l’envoi du code entier pour ne pas perdre de temps : en vain, l’intelligence est absente de Gemini pour ce qui concerne le code informatique, il vaut mieux l’utiliser pour trouver des recettes de cuisine ou demander l’âge avancé de Flamby Mou 1er, ex-Mouzident sociamou de la France ;-))))

Ces outils sont fabuleux, rapides surtout, mais en aucun cas ne remplacent totalement, pour le moment, notre capacité d’analyse et de programmation. Nous les avons éduqués, orientés, modifiés à la main souvent. Cela reste des outils, mais ne nous voilons pas la face, ils sont fabuleusement utiles !

Conclusion :

Si le projet vous intéresse, si vous utilisez ou voudriez utiliser un hotspot Wifipak, n’hésitez pas à nous faire signe sur Monwifi.fr pour devenir Beta-testeur dès que le projet sera un peu plus avancé.
A terme il pourrait bien s’ouvrir à d’autres matériels hotspot en ne s’utilisant que comme serveur Web et serveur de capture d’images, qui sait…

ChatGPT, l’outil du fainéant ?

Vous aussi vous avez sans doute déjà réinstallé un ordinateur, suite à un plantage logiciel ou matériel. Ici, pas de Winchose, pas de Winbug, et encore moins de Windose, non, que du stable, du fiable, du Linux, en général sous Kubuntu, largement exploitable pour le travail de tous les jours, voir pour surfer sainement à la maison.

Sauf que parfois il faut réinstaller, oh pas aussi souvent que les trucs de Microchose, mais ça arrive, soyons réalistes. Alors même si nous savons manier les commandes apt install pour tout remettre en état, l’idée d’un script s’est imposée lentement :

Pas mal non ? Le serveur Apache2 est utilisé pour des pages PHP liées au serveur domotique, Mosquitto va générer des flux MQTT pour certains appareils, Transmission pour d’éventuels Torrent (les distri Linux en utilisent beaucoup), TeamViewer pour dépanner les PC de clients, d’amis, ou de la famille, WireGuard pour des usages déportés, Thunderbird pour la messagerie, Brave pour éviter les pubs toxiques en surfant, etc.

Le script généré par ChatGPT a bien entendu été lu, contrôlé, modifié, et soumis de nouveau à l’IA : l’IA est un outil, ce n’est pas LE faiseur de scripts, juste un outil qui va vous pondre des lignes de codes en quelques secondes. Il va récupérer les configurations importantes depuis un disque SATA externe, disque servant juste de backup, un peu comme une Time Capsule chez la Pomme : config Wireguard, fichiers html et php, scripts CGI pour Apache2, etc.

C’est plutôt propre non cette copie d’écran ? ChatGPT commente, argumente, explique, sans qu’il ne soit utile de lui demander.

Et à la fin il vérifie que tout est bien actif, installé :

Et vous, vous aussi vous utilisez ChatGPT ? Quels sont vos usages avec des scripts ou du code ?

RouterOS : calculez le volume de données mensuel !

Vous utilisez RouterOS 7 ou ultérieur sur un appareil Mikrotik pour votre réseau ? Voici un script qui va pouvoir calculer le trafic mensuel passant sur le port WAN, ether1 en général. Vous aurez, au préalable, configuré l’envoi d’email dans votre RouterOS et remplacé les emails de destination (emailTo) et d’émission (emailFrom) par vos propres emails :

# --- Configuration ---
:local interfaceName "ether1"
:local emailTo "tonemail@gmail.com"
:local emailSubject "RAPPORT MENSUEL: Trafic ether1 (Go)"
:local emailFrom "noreply@tonemail.fr"

:put "--- SCRIPT DE TRAFIC (DÉMARRAGE) ---"

# --- 1. Vérification de l'interface ---
:local ifName [/interface get [find name=$interfaceName] name]
:if ($ifName = "") do={
    :put "ERREUR: Interface $interfaceName non trouvée"
    :error "Interface non trouvée"
}
:put "Interface trouvée: $ifName"

# --- 2. Lecture brute des compteurs (forcée en nombre) ---
:local rxBytes [:tonum [/interface get [find where name=$ifName] rx-byte]]
:local txBytes [:tonum [/interface get [find where name=$ifName] tx-byte]]
:local totalBytes ($rxBytes + $txBytes)

:put "Données lues - Total: $totalBytes octets"

# --- 3. Conversion en Go (base 10) ---
:local rxGB ($rxBytes / 1000000000)
:local txGB ($txBytes / 1000000000)
:local totalGB ($totalBytes / 1000000000)

# --- 4. Formatage à 2 décimales ---
:local rxGBstr [:pick [:tostr $rxGB] 0 ([:find [:tostr $rxGB] "."] + 3)]
:local txGBstr [:pick [:tostr $txGB] 0 ([:find [:tostr $txGB] "."] + 3)]
:local totalGBstr [:pick [:tostr $totalGB] 0 ([:find [:tostr $totalGB] "."] + 3)]

:put "Conversions effectuées: $totalGBstr Go"

# --- 5. Construction du mail ---
:local today [/system clock get date]

:local body "RAPPORT MENSUEL DE TRAFIC\n\n"
:set body ($body . "Interface: $ifName\n")
:set body ($body . "Période: 30 jours jusqu'au $today\n\n")
:set body ($body . "TRAFFIC CUMULÉ:\n")
:set body ($body . " $totalGBstr Go\n")

:set body ($body . "Compteurs réinitialisés pour le prochain cycle.")

:put "Corps email généré"

# --- 6. Réinitialisation éventuelle ---
/interface reset-counters $ifName
:put "Compteurs réinitialisés"

# --- 7. Envoi du mail ---
/tool e-mail send to=$emailTo from=$emailFrom subject=$emailSubject body=$body
:put "Email envoyé"

:put "--- SCRIPT TERMINÉ ---"

Ce script a été initialement généra par ChatGPT, modifié manuellement, corrigé, et vous enverra tous les 30 jours un email avec le volume total de trafic généré sur cette période.

RouterOS : gestion du ping et alerte

Comment surveiller une IP sur votre routeur RouterOS 7.xx ? Un simple script, ping, se chargera de vous prévenir par email (à condition d’avoir configuré votre envoi d’email dans /tools/e-mail, cf plus bas dans ce billet.

Voici déjà le script qui va tester 3 fois l’adresse 192.168.1.21, et en cas de non-réponse envoyer un email aux deux destinataires, recipient et recipient1 mentionnés dans le script :

    :local targetIP "192.168.1.21";
    :local recipient "monemail@chezmoi.fr ";
    :local recipient1 "secondemail@chezlui.fr";
    :local subjectFail ("ALERTE PING HS ");
    :local bodyFail ("Email automatisé pour vous indiquer que le module ne répond plus. \r\nMerci de bien vouloir vérifier le branchement ethernet et l'alimentation. \r\nVous pouvez le  débrancher, et le rebrancher. \r\nSi l'alerte persiste, merci de contacter votre prestataire.\r\n\r\n
*** Ceci est un message automatisé, ne pas répondre ****");
    :local logMessage ("Test ping vers " . $targetIP);
    :local success 0
    :for i from=1 to=3 do={
        :if ([/ping $targetIP count=1] = 1) do={
            :set success ($success + 1)
        }
    }
    :if ($success = 0) do={
        /tool e-mail send to=$recipient subject=$subjectFail body=$bodyFail
        /tool e-mail send to=$recipient1 subject=$subjectFail body=$bodyFail
    }

Pour ce qui est de la configuration de l’email dans /tools/e-mail :

        server: mail.monserveur.fr        
          port: 465                    
           tls: yes                    
           vrf: main                   
          from: noreply@chezmoi.fr     
          user: alerte@monserveur.fr
      password: LePenEstNulle;;    

Ici, nous avons créé un email alerte@monserveur.fr pour pouvoir expédier. L’envoi se fait sur mail.monserveur.fr mais cela changera selon votre configuration : smtp, imap, etc. tout est possible, pensez à modifier les paramètres.

Vous n’avez désormais plus qu’à exécuter le script ping toutes les 12 heures par exemple :

/system scheduler add name=ping-schedule \
    interval=12h \
    on-event=ping \
    start-time=startup

Et voilà, en cas de coupure vous recevrez une alerte email sur les 2 emails pré-configurés.
Pratique non ?

Effaroucheur à oiseaux sur Raspberry Pi

La saison de la chasse à neuneus est de retour, voici venu le temps de tir dans les champs, la chasse à ces dangereux volatiles, les pigeons par exemple, une espèce sauvagement invasive qu’il ne faut surtout pas hésiter à détruite jusqu’au bout 😉

Si vous aussi les nuisances sonores de ces intellectuels à fusils vous brouillent l’écoute, voici une solution basée sur un simple Raspberry Pi en python 3 :

import pygame
import time
import random
import paho.mqtt.client as mqtt
from datetime import datetime

# Initialisation du mixer de pygame
pygame.mixer.init()

# Liste des fichiers audio
audio_files = ["faucon.mp3", "aigle.mp3", "buse.mp3"]

# Variables de contrôle
mqtt_broker = "iot.tonserveur.fr"
mqtt_port = 1883
mqtt_topic = "/raspibuse"
mqtt_username = "ton_login"
mqtt_password = "ton_mot_de_passe"

# État du script (activé/désactivé)
script_active = False

# Jouer le son de démarrage une seule fois
def jouer_son_demarrage():
    print("🎵 Lecture du son de démarrage : buse.mp3")
    pygame.mixer.music.load("buse.mp3")
    pygame.mixer.music.play()

# Fonction de lecture audio
def jouer_audio():
    global script_active

    while True:
        if script_active:
            fichier_audio = random.choice(audio_files)
            pygame.mixer.music.load(fichier_audio)
            print(f"Lecture de : {fichier_audio}")

            pygame.mixer.music.play()

            while pygame.mixer.music.get_busy():
                pygame.time.Clock().tick(10)

            print("Lecture terminée à :", datetime.now().strftime("%H:%M:%S"))

            # Pause aléatoire entre 20 et 120 secondes
            pause = random.randint(20, 120)
            print(f"Pause de {pause} secondes...\n")
            time.sleep(pause)
        else:
            time.sleep(1)

# Callback de connexion MQTT
def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("✅ Connexion MQTT réussie")
        client.subscribe(mqtt_topic)
    else:
        print(f"⚠ Échec de la connexion MQTT, code {rc}")

# Callback de réception d'un message MQTT
def on_message(client, userdata, msg):
    global script_active

    message = msg.payload.decode("utf-8").strip()
    print(f"📩 Message reçu: {message}")

    if message.upper() == "ON":
        script_active = True
        print("🔊 Activation du script")
    elif message.upper() == "OFF":
        script_active = False
        pygame.mixer.music.stop()
        print("🔇 Désactivation du script")

# Jouer le son de d  marrage
jouer_son_demarrage()

# Configuration du client MQTT
client = mqtt.Client()
client.username_pw_set(mqtt_username, mqtt_password)
client.on_connect = on_connect
client.on_message = on_message

# Connexion au broker MQTT
client.connect(mqtt_broker, mqtt_port, 60)
client.loop_start()

# Démarrage du script
jouer_audio()

Le script va lancer au choix 3 sons : faucon (pas ceux avec les fusils qui sont des vrais, ne confondez pas), buse, et aigle. Vous pouvez choisir une pause entre 20 et 120 secondes, aléatoire.

Venez ajouter sur la sortie audio du Pi un amplificateur audio à moins de 40 € sur Amazon :

et associez le à un haut-parleur étanche et directif, toujours sur Amazon, dans les 20 € :

Bonne nouvelle, vous allez pouvoir activer l’effaroucheur via un serveur MQTT, cf le script, en envoyant /raspibuse ON ou OFF selon vos besoins. Pratique pour l’activer à distance si besoin.

Je ne détaille volontairement pas l’installation des librairies Python et tous les détails, au besoin Google ou ChatGPT pourront vous aider sur les commandes à utiliser.

Porno, pub, popup : soyez BRAVE !

Dans ce monde globalisé, vous n’avez pas manqué de remarquer les restrictions toujours plus sournoises, les publicités toujours plus déguisées sur vos écrans d’ordinateurs. Parfois on vous dit que c’est pour votre bien, tel le blocage des sites pornos nécessitant de transmettre vos documents d’identité à des prestataires souvent inconnus et d’une fiabilité douteuse… Qui voudra s’exciter ainsi, la carte d’identité à la main, oubliant le code d’accès pour 5 mn de fun ? 🙂

Plus sérieusement, qui n’est pas allé sur un site que je ne citerai pas, un coin qui est bon, pour chercher à revendre ou acheter des produits d’occasion ? Avez-vous déjà tenté d’utiliser l’application mobile sur ce super « bonsite » ? Eh oui, bourrée de pubs alors que vous cherchez simplement à surfer, des pubs partout qui surgissent sans prévenir, dégradant par la même occasion l’expérience utilisateur. Et c’est le cas avec pas mal d’App de sites bien connus, des Apps qui vont se contenter de venir récupérer le contenu du site Web des enseignes, et de venir vous forcer à visionner des pubs à la con, disons le clairement.

La solution ? Le navigateur Brave !

Peu connu des utilisateurs de base, Brave apporte pourtant une solution propre à la navigation, avec son bouclier anti-pubs.

Un exemple avec un site très utilisé en France :

Le simple fait d’afficher le site, ce sont 35 pubs et traqueurs bloqués, TRENTE CINQ, juste pour avoir ouvert la page du site sur Brave, TRENTE CINQ !!! Et plus vous allez surfer, plus le nombre va grimper, grimper.

Mais avec Brave, stop, terminé, plus d’affichage de ces pubs qui vous pourrissent la vie et la vue lors de vos lectures d’un site, votre navigation redevient fluide, simple, sans popups partout : la paix, le calme !!

Et puis s’il vous faut aller sur des sites plus « excitants » bloqués dans votre pays, utilisez la navigation privée Tor sur Brave :

Une nouvelle fenêtre s’ouvre, patientez jusqu’à l’affichage du message « Tor connecté avec succès » et surfez, en liberté, de façon sécurisée.

 

 

 

 

FSD : le mauvais choix de Tesla ?

Si vous appréciez les voitures électriques et attendez avec une certaine impatience la conduite totalement autonome ou supervisée, sachez tout de même raison garder, sous peine de vous classer illico-presto parmi les fanboys de St Musk, le génie facho visionnaire que nous connaissons tous et sa multitude d’influ-suceurs sur Twitter chargés de propager la sainte parole du grand gourou 😉

Selon St Musk, une voiture avec de simples caméras offre un choix largement supérieur aux concurrents ayant décidé d’utiliser les LIDARs, ces petits radars un brin plus coûteux, capables toutefois de visualiser l’environnement sur plusieurs centaines de mètres.

A contrario, la bête caméra sera rapidement stoppée en cas de pluie forte, de luminosité mal dirigée ou mal traitée, de brume ! Imaginez donc un avion se poser avec le seul regard, sans utiliser les autres aides de radionavigation, les capteurs de sol, le radar d’approche : personne ne voudrait monter dedans, personne n’irait construire une telle stupidité, et pourtant, dans le monde merveilleux des voitures, St Musk nous dit tout le contraire.

Qu’il ait raison ou pas, peu importe, mais il reste un autre problème : faire payer 8000 € pour une option qui devrait un jour peut-être arriver en Europe, dès que nos instances frileuses auront décidé de sauter le pas pour une conduite autonome. Et là, une telle somme face à des concurrents chinois, Xpeng en tête, ne passera pas :

Image

Chez Xpeng, leur conduite XPILOT est déjà intégrée aux véhicules, ce n’est pas une option juteuse, c’est déjà dedans, prêt à fonctionner une fois les lois européennes modifiées !

De ce fait, qui ira payer chez T€$la le prix fort ? QUI ? Déjà que l’image de la marque, oh combien géniale et fabuleuse, a été fortement écornée par les débilités politiciennes de St Musk, que restera-t-il alors comme attrait face aux concurrents chinois, équipés de Lidar et de vision par caméras ? Oui car les chinois eux arrivent à fonctionner avec les 2 systèmes, ils arrivent à décider lequel des 2 fonctionne, ils arrivent à tout gérer, et c’est bien là le drame pour St Musk qui tient encore des propos à côté de la plaque.

Lisez l’article très détaillé sur ce blog, il vous donnera sans doute une idée plus précises des tenants et aboutissants, des mensonges et délires du grand gourou.