By
enfin
Bonjour à tous,
Suite à une coupure électrique durant leurs dernières vacances, des amis ont perdu l'intégralité de leur congélateur.
Je me suis alors lancé dans la réalisation d'un script pour recevoir automatiquement un mail lorsque mon NAS est éteint, et donc lorsqu'il n'y a plus d’alimentation électrique!
Vous aurez besoin des éléments suivants:
1 QNAP
1 serveur distant sur lequel vous pourrez héberger le script PHP et qui doit permettre d'exécuter des tâches CRON (lancement d'un script de manière périodique)
Pero, j'utilise PHPNET.org qui propose ces fonctionnalités dans l'offre de base
1 abonnement chez freemobile si vous souhaitez également recevoir des SMS
Principe de fonctionnement:
Une tâche CRON, exécute de manière périodique (toutes les heures par exemple) le SCRIPT PHP stocké sur un serveur distant.
Si votre QNAP est OFF, vous recevrez un MAIL et un SMS.
Le SCRIPT PHP "TEST_QNAP_ON.php":
<?php
// TEST SERVEUR ON ou OFF
// https://openclassrooms.com/forum/sujet/voir-si-le-serveur-marche-ou-pas
// DÉCLARATION DES VARIABLES
$nom_serveur = "MON QNAP"; // Nom du QNAP
$serverhost = "qnap.no-ip.com"; // Adresse du QNAP
$port = "80"; // PORT du QNAP
$url_de_ce_fichier_php = "http://mon-site.fr/Test_QNAP_ON.php"; // URL vers CE fichier PHP
$mail = 'mail1@mail.com, mail2@mail.com'; // Déclaration de l'adresse ou DES de destination.
$from = '"Prénom NOM"<mail1@mail.com>'; // Déclaration de l'adresse d' expédition.
// VARIABLES pour SMS Free Mobile
$ENVOYER_SMS = 1; // Activer l'envoi d'un SMS Activé = 1 / Désactiver = 0
$sms_user = 'USER'; // USER du compte Free Mobile à utiliser (Activer l'option sur votre compte FreeMobile)
$sms_pass = 'PASS'; // Mot de Passe du compte Free Mobile
$sms_url = 'https://smsapi.free-mobile.fr/sendmsg?user='.$sms_user.'&pass='.$sms_pass.'&msg=';
// FIN DÉCLARATION DES VARIABLES
$check = @fsockopen ($serverhost, $port, $errno, $errstr, 1.0);
if (!$check) {
$color = "red"; // couleur rouge
$statut = "OFF"; // serveur OFFLINE
}
else {
$color = "#00CC00"; // couleur verte
$statut = "ON"; // serveur ONLINE
}
@fclose($check);
$texte_html = '<h1>'.$nom_serveur.' est <font color="'.$color.'"><b>'.$statut.'</b></font></h1><p><i> ['.date("d/m/Y - H:i:s").']</i></p><p> <a href='.$url_de_ce_fichier_php.'> >>> Relancer le Test</a> </p>';
$texte_sms = $nom_serveur.' est '.$statut.' ['.date("d/m/Y - H:i:s").'] '.$url_de_ce_fichier_php;
echo $texte_html;
?>
<?php
// https://openclassrooms.com/courses/e-mail-envoyer-un-e-mail-en-php
// $mail = ''; // Déclaration de l'adresse de destination.
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui rencontrent des bogues.
{
$passage_ligne = "\r\n";
}
else
{
$passage_ligne = "\n";
}
//=====Déclaration des messages au format texte et au format HTML.
$message_txt = $nom_serveur." est ".$statut;
$message_html = '<html><head></head><body>'.$texte_html.'</body></html>';
//==========
//=====Création de la boundary
$boundary = "-----=".md5(rand());
//==========
//=====Définition du sujet.
$sujet = $nom_serveur." est ".$statut;
//=========
//=====Création du header de l'e-mail.
$header = "From: ".$from.$passage_ligne;
$header .= "Reply-to: ".$from.$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header .= "X-Priority: 1".$passage_ligne;
$header.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//==========
//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout du message au format texte.
$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_txt.$passage_ligne;
//==========
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout du message au format HTML
$message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//==========
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
//==========
if ($statut == "OFF") {
//=====Envoi de l'e-mail si serveur OFF
mail($mail,$sujet,$message,$header);
//=====Envoi de le SMS si l'option est activée
if ($ENVOYER_SMS == 1) {
echo file_get_contents($sms_url.$texte_sms);
}
//==========
}
?>
Paramétrage et installation du SCRIPT PHP:
Modifier les variables du script ci-dessus (en bleu dans le code)
Enregistrer le SCRIPT sous le nom "TEST_QNAP_ON.php"
Envoyer votre script sur votre serveur distant à l'adresse paramétrée dans le script: http://mon-site.fr/Test_QNAP_ON.php
Paramétrer la Tâche CRON (dépend de votre hébergeur de site web)
Utilisation:
Lorsque vous exécutez le script http://mon-site.fr/Test_QNAP_ON.php , vous recevrez une alerte si le QNAP est OFF
Bonne utilisation !
En espérant que cela servira à plusieurs d'entre vous,
Laurent
Question
BMiot 0
Bonjour,
Je crois que tout est dans le titre ou presque,
Mon TS-219P est configuré pour envoyer des mails de notification (perte réseau, redémarrage inopiné, etc...)
Ca fonctionne, je recois bien les mails d'alerte...
Mais le corps du message est vide!
Ca fonctionnait bien avant...
Je viens de mettre à jour au dernier firmware mais pas mieux...
Des idées ?
Cdlt,
Bertrand.
Link to post
Share on other sites
4 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.