Aller au contenu

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'nas'.



Plus d’options de recherche

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Bienvenue
    • Nouveau ? Présentez-vous
    • Le bistrot
    • Mon installation domotique
    • Annonces et suggestions
  • La Home Center et ses périphériques
    • La Home Center pour les nuls
    • HC 2 & Lite
    • HC 3
    • Modules Fibaro
    • Modules Z-wave
    • Périphériques et matériels autres
    • Plugins
    • Quick App
    • Multimédia (audio, vidéo ...)
    • Chauffage et Energie
    • Actionneurs & Ouvrants (Portail, volets, piscines, ...)
    • Eclairage
    • Applications Smartphones et Tablettes
  • Autres solutions domotiques
    • Box / Logiciel
    • Modules Nice (433 & 866 MHz)
    • Modules Zigbee
    • GCE Electronics
    • Modules Bluetooth Low Energy
  • Objets connectés
    • Les Assistants Vocaux
    • Netatmo
    • Philips Hue
    • DIY (Do It Yoursel)
  • Sécurité
    • Alarmes
    • Caméras
    • Portiers
    • Serrures
  • Informatique / Réseau
    • Tutoriels
    • Matériels Réseaux
    • Matériels Informatique
    • NAS
    • Virtualisation
  • Les bonnes affaires
    • Sites internet
    • Petites annonces

Rechercher les résultats dans…

Rechercher les résultats qui…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


Jabber


Skype


Ville :


Intéret :


Version

10 résultats trouvés

  1. Sauvegarde Home Center 3 sur NAS Synology Version 3.22 - Janvier 2024 Voici un script Shell à installer sur un NAS Synology, permettant d'automatiser la sauvegarde de la box Home Center 3. La sauvegarde est externalisée et stockée sur le NAS. Un rapport par email est envoyé, ainsi qu'une notification dans l'interface Web de DSM. Installation Télécharger le fichier backup-hc3.sh ci-joint, et le copier sur le NAS. Modifier le script afin de paramétrer les options suivantes : HC3 Address HC3_ADDRESS : Adresse IP de la HC3. Par exemple "192.168.1.1" HC3 Authentication : echo -n 'user:password' | base64 ou https://www.base64encode.org/ HC3_AUTHENTICATION : Identifiants de connexions encodés en base64. Utiliser le site https://www.base64encode.org/ par exemple pour admin:password cela donne "YWRtaW46cGFzc3dvcmQ=". L'utilisateur doit avoir les droits "Administrateur" sur la box. HC3 Backup History HC3_BACKUP_HISTORY : doit prendre la valeur "YES" afin de sauvegarder l'historique. Si la sauvegarde est trop longue ou trop grosse, il est possible de désactiver la sauvegarde de l'historique en attribuant n'importe quelle autre valeur à cette variable, par exemple "NO". HC3 Global Variable HC3_VARIABLE_NAME : nom d'une variable à tester pour bloquer le déclenchement de la sauvegarde, par exemple "Vacances" HC3_VARIABLE_IS_VALUE : valeur que doit avoir la variable éventuellement définie pour déclencher la sauvegarde, par exemple "0" HC3 Active Profile (on peut filtrer sur aucun profil, 1 seul, ou les 2, dans ce dernier cas c'est un ET logique qui est effectué, c'est à dire que les 2 conditions doivent être vraies) : HC3_PROFIL_IS_VALUE : ID du profil actif permettant de déclencher la sauvegarde. Si le profil actif est égal à cette valeur, alors la sauvegarde est démarrée. HC3_PROFIL_NOT_VALUE : ID du profil qui ne doit pas être actif pour déclencher la sauvegarde. Si le profil actif est égal à cette valeur, alors la sauvegarde est bloquée. NAS NAS_PATH : chemin complet sur le NAS dans lequel copier le fichier sauvegarder, normalement il s'agit du même répertoire qui contient le script, par exemple "/volume1/backup/HC3" Email MAIL_FROM : adresse email source, par exemple : "HC3 <moi@domaine.com>" MAIL_TO : adresse email cible, par exemple "Moi <moi@domaine.com>" MAIL_SUBJECT : titre de l'email, par exemple "Backup HC3" Notification NOTIF_TO : destinataire des notifications sur le NAS, par exemple "@administrators" NOTIF_TITLE : titre de la notification, par exemple "Sauvegarde" Backup timeout TIMEOUT : durée maximale en secondes de la sauvegarde autorisée avant que le script ne considère que la box est plantée, par exemple pour 10 minutes : 600 Reboot CLEAN_REBOOT : focer un reboot complet de la box après chaque sauvegarde, valeur par défaut "No" FORCE_REBOOT : forcer le reboto de la box si les services n'ont pas correctement redémarrés après la sauvegarde, valeur par défaut "Yes" Sur l'interface Web de DSM, ouvrir le Panneau de configuration, sélectionner le Planificateur de tâches, puis Créer / Tâche planifiée / Script défini par l'utilisateur : Dans l'onglet "Général", taper un nom de tâche et utiliser le compte "admin" : Dans l'onglet "Programmer", sélectionner un jour et une heure, par exemple chaque dimanche à 3h du matin : Dans l'onglet "Paramèters de la tâche", entrer l'adresse email destinataire des rapports, et la commande suivante pour exécuter le script (remplacer éventuellement le chemin s'il est différent chez vous) : set -o pipefail; "/volume1/backup/HC3/backup-hc3.sh" 2>&1 | tee -a "/volume1/backup/HC3/backup-hc3.out" Utilisation Attendre... Lorsque la planification se déclenche, un email est envoyé : Une notification apparait dans l'interface Web de DSM : Un nouveau fichier fbi contenant la sauvegarde (chiffrée) est présent sur le NAS, ainsi qu'un fichier journal backup-hc3.out : Exécution immédiate : Si on est impatient et qu'on veut tester immédiatement le script, le plus efficace est d'ouvrir une session SSH en ligne de commande (utiliser PuTTY sous Windows) et de l'exécuter directement : admin@DiskStation:~$ /volume1/backup/HC3/backup-hc3.sh Backup Fibaro Home Center : Saturday 11/07/2020 19:10:03 Vérification de la valeur de la variable globale 'Vacances'... Variable globale 'Vacances' = '0' identique à '0' => Sauvegarde Vérification du profil actif... Profil actif = '1' => Sauvegarde Sauvegarde avec historique... ........................................................................... Sauvegarde terminée Téléchargement de backup_HC3-00000000_2020_07_11-19_10_28.fbi... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 794k 100 794k 0 0 8028k 0 --:--:-- --:--:-- --:--:-- 8108k Téléchargement terminé Pas de reboot du Home Center Backup terminé avec succès : Saturday 11/07/2020 19:12:02 (penser à activer préalablement le serveur SSH dans le panneau de configuration de DSM si ce n'est pas déjà fait) Téléchargement : backup-hc3.sh Bonus : script pour HC2 & HCL : backup-hc2.sh Pour HC2 à partir du firmware 4.621 : voir script de @speedoxx007 en page 4.
  2. Installation et configuration d'un microserveur HP GEN8 Je remercie @Krikroff, @lazer et @jojo pour leurs aides Documentation complète Microserveur GEN8 http://h20628.www2.hp.com/km-ext/kmcsdirect/emr_na-c03796560-5.pdf Processeur Dual-Core: - Intel Celeron G1610T (2 core, 2.3 GHz, 2MB, 35W) Chipset: Intel C204 Chipset Carte Graphique: Matrox G200 ( max : 1280 x 1024 @32 bpp ou 1920 x 1200 @16 bpp ) Memoire RAM: 2x DIMM slots DDR3 ( ECC pris en charge ) - Standard 2GB (1 x 2GB) PC3-12800E DDR3 UDIMM - Maximum 16GB (2 x 8GB) PC3-12800E DDR3 UDIMM Contrôleurs de stockage: - HP Dynamic Smart Array B120i Controller for RAID 0/1/10 Support stockage internes: - 4 Emplacements 3.5" HDD internes, Capacité maximum de stockage 4 Disques dur 3.5” ( SATA3 sur les baies 1 & 2, le reste en SATA2 ) - 1 Emplacement pour lecteur optique 5,25" (Format SLIM) - 1 Port sata 3 Carte réseaux & Management iLO: - HP Ethernet 1Gb 2-port 332i Adapter ( NC332i Broadcom BCM5720 ) - HP iLO 4 ( 16 MB Flash - 256 MB DDR 3 with ECC (112 MB after ECC and video) ) Slots d'extensions: Internes : - Slot 1: PCI-Express Gen 2 x16 (Low Profile) - Lecteur de carte MicroSD - 1 Port USB 2.0 Externes : - 4x Ports USB 2.0 : 2 à l'avant, 2 sur l'arrière - 2x Ports USB 3.0 à l'arrière Processeur XEON compatible Gen8 Intel Xeon E3-1265L - 2.4 GHz LGA 1155 sur ebay ici RAM compatible Gen8 Reconditionné HP: ici Neuf Samsung: ici Pour ce tutoriel vous aurez besoin 1 microserveur HP gen8 1 licence Ilo advance 1 SSD de 250go ou plus 1 carte SD de 8go ou plus 1 ecran avec prise vga 2 ou 3 cables Ethernet Branché un écran sur votre microserveur afin de récuperer l'adresse IP de ILO Branché 1 câble Ethernet sur le port ILO Branché 1 câble Ethernet sur un port Ethernet 1 Ici l'adresse IP ILO et 192.168.1.249 Vous pouvez éteindre le serveur et vous rendre au post 2 pour configurer la machine Mise a jour HP GEN8 ILO version 2.73 :https://support.hpe.com/hpsc/swd/public/detail?swItemId=MTX_025846b2035b42f7b85512741b - Une extraction de l’exécutable à l'aide de WinRar par exemple puis mise à jour directement depuis iLo avec le fichier ilo4_273.bin Service Pack Service Pack for ProLiant (SPP) Version 2017.10.1 https://support.hpe.com/hpsc/swd/public/detail?swItemId=MTX_85633fd81ad7456dbf6c8a7137
  3. DomoCharts Version 5.0 Pour Fibaro Home Center 2 Sommaire : 1. Présentation 2. Pré-requis 3. Installation 3.1 Pages Web 3.2 Base de données MySQL 3.3 Virtual Device 3.4 Scène 4. Mise à jour 5. Utilisation 6. Evolutions futures 1. Présentation Notre box est géniale, il y des beaux graphiques de consommation et de température, mais il manque la possibilité de grapher toutes les autres données, et l'historique des données conservées est purgé au bout d'un certain temps. Voici donc un ensemble de scripts permettant de générer des graphiques de température, humidité, consommation, batterie, etc... de tous les devices connus du Home Center 2. J'ai repris le travail initié par Byackee sur le forum officiel de Fibaro : make your graphics automatically Voici quelques unes des améliorations apportées : Nouvelle structure de base de données (nouvelles tables, modification des tables existantes, création d'index, ...) Meilleures performances Prise en compte des valeurs suivantes : température, humidité, luminosité, batterie, consommation électrique instantanée, électrique électrique cumulée, CO2, pression atmosphérique, niveau sonore, pluie, vent (certaines données sont disponibles grâce au plugin Netatmo) La zone de graphe s'adapte automatiquement en pleine page du navigateur web Gestion des pièces de la maison, afin de différencier les sondes portant le même nom (par exemple "Thermomètre salon" et "Thermomètre chambre") sur le graphique Purge des anciennes données après 21 jours (sinon les tables grossissent trop), avec consolidation les données par jour pour une conservation longue durée dans des tables séparées Utilisation de la dernière version des bibliothèques Highcharts, Highstock, Highslide, jQuery Support complet des HC2 v3 et v4. Energie électrique cumulée (en kWh) : support des tarifs BASE et HC/HP avec configuration statique des horaires Quelques nouveautés visuelles sur les graphiques (échelle de 0 à 100% pour les batteries et humidité en pourcentage), ainsi qu'un code couleur pour les valeurs hors-normes Installation de la base de données sans utiliser phpMyAdmin grâce à un simple script En attendant les plugins utilisateurs, support de "sondes virtuelles", en fait il s'agit de valeurs stockées dans des variables globales et mises à jour via l'API (particulièrement utiles pour les utilisateurs de FHEM, Zibase, etc... pour les protocoles tels que EnOcean et Oregon) Résolution de nombreux petits bugs remontés sur le forum ou non (UTF-8, quotes, pièce 'météo', utilisation des champs adresse IP et Port du VD, etc...). Bouton "Delete" dans le popup après clic sur un point permettant de supprimer une valeur aberrante, afin de conserver une courbe homogène Meilleure gestion des erreurs, avec remonté des message autant que possible (dans le debug du VD, et/ou sur le graph) Réécriture (presque) complète du code des boutons de VD et des pages PHP d'insertion des données, avec une API qui utilise le format de données JSON. C'est beaucoup plus propre, évolutif (je m'en sert pour mes graphs de consommation d'eau et d'énergie électrique, issues d'autres source), et un gain significatif de bande passante réseau. Disponible sur Github, donc plus facile de suivre les versions, et de forker le projet : https://github.com/cdriget/DomoCharts (attention sur Github il n'y a que le code source que j'ai développé, le package complet doit être téléchargé en bas de ce tuto sur le forum) ... 2. Pré-requis Un serveur Web supportant PHP (NAS Synology, hébergement mutualisé, ...) Une base de données MySQL (Idem) Une Fibaro Home Center 2 Le package DomoCharts_V5.0.zip (disponible en bas du tutoriel) Dans le package à télécharger, vous trouverez donc : graph : Répertoire à transférer (via FTP, montage de partage réseau, ...) sur votre serveur Web DomoCharts.vfib : Device virtuel à importer dans le HC2 Scene.lua : Code source à copier/coller dans une nouvelle scène graphique_128.png : Icône pouvant être utilisée sur le Virtual Device clap_graph.png : Icône pouvant être utilisée sur la scène 3. Installation 3.0 Synology Etapes facultatives pour les utilisateurs débutants d'un NAS Synology avec DSM. Ces étapes doivent être effectuées à l'aide du compte admin via l'interface Web (accessible par défaut sur le port 5000). 3.0.1 Installation de MariaDB (MySQL) Dans le Centre de paquets, rechercher et installer MariaDB : Dès que l'installation est terminée, cliquer sur l’icône de MariaDB afin d'accéder à l'écran de configuration, puis cliquer sur le bouton Changer le mot de passe MariaDB : Par défaut, le mot de passe MariaDB est vide, cliquer alors sur le bouton Réinitialiser le mot de passe MariaDB : Confirmer en cliquant sur le bouton Oui : Le seul compte existant est root, il faut donc créer un mot de passe (note : ce compte root est différent du compte root du Syno, il est donc tout à fait possible d'avoir des mots de passes différents) : 3.0.2 Activation du serveur Web Dans le panneau de configuration, aller dans la section Services Web, puis cocher la case Activer Web Station : Accéder à la page Web par défaut sur le port 80 du Syno : Le Syno est prêt. 3.1 Pages Web Transférer toute l'arborescence du répertoire /graph sur le serveur Web via FTP ou montage réseau. Ensuite, éditer le fichier config.inc.php afin d'y modifier les paramètres de connexion à la base de données MySQL : // MySQL Server hostname or IP address $server = 'server'; // MySQL User account $login = 'login'; // MySQL User password $password = 'password'; // MySQL Database name $database = 'database'; Note : si vous utilisez le mini-tuto Synology ci-dessus, les paramètres devraient ressemble à quelques chose comme cela (seul le mot de passe doit être personnalisé) : // MySQL Server hostname or IP address $server = 'localhost'; // MySQL User account $login = 'root'; // MySQL User password $password = 'password'; // MySQL Database name $database = 'domotique'; Pour des raisons de sécurité, si vous maitrisez MySQL et phpMyAdmin, vous devez créer un utilisateur dédié (différent de root). Je ne détaille pas cette procédure qui est hors du cadre de ce tutoriel. Energie Dans le fichier config.inc.php, une rubrique concerne la configuration des horaires de l'abonnement au fournisseur d'électricité (ERDF, ...). La variable $TimeSource doit avoir la valeur 'STATIC' : //*** Teleinfo time for energy // // Variable = 'Value' // Comment : Allowed values // -------- ------- // ------------------------------------------ : --------------- $TimeSource = 'STATIC'; // Source of information for date and time : TELEINFO|STATIC // ---------------------------- // Valid only if TELEINFO TimeSource is used : --------------- $teleinfoTable = 'teleinfo'; // MySQL table name : xxxxxxxx $teleinfoDelay = 60; // Teleinfo Delay in Seconds : ss // ---------------------------- // Valid only if STATIC TimeSource is used : --------------- $TimeHCHP = array( // HC/HP start times for each EDF rate : 'hh:mm' => '<BASE|HC|HP>' '00:00' => 'HC', '06:30' => 'HP', '22:30' => 'HC' ); Sont actuellement supportés les abonnements de type Normal ('BASE'), et Heures Pleines/Heures Creuses ('HP' et 'HC'). Dans l'exemple du dessus, j'ai configuré les horaires HP de 6:30 à 22:30, et des horaires HC de 22:30 à 6:30. Notez que la variable $TimeHCHP doit obligatoirement commencer à 00:00. Vous pouvez ensuite ajouter autant de tranches horaires que nécessaires, car certains abonnements proposent 2 tranches HC réparties dans la journée. Si vous avez un abonnement Normal, c'est plus simple, puisqu'il suffit d'indiquer 'BASE' à partir de 00:00 : $TimeHCHP = array( '00:00' => 'BASE' ); Avec ces informations, le bouton Energy du module virtuel sera ensuite capable d'interroger l'API de la HC2 afin de récupérer les consommations des différentes équipements pour chaque tranche horaire de chaque journée. A l'heure actuelle, le graphique d'énergie électrique affiche la somme des kWh pour chaque journée, mais les informations nécessaires sont stockées dès aujourd'hui dans la base de données afin d'effectuer les calculs de coà»ts financiers ultérieurement. 3.2 Base de données SQL Afin de créer ou migrer les tables dans la base de données MySQL/MariaDB, il faut appeler la page /graph/install.php sur le serveur Web. Si tout se passe bien, la page se contente d'afficher Finished : Sinon, vous pouvez demander du support sur le forum, en copiant/collant le texte des messages d'erreurs. 3.3 Virtual Device Ce Virtual Device est responsable de l'envoi des données vers la base de données SQL au travers de pages Web dédiées à l'insertion des données. Dans la HC2, aller dans Modules, puis Ajouter ou supprimer un dispositif, puis dans la zone Importer un dispositif virtuel, cliquer sur Parcourir, puis sélectionner le fichier DomoCharts.vfib. Dans les propriétés de ce Virtual Device, vous pouvez changer l’icône par défaut avec le fichier graphique_128.png (à répéter pour tous les boutons du VD). Entrer l'adresse IP du serveur Web et son port : On en profite pour relever l'ID du Virtual Device dans la barre d'adresse, qui nous sera utile plus loin lors de la création de la scène : Au final, on obtient un nouveau module dans l'interface : 3.4 Scène Cette scène est responsable du déclenchement régulier des appels au Virtual Device. Dans la HC2, aller dans Scènes, puis Ajouter une scène, puis Ajouter une scène en LUA. Appelez-là DomoCharts, bien s'assurer que les cases Scène Active et Ne laissez pas l'alarme arrêter une scène tandis que l'alarme est en marche sont cochées. Utiliser l'icône fournie clap_graph.png. Dans l'onglet Avancé, copier/coller le code LUA fourni dans le fichier Scene.lua. Ne pas oublier de remplacer la valeur de la variable VirtualDeviceID par l'ID de votre Virtual Device que vous avez obtenu dans la barre d'adresse lors de la création de celui-ci. local VirtualDeviceID = 82 Au final, on obtient une nouvelle scène dans l'interface : La particularité de cette scène est d'attendre le début d'une nouvelle minute avant de commencer à entrer dans la boucle infinie. Ainsi, si on modifie la scène en plein milieu d'une minute, lorsque le HC2 redémarre immédiatement la scène, on est certain que nos actions seront exécutées à la prochaine nouvelle minute, conservant bien toujours 1 minute d'intervalle entre 2 appels au Virtual Device. De plus, différents tests vous permettent d'exécuter certaines actions une fois par minute, par heure, ou par jour. Je m'en sert pas exemple pour mettre à jour les données de mon Eco-Devices et de mon compteur d'eau (pilotés par d'autres Virtual Devices). A noter que lors du changement de jour, on attend 1 minute de plus afin d'éviter tout décalage de temps entre la HC2 et le serveur Web (important pour la génération des données consolidées par jour, car on doit être certain que le jour précédent est complètement terminé). Par défaut, je propose donc : Mise à jour des valeurs des sondes (températures, humidité, etc... ) toutes les minutes Mise à jour des consommations instantanées toutes les minutes Mise à jour des batteries une fois par jour à 23h Mise à jour des devices une fois par jour (ce qui implique que si vous ajouter une nouvelle sonde de température en journée, celle-ci ne sera visible sur les graphes qu'à partir de 0h01, bien que les données commencent à être enregistrée à la minute près où le device est ajouté dans le HC2) Consolidation et purge des données une fois par jour 3.5 Variables Globales En option, il est possible de grapher des données issues de variables globales. Cela est utile pour les données issues de sources externes, telles que des sondes Oregon sur une Zibase, des sondes EnOcean sur FHEM, etc. Les valeurs de ces variables sont alors mises à jour en Push via l'API, ou en Pull via une scène. Je ne détaille pas ces étapes qui sont hors du cadre de ce tutoriel. Il y a 2 boutons à modifier : Bouton n°1 - Sensors Modifier la variable nommée variables située en début de script. Dans cet exemple, on peut voir 2 sondes de température, et une sonde d'humidité : -- User Global Variables local variables = { { ["type"] = "temperature", ["id"] = 2001, ["name"] = "TempCuisine" }, { ["type"] = "humidity", ["id"] = 2002, ["name"] = "HumCuisine" }, { ["type"] = "temperature", ["id"] = 2003, ["name"] = "TempSalleCinema" } } Pour chaque valeur, les champs suivants sont requis : - type : le type de capteur (temperature, humidity, light, power, co2, pressure, noise, rain, wind) - id : un ID "virtuel", c'est à dire qui ne correspond à aucun device connu par la HC2. N'hésitez pas à choisir une valeur très élevée que vous n'atteindrez jamais, sous peine de conflit d'ID. - name : le nom de la variable globale créée dans le panneau Bouton n°4 - Devices De façon similaire : -- User Global Variables local variables = { { ["type"] = "temperature", ["id"] = 2001, ["name"] = "Température", ["room"] = 7 -- Cuisine }, { ["type"] = "humidity", ["id"] = 2002, ["name"] = "Humidité", ["room"] = 7 -- Cuisine }, { ["type"] = "temperature", ["id"] = 2003, ["name"] = "Température", ["room"] = 5 -- Salle cinéma } } Pour chaque valeur, les champs suivants sont requis : - type : le type de capteur => identique au bouton n°1 - id : un ID "virtuel" => identique au bouton n°1 - name : le nom du capteur qui apparaitra dans le graph - room : l'ID de la pièce dans laquelle se situe le capteur, qui s'affichera dans le graph à la suite du nom du capteur. 4. Mise à jour Pour procéder à la mise à jour, il faut : Bloquer l'exécution de la scène Graphiques LUA Importer le nouveau VD (et mettre l’icône, l'IP et le port comme indiqué plus haut) Supprimer puis retransférer le contenu du répertoire /graph sur le serveur Web, comme expliqué au paragraphe 3.1. => Attention à ne pas perdre vos paramètres dans le fichier config.inc.php. Modifier le fichier config.inc.php avec les bonnes infos pour se connecter à la DB (comme expliqué ci-dessus) Dans un navigateur Web, ouvrir la page /graph/install.php afin de préparer la base de données aux changements (comme expliqué ci-dessus) Réactiver la scène LUA Regarder le Debug des boutons du VD pour vérifier qu'il n'y a pas d'erreur Vider le cache du navigateur Au bout de quelques minutes, les graphs doivent continuer comme avant, avec les nouveaux graphs 5. Utilisation Pour visualiser les graphes, il suffit d'aller chercher avec son navigateur l'adresse du serveur Web avec le chemin "/graph", par exemple : http://192.168.1.1/graph/ . Pour l'administration, aller sur la page admin.php : http://192.168.1.1/graph/admin.php Cette page permet d'ordonner les modules, de donner une couleur à chaque courbe, et d'en cacher certains : Si une valeur aberrante apparait, il zoomer suffisamment sur le graph, puis cliquer sur le point. Dans le popup qui apparait, un bouton Delete permet de supprimer la valeur, afin de conserver une courbe homogène : 6. Evolutions futures En cas de perte de communication entre la HC2 et le NAS/Serveur Web, stockage des données en local dans une Variable Globale, jusqu'à ce que leur envoi soit possible. Cela permettra de ne pas perdre de données en cas de mise à jour/reboot/plantage du NAS, ou de la connexion Internet. Permettre à l'utilisateur de créer autant de graphs qu'il veut, en lui permettant d'attribuer un certain nombre de modules à chaque graph, avec personnalisation du graph (échelle, couleurs, taille, police, etc). Ainsi on pourra avoir un graph de la température des pièces, un autre graph de la température du matos informatique, un graph de la température en fonction de la consommation électrique du chauffage, etc.... à vous d'imaginer vos besoins ... Je suis preneur de vos suggestions ! 7. Informations complémentaires Bug si station météo Netatmo => Voir patch des butons Sensors et Devices par @Steven en page 41. Tutoriel de @Sakkhho pour ajouter les relevés du compteur de gaz NorthQ en page 44. Charts_V4.1.zip DomoCharts_V5.0.zip
  4. Introduction : Suite à une discussion tenue il y a quelques temps dans le sujet Accès HC2 de l'extérieur, je propose un tutoriel sur le mise en Å“uvre d'un Reverse Proxy avec HAProxy sur un NAS Synology. Certes, c'est de l'informatique, et non pas de la domotique, mais le but principal est d'accéder à nos équipements domotiques (en particulier les box Fibaro Home Center 2 ou Home Center Lite) depuis l'extérieur. La discussion citée précédemment décrit différentes méthodes d'accès aux ressources du réseau local depuis Internet, notamment la technique du Port Forwarding, qui consiste à ouvrir un port TCP coté WAN pour chaque équipement interne à joindre. Cette méthode fonctionne bien si on se connecte à son HC2 depuis la connexion Internet d'un ami, depuis un hôtel, depuis le partage d'accès 3G/4G de son smartphone, ou depuis une entreprise qui ne filtre pas trop les connexions. Mais la plupart des entreprises mettent en place des proxy filtrants, qui ne laissent assez souvent passer que les ports 80 (HTTP) et 443 (HTTPS). Même les connexions FTP, VPN, SSH, etc... sont bloquées, donc forcément les ports personnalisés qu'on a choisi. Donc on doit mettre en place un Reverse Proxy. Sur Synology, on peut utiliser HAProxy, ou sinon on se créer son propre serveur Linux qui fera le boulot. Le principe de fonctionnement est simple : avec notre domaine DNS, on crée autant de sous-domaines qu'on souhaite joindre d'équipements dans notre LAN. Par exemple, dsm.domaine.com, hc2.domaine.com, ecodevice.domaine.com, etc... dans l'interface d'administration du routeur, on redirige le port TCP 80 externe vers le port 80 du NAS qui héberge HAProxy au sein du LAN. dans la configuration de HAProxy, on crée toutes les règles pour rediriger les sous-domaines vers la bonne adresse IP dans le LAN. Le schéma est donc le suivant : Utilisateur sur le WAN => Routeur ADSL => Reverse Proxy => Equipement final (HC2, ...) Glossaire simplifié des termes employés dans ce tutoriel : LAN = Local Area Network, désigne le réseau local domestique WAN = Wide Area Network, désigne Internet Routeur = équipement réseau assurant la communication entre le LAN et le WAN. En France, nous sommes majoritairement équipés de Box Internet prêtées par les fournisseurs d'accès à Internet, telles que Freebox, LiveBox, etc... Adresse IP = adresse sur 4 nombres (par exemple 192.168.1.1) permettant d'identifier un équipement sur le réseau, que ce soit le LAN ou le WAN. A noter que coté WAN, les adresses IP sont uniques sur tout Internet, tandis que coté LAN, on utilise des plages d'adresses dites "privées" (192.168.x.y, ou 172.16.x.y, ou 10.x.y.z) c'est à dire qu'elle ne sont pas visibles depuis Internet. Le routeur se charge d'effectuer de la translation d'adresse, si bien que lorsque nous surfons sur Internet, ce n'est pas l'adresse IP de notre ordinateur/téléphone/tablette qui est vue, mais l'adresse IP externe du routeur. Adresse IP fixe : l'adresse IP fournie par le fournisseur d'accès à Internet peut être fixe (notamment chez Free) ou variable, c'est à dire qu'elle sera différente à chaque nouvelle connexion (ou tranche de 24h, cela dépend). Les adresses IP fixes sont bien sà»r préférables pour pouvoir se connecter chez soit depuis l'extérieur, mais la méthode du DynDNS existe pour s'en sortir même avec une adresse IP variable. Nom de Domaine DNS : sur Internet, nous n'utilisons couramment pas les adresses IP, mais plutôt les noms de domaine, tels que google.com ou domotique-fibaro.fr. Pour chaque domaine, on peut créer pratiquement autant de sous-domaine que l'on souhaite, qui sont placés en préfixe du nom de domaine. Le plus célèbre d'entre eux est www, ce qui donne www.google.com ou www.domotique-fibaro.fr. Il est bien entendu possible de créer le sous-domaine de son choix, afin d'obtenir des adresses telles que hc2.mondomaine.com, ou ecodevices.mondomaine.fr, ... Limitations de ce tutoriel : Je me limite volontairement à l'utilisation du port 80 avec le protocole http non-sécurisé. En effet, si il pourrait paraitre tentant d'utiliser le protocole https sur le port 443, il faut savoir que nous n'avons qu'un certificat auto-signé, donc non reconnu par les navigateurs Web, et donc également par les proxy d'entreprises, qui peuvent rejeter la connexion pour les plus filtrants, par mesure de sécurité. Le but de mon tutoriel étant de passer au travers d'un maximum de proxy d'entreprise, cela a plus de chance de réussir en utilisant le port 80. Dans la pratique, tant que votre nom de domaine n'est pas blacklisté, cela devrait fonctionner. Si vraiment la sécurité est nécessaire, il faut acheter un certificat SSL et l'importer dans la configuration de HAProxy, ce qui sort du cadre de ce tutoriel. De plus, je tourne sous la version 4.3 de DSM, pour plusieurs raisons : C'est un version stable et en production chez moi Comme j'utilise Xpenology dans une machine virtuelle VMware ESXi, la version 5.0 n'est pas encore suffisamment stable à mon goà»t (les derniers patchs posent problème) Cependant, je pense qu'il est aisé de suivre le tutoriel sous la version 5.0 de DSM qui est assez similaire, exceptée la refonte de l'interface graphique. Pré-requis pour ce tutoriel : Une box/routeur Internet Un NAS Synology Un nom de domaine DNS Une adresse IP fixe, ou à défaut un système de DynDNS Liens permettant d'approfondir le sujet : http://forum.hardware.fr/hfr/reseauxpersosoho/Reseaux/synology-dsm-disponible-sujet_5497_686.htm#t741030 http://www.nas-forum.com/forum/topic/39737-tuto-haproxy-et-regroupement-des-parametrages-trouves-sur-le-fofo/
  5. Quick App - Monitoring Nas Synology Je vous propose un QA pour le monitoring de la HC3. Ce QA a été encore une fois réalisé avec l'aide de mon neveu (et oui je suis en train de la convertir). Il peut certainement être optimisé mais il fait le job. Je n'ai pas rencontré de bug. Vous pouvez le modifier et l'améliorer à votre guise. Il a les mêmes fonctions que celui de la HC2 dont on s'est largement inspiré. Utilisation : -- Créer deux variables "IPAddress" & "TCPPort" -- Renseigner votre "LOGIN" et votre "PASSWORD" -- Pour la fonction WOL, utiliser le QA WOL de Fibaro et appellé-le avec la commande: -- ==> fibaro.call(ID, "turnOn") EDIT: Voir le Header EDIT: Nouvelle version du QuickApp - Monitoring Nas Synology. Ajout des boutons pour l'éjection des disques durs connectés en USB sur les NAS. J'ai ajouté 4 boutons. Je pense que cela sera suffisant. Pour en ajouter d'autres, il suffit de suivre les commentaires dans la partie "FONCTION EJECT USB" du code. Les boutons se nomment USB Disk 1 à 4. Lorsque l'un des disques est déconnecté, les boutons se déplacent vers la gauche ( USB Disk 1 / USB Disk 2/ USB Disk 3/ No Disk ==> On élève le USB Disk 2 ==> / USB Disk 1 / USB Disk 3/ No Disk / No Disk). Je n'ai pas rencontré de bug. Le code: -- QuickApp Monitoring Nas Synology pour Fibaro HC3 -- Generic device type have no default actions to handle -- HISTORIQUE -- Adapté de https://www.domotique-fibaro.fr/topic/5682-synology-monitoring/ -- v2.4 (29/08/2015 - jojo) : première version -- merci à Krikroff, Lazer, Steven, mprinfo, FDP2 -- v2.41 (02/09/2015 - jojo) : slider pour double click -- V1.0 (14/05/2020) pour Home Center 3 par fredokl et Maxime pour le site www.domotique-fibaro.fr -- V1.1 (15/05/2020) pour Home Center 3 par fredokl et Maxime pour le site www.domotique-fibaro.fr -- Ajout du push pour avertir que le serveur n'est plus connecté. Ligne 409 de ce code -- V1.2 (27/05/2020) pour Home Center 3 par fredokl et Maxime pour le site www.domotique-fibaro.fr -- Transformation du QA en "com.fibaro.genericDevice" à la place de "Commutateur binaire" -- Ajout des icônes "serveur allumé" et "serveur éteint" -- V1.3 (29/05/2020) pour Home Center 3 par fredokl et Maxime pour le site www.domotique-fibaro.fr -- Ajout des boutons "Eject Disk" -- Changement rafraîchissement automatique (toute les minutes ==> Check tout le NAS et toutes les 10 secondes ==> Check les Disk USB) -- Améliorations du code -- Lien topic: https://www.domotique-fibaro.fr/topic/14308-quick-app-monitoring-serveur-nas-synology/ -- Utilisation: -- La connexion au NAS se fait par HTTP -- Créer deux variables "IPAddress" & "TCPPort" -- Renseigner votre "LOGIN" et votre "PASSWORD" -- Pour la fonction WOL, utiliser le QA WOL de Fibaro et appellé-le avec la commande: -- ==> fibaro.call(ID, "turnOn") -- Vous pouvez le modifier et l'améliorer à votre guise. ------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------- -- PARAMÈTRES UTILISATEUR -- ------------------------------------------------------------------------------------------- -- System variables function QuickApp:onInit() __TAG = "QA_"..plugin.mainDeviceId.."_DS 416 PLAY" self:trace("==========================================") self:debug("onInit") -- User configurable variables self.login = "login" -- votre login DSM self.password = "Password" -- votre mot de psse DSM self.ip = self:getVariable('IPAddress'); self.port = self:getVariable('TCPPort'); self.http = net.HTTPClient({ timeout = 10000 }) self.diskusblistid = {} self.diskusblistname = {} self.API_AUTH_ERROR_CODE = { [0] = "Sans erreur.", [100] = "Erreur inconnue.", [101] = "Compte non spécifié.", [400] = "Mot de passe invalide.", [401] = "Compte désactivé.", [402] = "Permission refusée.", [403] = "Unique mot de passe non spécifié.", [404] = "Autentification erronée." }; self.API_RECORD_ERROR_CODE = { [400] = "Exécution ratée.", }; self.nbmsg = 0 self.timerOn = false self.isCheckin = false self.nbCheck = 0 self:autoCheck() end -------------------------------------------------------------------------------------- -- WAKE ON LAN -------------------------------------------------------------------------------------- function QuickApp:uiWoLOnR() fibaro.call(47, "turnOn") end -------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- -- == NE RIEN MODIFIER À PARTIR D'ICI == -------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- -- FONCTION GETRequest: Connexion GET -------------------------------------------------------------------------------------- function QuickApp:GETRequest(payload, callBack) --self:trace("Commande GETRequest") local url = "http://" ..self.ip ..":" ..self.port ..payload self.http:request(url, { options= { headers= { ["Connection"] = "keep-alive", ["Accept"] = "application/json" }, method = "GET" }, success = function(response) self.nbmsg = self.nbmsg + 1 if callBack then callBack(response.data) end end, error = function(message) self:trace("error:" ..json.encode(message)) self.nbmsg = 0 self.timerOn = false end }) end -------------------------------------------------------------------------------------- -- FONCTION EJECT USB -------------------------------------------------------------------------------------- -- Refresh USB Disk function QuickApp:refreshUSBdisk() payload = "/webapi"..self.cgiUsed_sys.."?api="..self.apiStorage_usb.."&version=1&method=list&_sid="..self.SID; self:GETRequest(payload, function(data) jsonTable = json.decode(data); if jsonTable.success == true then local devices = jsonTable.data.devices self.diskusblistid = {} self.diskusblistname = {} for k,v in pairs(devices) do table.insert(self.diskusblistid, v.dev_id) table.insert(self.diskusblistname, v.dev_title) end self:trace("refreshUSBdisk") self:updateView("btn6", "text", self:getDiskName(self.diskusblistname[1])) -- Pour ajouter des boutons copier la ligne puis self:updateView("btn7", "text", self:getDiskName(self.diskusblistname[2])) -- changer les id pour ajouter des disks. self:updateView("btn8", "text", self:getDiskName(self.diskusblistname[3])) -- Pour supprimer un boutons ==> supprimer une ligne self:updateView("btn9", "text", self:getDiskName(self.diskusblistname[4])) --self:updateView("btn10", "text", self:getDiskName(self.diskusblistname[5])) -- Exemple bouton en plus self:trace("==========================================") end end) end -- Eject USB Disk en fonction du diskID et refresh juste après function QuickApp:ejectUSBdisk(diskID) payload = "/webapi"..self.cgiUsed_sys.."?api="..self.apiStorage_usb.."&version=1&method=eject&dev_id="..diskID.."&_sid="..self.SID; self:GETRequest(payload, function(data) jsonTable = json.decode(data); if jsonTable.success == true then self:trace("==========================================") self:trace("Disk: "..diskID.." éjecté") self:refreshUSBdisk() end end) end -- Affiche des noms sur les boutons function QuickApp:getDiskName(text) local res= "No Disk " if text then res = text end return res end -- Eject Disk vérification présence disk function QuickApp:ejectDisk(numero) local diskID = self.diskusblistid[numero] if diskID then self:CheckConnect( function() if self.isCheckin == false then self.isCheckin = true self:DoAction(function () self:ejectUSBdisk(diskID) end, 2) end end) end end -- Boutons Eject Disk function QuickApp:uiEject1OnP(event) self:ejectDisk(1) end function QuickApp:uiEject2OnP(event) self:ejectDisk(2) end function QuickApp:uiEject3OnP(event) self:ejectDisk(3) end function QuickApp:uiEject4OnP(event) self:ejectDisk(4) end --function QuickApp:uiEject5OnP(event) self:ejectDisk(5) end -- Ajouter ligne pour commande bouton -------------------------------------------------------------------------------------- -- AUTHORISATION CONNEXION NAS -------------------------------------------------------------------------------------- function QuickApp:DoAction(action, nbmsgtotal) --self:trace("Test avant ok connected") self.timerOn = true -- API & informations disponibles payload = "/webapi/query.cgi?api=SYNO.API.Info&method=Query&version=1&query=SYNO.API.Auth" self:GETRequest(payload, function (data) jsonTable = json.decode(data) self.version = jsonTable.data["SYNO.API.Auth"].maxVersion if self.version >= 2 then self:trace("Version API Synology OK") self.pathAuth = jsonTable.data["SYNO.API.Auth"].path self.cgiUsed_cpu_mem = "/entry.cgi" self.cgiUsed_sys= self.cgiUsed_cpu_mem self.cgiUsed_temp = self.cgiUsed_cpu_mem self.cgiUsed_vols = self.cgiUsed_cpu_mem self.apiUsed_cpu_mem = "SYNO.Core.System.Utilization" self.apiUsed_temp_system = "SYNO.Core.System" self.apiUsed_sys= self.apiUsed_temp_system; self.apiUsed_temp_disk = self.apiUsed_temp_system self.apiUsed_vols = self.apiUsed_temp_system self.apiMethod_cpu_mem="get" self.apiMethod_temp = "info" self.apiMethod_vols = self.apiMethod_temp self.apiStorage_usb= "SYNO.Core.ExternalDevice.Storage.USB" if self.version < 6 then self.cgiUsed_cpu_mem = "/dsm/system_loading.cgi" self.cgiUsed_sys="/dsm/system.cgi"; self.cgiUsed_temp = "/dsm/info.cgi" self.cgiUsed_vols = "/dsm/volume.cgi" self.apiUsed_cpu_mem = "SYNO.DSM.SystemLoading" self.apiUsed_temp_system = "SYNO.DSM.Info" self.apiUsed_temp_disk = "" self.apiUsed_vols = "SYNO.DSM.Volume" self.apiMethod_cpu_mem = "getinfo" self.apiMethod_temp = self.apiMethod_cpu_mem self.apiMethod_vols = "list" self.apiUsed_sys="SYNO.DSM.System"; end end self:GetSid_Send(action) self:timer(nbmsgtotal + 2) end) end -------------------------------------------------------------------------------------- -- FONCTION GetInfo: RÉCUPÉRATION DES DONNÉES -------------------------------------------------------------------------------------- function QuickApp:GetInfo(onlyDisk) self.timercount = 1000 if onlyDisk == false then -- CPU info du DSM payload = "/webapi"..self.cgiUsed_cpu_mem.."?api="..self.apiUsed_cpu_mem.."&version=1&method="..self.apiMethod_cpu_mem.."&type=current&_sid="..self.SID; self:GETRequest(payload, function (data) jsonTable = json.decode(data); if jsonTable.success == true then info_cpu = jsonTable.data.cpu; load_mem = jsonTable.data.memory.real_usage; self:trace("Memory: "..load_mem.."%"); info_cpu_memory = "Memory: "..load_mem.."% "; load_cpu = 0; if (self.version < 6) then load_cpu = info_cpu.user*100; else load_cpu = info_cpu.other_load+info_cpu.system_load+info_cpu.user_load; end self:trace("CPU: "..load_cpu.."%") info_cpu_memory = info_cpu_memory.."CPU: "..load_cpu.."%"; self:updateView("lbl3", "text", "Memoire: " ..load_mem .."% " .."CPU: " ..load_cpu .."%") self:trace("==========================================") end end) -- Info Température Système info du DSM payload = "/webapi"..self.cgiUsed_temp.."?api="..self.apiUsed_temp_system.."&version=1&method="..self.apiMethod_temp.."&_sid="..self.SID; self:GETRequest(payload, function (data) jsonTable = json.decode(data); if jsonTable.success == true then if jsonTable.data.sys_temp ~= nil then temp_system = "Température du Système: " ..jsonTable.data.sys_temp.."°C"; else temp_system = "Système: N/A"; end self:trace(temp_system); self:updateView("lbl4", "text", temp_system) end end) -- Info Température des disques -- Prépare string temp_disks = ""; payload = "/webapi"..self.cgiUsed_temp.."?api="..self.apiUsed_temp_disk.."&version=2&method="..self.apiMethod_temp.."&type=storage&_sid="..self.SID; self:GETRequest(payload, function (data) jsonTable = json.decode(data); if jsonTable.success == true then local disk_tab = jsonTable.data.hdd_info; for nb = 1, #disk_tab do temp_disks = temp_disks..disk_tab[nb].diskno..": "..disk_tab[nb].temp.."°C "; end self:trace("Température des Disques: "..temp_disks); self:updateView("lbl5", "text", temp_disks) end end) -- Info taille des disques -- Prépare string vols_load = ""; payload = "/webapi"..self.cgiUsed_vols.."?api="..self.apiUsed_vols.."&version=1&method="..self.apiMethod_vols.."&type=storage&_sid="..self.SID; self:GETRequest(payload, function (data) jsonTable = json.decode(data); if jsonTable.success == true then local vols_tab = jsonTable.data.vol_info; for nb = #vols_tab, 1, -1 do used_size_vol = vols_tab[nb].used_size; total_size_vol = vols_tab[nb].total_size; occupied_size = self:round(used_size_vol / total_size_vol * 100); vols_load = vols_load..vols_tab[nb].name..": "..occupied_size.."% "; end self:trace("Taille des Volumes: "..vols_load); self:updateView("lbl6", "text", vols_load) end end) end --Refresh button disk self:refreshUSBdisk() -- Affichage IP Serveur self:trace("IP Serveur ", "Serveur connecté: " ..self.ip ..":" ..self.port) self:updateView("lbl1", "text", "Serveur connecté: " ..self.ip ..":" ..self.port) end -------------------------------------------------------------------------------------- -- FONCTION POUR ARRONDIR LES POURCENTAGES -------------------------------------------------------------------------------------- function QuickApp:round(num) local a = math.floor(num*100 + 0.5)/ 100; return a,string.format("%.2f",a); end -------------------------------------------------------------------------------------- -- DÉCONNEXION -------------------------------------------------------------------------------------- function QuickApp:Disconnect() payload = "/webapi/"..self.pathAuth.."?api=SYNO.API.Auth&method=Logout&version=2&session=DSM&_sid="..self.SID; self:GETRequest(payload, function()end); end -------------------------------------------------------------------------------------- -- TIMER -------------------------------------------------------------------------------------- function QuickApp:timer(nbmsgtotal) if self.timerOn then if self.nbmsg < nbmsgtotal then fibaro.setTimeout(2000, function() self:timer(nbmsgtotal) end) else self:Disconnect() self.nbmsg = 0 self.timerOn = false self.isCheckin = false end end end -------------------------------------------------------------------------------------- -- REFRESH -------------------------------------------------------------------------------------- function QuickApp:autoCheck() self.nbCheck = self.nbCheck + 1 if self.nbCheck%6 == 0 or self.nbCheck == 1 then onlyDisk = false nbOperation = 5 else onlyDisk = true nbOperation = 1 end self:CheckAll(onlyDisk, nbOperation) fibaro.setTimeout(1000*10, function() self:autoCheck() end) --10 secondes end -------------------------------------------------------------------------------------- -- VÉRIFICATION DE TOUS LES ÉLÉMENTS -------------------------------------------------------------------------------------- function QuickApp:CheckAll(onlyDisk, nbOperation) self:CheckConnect( function() if self.isCheckin == false then self.isCheckin = true self:DoAction(function () self:GetInfo(onlyDisk) end, nbOperation) end end) heure = os.date("%H:%M:%S") date = os.date("%d/%m") dateheure = string.format(" %s à %s", date, heure) self:updateView("lbl7", "text", "Dernière vérification: "..dateheure) end -------------------------------------------------------------------------------------- -- CRÉATION D'UN NOUVEAU SID ET ENVOI DES COMMANDES -------------------------------------------------------------------------------------- function QuickApp:GetSid_Send(callBack) payload = "/webapi/"..self.pathAuth.."?api=SYNO.API.Auth&method=Login&version=2&account="..self.login.."&passwd="..self.password.."&session=DSM&format=sid"; self:GETRequest(payload, function (data) jsonTable = json.decode(data); if jsonTable.success == true then self.SID = jsonTable.data.sid; callBack() end end) end -------------------------------------------------------------------------------------- -- BOUTON RAFRAÎCHISSEMENT -------------------------------------------------------------------------------------- function QuickApp:uiCheckOnR(event) self:CheckAll(false, 5) end -- Check Connect function QuickApp:CheckConnect(callBack) self.tcp = net.TCPSocket({timeout = 1000}) self.tcp:connect(self.ip, tonumber(self.port), { success = function() self:trace("Check Connect OK") self:updateView("lbl2", "text", "Serveur: Allumé") fibaro.setGlobalVariable("Syno_Status1", "1") self:updateProperty("deviceIcon", 1042) -- Mettre ici le code pour l'icone allumé self.tcp:close() if callBack then callBack() end end, error = function(message) self:trace("erreur " ..message) self:updateProperty("deviceIcon", 1043) -- mettre ici le code pour l'icone éteint self:updateView("lbl1", "text", "Serveur connecté: N/A") self:updateView("lbl2", "text", "Serveur: Éteint") self:updateView("lbl3", "text", "Mémoire: N/A") self:updateView("lbl4", "text", "Température Système: NA") self:updateView("lbl5", "text", "Température diques: N/A") self:updateView("lbl6", "text", "Volume des disques: N/A") fibaro.setGlobalVariable("Syno_Status1", "0") -------------------------------------------------------------------------------------- -- ENVOI PUSH TOUTES LES DIX MINUTES -------------------------------------------------------------------------------------- if self.nbCheck%60 == 0 then fibaro.alert("push", {26}, "NAS Synology DS 416 Play est éteint: " ..os.date("%H:%M:%S")) end end }) end -------------------------------------------------------------------------------------- -- REDÉMARRAGE DU DISK STATION -------------------------------------------------------------------------------------- -- Bouton Reboot function QuickApp:uiRebootOnP(event) self:CheckConnect( function() if self.isCheckin == false then self.isCheckin = true self:DoAction(function () self:Reboot() end, 1) end end) end -- Code Reboot function QuickApp:Reboot() payload = "/webapi"..self.cgiUsed_sys.."?api="..self.apiUsed_sys.."&version=1&method=reboot&_sid="..self.SID; self:GETRequest(payload, function(data) jsonTable = json.decode(data); if jsonTable.success == true then self:trace("Redémarrage Disk Station Synology OK"); end end) end -------------------------------------------------------------------------------------- -- ARRÊT DU DISK STATION -------------------------------------------------------------------------------------- -- ShutDown the disk station function QuickApp:uiShutdownOnP(event) self:CheckConnect( function() if self.isCheckin == false then self.isCheckin = true self:DoAction(function () self:ShutDown() end, 1) end end) end function QuickApp:ShutDown() payload = "/webapi"..self.cgiUsed_sys.."?api="..self.apiUsed_sys.."&version=1&method=shutdown&_sid="..self.SID; self:GETRequest(payload, function(data) jsonTable = json.decode(data); if jsonTable.success == true then self:trace("Le Disk Station s'est arrêté"); end end) end -------------------------------------------------------------------------------------- -- FIN DU CODE -- -------------------------------------------------------------------------------------- QuickApp: QA-NAS_Synology.fqa Icônes:
  6. Un dernier tuto pour cette année 2013 (pour ce qui me concerne)... et puis j'entends des voix me disant que j'aurais passé pas mal de temps sur ce forum Je possède depuis plusieurs années une radio Internet... pas celle de l'image ci-dessus, une plus ancienne : la "SqueezeBox Boom" Je l'utilisais uniquement en accédant au serveur mysqueezebox.com Et depuis peu, j'ai acquis une box Fibaro HC2 et un serveur de stockage NAS Synology NAS Synology et LMS J'ai installé le logiciel du Logitech Media Server (LMS) sur mon NAS de façon très simple Il suffit de chercher dans le Centre de Paquets du Synology ce qui correspond à LMS et de cliquer sur installer Une fois installé, on clique sur LMS pour obtenir l'interface de gestion On note que l'adresse IP est (bien sà»r) la même que celle du NAS, mais le port est le : 9002 >> Un petit retour sur la "SqueezeBox Boom" pour configurer la connexion sur ce serveur local (je ne détaille pas, les possesseurs de ce type de radio savent que c'est facile) << On revient sur LMS... En bas de l'interface de LMS, on trouve le paramétrage On obtient une série d'onglets, dont 2 nous intéressent plus particulièrement. L'onglet "Plugins", parmi lesquels on trouve l'interface de ligne de commande (CLI) Attention ! Suite à modification de LMS, on ne trouve plus cet interface CLI dans les plugins Il faut aller sur : - "aide" - "informations techniques" - LMS Command Line Interface Et l'onglet "informations" Ce qui nous intéresse ici, c'est l'adresse MAC de la platine (SqueezeBox Boom) On s'arrête 2 secondes, pour que vous ne passiez pas un temps fou en recherche : méfiez-vous de la "casse" ! Dans mon script LUA, j'avais transformé en majuscule un caractère en minuscule de l'adresse MAC Dernier test avant de passer à notre box favorite : Un petit coup de telnet puis : open 192.xxx.xxx.xxx 9090 Remarques : - la commande doit être saisie telle que stipulée (avec un espace entre l'adresse IP et le port) - C'est bien le port 9090 - une fois la connexion effectuée, c'est un peu surprenant on n'obtient pas de "prompt" Saisir une commande du CLI comme par exemple : player count ? Cette commande me retourne le nombre de player (Squeezebox) : "player count 1" Quelques infos ici : http://wiki.slimdevices.com/index.php/Logitech_Media_Server_CLI .... au fait, vous aviez autorisé telnet sur votre NAS Fibaro HC2... enfin ! Création du périphérique virtuel... que tout le monde sait faire Le code LUA ci-après provient de @robmac qui intervient sur le forum Fibaro --[[ %% properties %% globals --]] -- the LMS server local ipadd = "192.xxx.xxx.xxx" -- the cli plugin port local portno = 9090 -- the MAC of the player local player = "00:00:00:00:00:00 " local playername = "Squeezebox Boom " -- the cmnd string -- change to any cli player command to create buttons local cmnd = "mixer volume " .. _sliderValue_ -- construct the sting to send local stringtosend = player .. cmnd .. string.char(10) --open the socket tcpSocket = Net.FTcpSocket(ipadd, portno) --set the read timeout tcpSocket:setReadTimeout(2*1000) --send the command bytes, errorCode = tcpSocket:write(stringtosend) - Attention à bien respecter les espaces pour que les commandes fonctionnent - compléter l'adresse IP du serveur LMS (ipadd) et l'adresse MAC du player (SqueezeBox Boom) Quelques commandes (cli player command) -- Volume : local cmnd = "mixer volume " .. _sliderValue_ --- ON : local cmnd = "power 1 " -- OFF : local cmnd = "power 0 " -- Lecture : local cmnd = "play " -- Arrêt : local cmnd = "stop " -- Choix d'une radio par l'un des boutons de présélection : local cmnd = "button preset_1.single " Et pour terminer, une ligne de commande générique qui va récupérer le contenu d'une variable globale local cmnd = fibaro:getGlobalValue("squeezebox") Cette variable sera renseignée par une scène. Exemple : -- squeezebox ON fibaro:call(49, "pressButton", "3"); fibaro:sleep(25*1000); -- volume squeezebox à 25 fibaro:setGlobal("squeezebox", "mixer volume 25 "); fibaro:call(49, "pressButton", "14"); fibaro:sleep(5*1000); -- message alerte fibaro:setGlobal("squeezebox", "playlist play /volume1/Fibaro/MP3/30secondes.mp3 "); fibaro:call(49, "pressButton", "14"); fibaro:sleep(15*1000); -- volume squeezebox à 15 fibaro:setGlobal("squeezebox", "mixer volume 15 "); fibaro:call(49, "pressButton", "14"); fibaro:sleep(1*1000); -- squeezebox OFF fibaro:call(49, "pressButton", "4"); On peut donc lire un fichier MP3 stocké sur le NAS pour restituer sur la radio un message sonore ... mais la radio ne bougera pas non plus les oreilles Bonnes fêtes de fin d'année @i-magin ****** 04/01/2015 *********************************************************************************************************************************************************************************************************************** A la demande d'un participant au forum, j'ajoute en fichier joint le module virtuel qu'il faudra compléter : adresse IP du serveur LMS (ipadd) et adresse MAC du player (SqueezeBox Boom) Ce VD datant de décembre 2013 est "rustique" : répétition des informations adresses IP et MAC pour chaque bouton et l'icône est à copier pour chaque bouton.... N'utilisant plus Squeezebox et LM je n'apporterai pas d'amélioration ****** 02/12/2015 *********************************************************************************************************************************************************************************************************************** J'ai ressorti ma Squeezebox pour l'utiliser comme radio réveil et j'ai ajouté la gestion de l'alarme dans un VD "réveil" qui gère (avec une scène) le démarrage d'une radio sur SONOS, la cafetière et l'éclairage.... Pour obtenir les commandes de gestion de l'alarme Squeezebox, j'ai lancé le LMS (Logitech Media Server) hébergé sur mon NAS, puis j'ai cliqué successivement sur : - "aide" - "informations techniques" - LMS Command Line Interface On trouve la commande "Alarm" Dans les exemples donnés, on découvre comment créer, supprimer ou modifier une alarme ... et, surprise, un curieux identifiant pour l'alarme ! La solution la plus simple que j'ai trouvée est la suivante : - sous LMS, sélectionner "Réveil" - supprimer tous les réveils programmés - créer un réveil - paramétrer le volume maxi, durée répétition et réveil - valider tous les jours de la semaine Pour obtenir l'Id du réveil sous Google Chrome : clic droit sur le bouton "supprimer le réveil" et choisir "inspecter l'élément" On obtient : "alarm_remove_xxxxxxx" C'est la valeur après remove (que j'ai remplacée dans ce tuto par des x) qu'il faut retenir Ainsi, la commande pour activer l'alarme : alarm update id:xxxxxxxx enabled:1 Désactiver l'alarme : alarm update id:xxxxxxxx enabled:0 Modifier l'heure de l'alarme (7H30) : alarm update id:xxxxxxxx time:27000 Et dans la continuité de mon tuto d'origine, nous aurons le code lua suivant pour modifier l'heure et l'activer : local cmnd = "alarm update id:xxxxxxxx time:27000 enabled:1 " J'espère que ce complément d'info (presque deux ans après la rédaction du 1er post sur la Squeezebox) pourra servir à d'autres membres du forum Squeezebox.vfib
  7. Rem's

    Sauvegarde NAS synology

    Bonjour à tous, J'ai un NAS de chez SYNOLOGY avec 2 x 3 TO. Actuellement je fais une sauvegarde du NAS sur un disque dur externe branché en USB, de 2 TO. Mais voila, il est saturé, j'ai plus de 2 TO de données sur mon système. Quel moyen me conseiller vous : un petit boitier 2 baies en USB 3.0. Un disque dur externe de 4 TO. Ou autre (je comprend pas grand chose à tout cela) D'avance merci pour vos conseils ....
  8. Bonjour à tous, Je suis à la recherche d'un tutoriel qui décrirait comment installer HomeBridge sur un NAS Synology. J'ai trouvé beaucoup de résultats quant à l'installation sur un Rasberry Pi, mais aucun décrivant la démarche sur un NAS Synology. Je possède un DS916+ avec 4 Disques Durs de 3To et il serait dommage de devoir investir dans un Rasberry alors que l'installation semble pouvoir se faire sur un Syno. J'ai donc pu trouver le plugin pour Fibaro HC2 ici. Et un tuto pour une installation pour Vera ici. Cependant, je n'en suis encore qu'à me premières heures d'utilisation et de compréhension de la domotique et je ne suis pas capable de mixer moi-même ces deux informations en étant certain du résultat. Je requiers donc votre aide, une fois de plus, pour éventuellement me guider, voire même me trouver un tutoriel que je n'aurai qu'à suivre pour ne pas commettre de bourde... Je vous remercie par avance de vos réponses ! Tutoriel HomeBridge sur Synology Docker (testé sous HC2 v4.510)
  9. jojo

    Forum Nas - Synology

    bonjour, je sais nous sommes un forum de domotique Fibaro, donc les NAS Synology, ce n'est pas ici( théoriquement). Il n'empêche qu'il y a énormément de questions sur le sujet et de membres très compétents pour y répondre. Fredo a fait à l'époque un super tuto pour installer Synology sur HP Gen7 http://www.domotique-fibaro.fr/index.php/topic/1277-nas-synology-dsm-5-sur-serveur-hp-n54l-vmware-esxi-55/ Ce topic devient l'endroit où l'on rassemblent toutes les questions concernant les NAS : il fait déjà 50 pages. Ne créerait-on pas un sous forum NAS-Synology avec la structure suivante: support tuto firmware (comme pour la HC2)
  10. HARD DISK, Raid Logiciel, Raid Matériel, SHR, RaidZFS By Lazer, Kiwi et wikipedia.org Pour les discussions sur DSM, Xpenology, Synology, etc, je préfèrerais que vous utilisiez le topic dédié avec le tuto de Fredo => Nas Synology Dsm 5 Sur Serveur Hp N54L + Vmware Esxi 5.5 Introduction : https://fr.wikipedia.org En informatique, le mot RAID désigne les techniques permettant de répartir des données sur plusieurs disques durs afin d'améliorer soit les performances, soit la sécurité ou la tolérance aux pannes de l'ensemble du ou des systèmes. L'acronyme RAID a été défini en 1987 par l'Université de Berkeley, dans un article nommé A Case for Redundant Arrays of Inexpensive Disks (RAID)1, soit « regroupement redondant de disques peu onéreux ». Aujourd'hui, le mot est devenu l'acronyme de Redundant Array of Independent Disks, ce qui signifie « regroupement redondant de disques indépendants ». Le coà»t au mégaoctet des disques durs ayant diminué d'un facteur 1 300 000 en 29 ans, aujourd'hui le RAID est choisi pour d'autres raisons que le coà»t de l'espace de stockage. Les différents types de systèmes RAID https://fr.wikipedia.org Le système RAID est : soit un système de redondance qui donne au stockage des données une certaine tolérance aux pannes matérielles (ex : RAID1). soit un système de répartition qui améliore ses performances (ex : RAID0). soit les deux à la fois, mais avec une moins bonne efficacité (ex : RAID5). Le système RAID est donc capable de gérer d'une manière ou d'une autre la répartition et la cohérence de ces données. Ce système de contrôle peut être purement logiciel ou utiliser un matériel dédié. Le RAID logiciel En RAID logiciel, le contrôle du RAID est intégralement assuré par une couche logicielle du système d'exploitation. Cette couche s'intercale entre la couche d'abstraction matérielle (pilote) et la couche du système de fichiers. Avantages C'est la méthode la moins onéreuse puisqu'elle ne demande aucun matériel supplémentaire. Cette méthode possède une grande souplesse d'administration (logiciel). Cette méthode présente l'avantage de la compatibilité entre toutes les machines équipées du même logiciel de RAID (c’est-à -dire du même système d'exploitation) Inconvénients L'inconvénient majeur réside dans le fait que cette méthode repose sur la couche d'abstraction matérielle des périphériques qui composent le volume RAID. Pour diverses raisons, cette couche peut être imparfaite et manquer de certaines fonctions importantes comme, par exemple, la détection et le diagnostic des défauts matériels et/ou la prise en charge du remplacement à chaud (Hot-swap) des unités de stockage. La gestion du RAID monopolise des ressources systèmes (légèrement le processeur et surtout le bus système) qui pourraient être employées à d'autres fins. La baisse de performances due à la gestion logicielle du raid est particulièrement sensible dans des configurations où le système doit transférer plusieurs fois les mêmes données comme, par exemple, en RAID1, et, assez faible, dans des configurations sans redondance : exemple, le RAID 0. L'utilisation du RAID sur le disque système n'est pas toujours possible. Diverses implémentations La plupart des systèmes d'exploitation grand public permettent déjà de mettre en Å“uvre le RAID logiciel, qu'il s'agisse de Microsoft Windows, d'une distribution Linux quelle qu'elle soit, ou de Mac OS X. Microsoft Windows XP (et supérieur) gère le RAID 0 et 1 par le logiciel, et peut gérer le RAID 5 moyennant une petite adaptation5 Microsoft Windows 2003 Server gère logiciellement le RAID 0, 1, et 5. Mac OS X gère logiciellement le RAID 0, 1 et la concaténation. Le noyau Linux (>=2.6) gère logiciellement le RAID 0, 1, 4, 5, 6, et 10 ainsi que les combinaisons de ces modes. Les RAID logiciels de Microsoft Windows et de Linux sont incompatibles [réf. nécessaire] entre eux 6. Le RAID pseudo-matériel L'extrême majorité des contrôleurs RAID bon marché intégrés à de nombreuses cartes mères récentes en 2004/2005 gèrent souvent le RAID 0 et 1 sur des disques IDE ou SATA. Malgré le discours marketing qui tend systématiquement à induire en erreur sur ce point, il ne s'agit pas de RAID matériel à proprement parler, mais plutôt d'un contrôleur de disque doté de quelques fonctions avancées. D'un point de vue strictement matériel, cette solution hybride n'est pas différente d'un RAID logiciel. Elle diffère cependant sur l'emplacement des routines logicielles de gestion du RAID. Avantages L'intérêt principal de ce type de RAID est d'apporter une solution au troisième problème du RAID logiciel, à savoir qu'il ne peut pas toujours servir à héberger les fichiers du système d'exploitation puisque c'est justement ce dernier qui permet d'y accéder. Dans ce type de RAID, la présence d'un BIOS intégrant les routines logicielles basiques de gestion du RAID permet de charger en mémoire les fichiers essentiels du système d'exploitation (le noyau et les pilotes essentiels). Puis, le pilote du contrôleur intègre les mêmes routines logicielles de gestion du RAID et fournit alors aux couches supérieures de l'OS non pas un accès aux périphériques, mais un accès au volume RAID qu'il émule. Inconvénients En dehors de cet avantage important, ce type de RAID cumule les défauts des deux autres approches : Les limitations de performances sont les mêmes que pour le raid logiciel, car il s'agit effectivement d'un RAID logiciel camouflé. Un problème important posé par ces contrôleurs hybrides est leur piètre gestion des défauts matériels et leurs fonctionnalités BIOS généralement limitées. L'interopérabilité est très mauvaise surtout si l'on considère qu'il s'agit généralement de matériel intégré aux cartes mères des ordinateurs. Pire, le changement de carte-mère (voire simplement de version de bios), si la nouvelle utilise des jeux de puces différents, peut imposer de reconstruire le RAID entièrement. De manière générale, une reconstruction est possible si l'on reste dans des contrôleurs RAID de même marque, mais de modèles différents, mais il n'existe pas de règle définie de compatibilité. La fiabilité annoncée de ces dispositifs est assez controversée[citation nécessaire]. Le RAID matériel Dans le cas du RAID matériel, une carte ou un composant est dédié à la gestion des opérations. Le contrôleur RAID peut être interne à l'unité centrale (carte d'extension) ou déporté dans une baie de stockage. Un contrôleur raid est en général doté d'un processeur spécifique, de mémoire, éventuellement d'une batterie de secours, et est capable de gérer tous les aspects du système de stockage RAID grâce au microcode embarqué (firmware). Du point de vue du système d'exploitation, le contrôleur RAID matériel offre une virtualisation complète du système de stockage. Le système d'exploitation considère chaque volume RAID comme un disque et n'a pas connaissance de ses constituants physiques. Avantages Les contrôleurs RAID matériels permettent la détection des défauts, le remplacement à chaud des unités défectueuses et offrent la possibilité de reconstruire de manière transparente les disques défaillants. Mais les systèmes d'exploitation évolués permettent également cela si le matériel le permet. La charge système (principalement l'occupation du bus) est allégée. (surtout dans des configurations avec beaucoup de disques et une forte redondance) Les vérifications de cohérence, les diagnostics et les maintenances sont effectués en arrière-plan par le contrôleur sans solliciter de ressources système. Inconvénients Les contrôleurs RAID matériels utilisent chacun leur propre système pour gérer les unités de stockage. En conséquence, au contraire d'un RAID logiciel, des disques transférés d'un système à un autre ne pourront pas être récupérés si le contrôleur RAID n'est pas exactement le même (firmware compris). Il est donc conseillé de posséder une deuxième carte en cas de panne de la première. Les cartes d'entrée de gamme possèdent des processeurs de puissance bien inférieure à celle des ordinateurs actuels. On peut donc avoir de bien moins bonnes performances pour le même prix qu'un RAID logiciel. Le coà»t : l'entrée de gamme se situe aux alentours de 200 € mais les cartes plus performantes peuvent souvent dépasser les 1 000 €. Le contrôleur RAID est lui-même un composant matériel, qui peut tomber en panne. Son logiciel (firmware) peut contenir des erreurs, ce qui constitue un autre risque de panne (un nouveau "single-point-of-failure"). Il est peu probable qu'un RAID actuel contienne des erreurs de programmation (bugs) car il est garanti en moyenne une dizaine d'années. Les différents fabricants de contrôleurs RAID fournissent des outils de gestion logicielle très différents les uns des autres (et de qualité parfois inégale). À l'opposé, les outils de gestion du RAID logiciel fournis avec un système d'exploitation sont généralement bien intégrés dans ce système. La durée du support d'un contrôleur RAID par son constructeur (correction de bugs dans le firmware, par exemple), parfois liée à l'arrivée de nouveaux produits rendant les anciens obsolètes, peut-être moins longue ou plus volatile que le support du RAID logiciel par le fournisseur du système d'exploitation. Le constructeur peut même disparaitre (ce qui est assez rare parmi les fabricants de systèmes d'exploitation). Une moindre souplesse par rapport au RAID logiciel, qui dispose d'une couche d'abstraction permettant de gérer du RAID au-dessus de tous types de périphériques blocs supportés par le système d'exploitation, locaux ou distants (ATA, SCSI, ATA over Ethernet, iSCSI… et toutes les combinaisons possibles entre eux). Les contrôleurs RAID sont spécialisés pour un seul type de périphérique bloc. Pour les niveaux de RAID, il y en a plein, mais les plus courants sont : - RAID 0 : stripping pour augmenter la volumétrie et les performances, aucune sécurité, minimum 2 disques - RAID 1 : mirroir (donc sécurité), minimum 2 disques - RAID 5 : stripping avec parité répartie, donc performance + sécurité, minimum 3 disques - RAID 6 : comment RAID 5 mais avec double parité - RAID 10 association de RAID 0 et 1, donc stripping + mise en mirroir de toutes les données, donc performance + sécurité, le plus luxueux, minimum 4 disques Au sujet du RAID hardware : De base, un disque dur, ce n'est pas fiable. Donc si tu mets plusieurs disques durs dans une même grappe RAID, les probabilités mathématiques font que tu augmentes les chances de perdre les données !!! On a tendance à croire que le RAID sert à protéger les données, ce qui est partiellement faux. Le RAID sert à 2 choses : - continuité de service => suite à la perte d'un disque, on peut continuer à travailler.... indispensable en entreprise, un peu moins à la maison - performance => plus on ajoute d'axe (bras mécanique de disque dur), plus on augmente les perfs.... phénomène entre amplifié par les controleurs RAID qui ont beaucoup de mémoire cache. Pour la sécurité des données, comme je l'ai déjà répété de nombreuses fois, il faut des sauvegardes sur support externe (ou au minimum une réplication via le réseau sur un 2nd serveur.... attention toutefois aux réplication, car un fichier supprimé ou corrompu est également répliqué la nuit suivante.... donc rien ne remplace une vraie sauvegarde effectuée ponctuellement) Comme dis précédemment, de mauvais disques ne font qu'augmenter les risques de pertes de données. Il y a de nombreux risques d'erreurs sur les disques.... évidemment si il y a la panne franche, le disque est HS, là on ne discute plus. Mais ce cas est de plus en plus rare quand même, les disques d'aujourd'hui sont beaucoup plus fiables que ceux qu'il y a 20 ans. Ceci dit, si on prend un disque bas de gamme, et qu'on l'utilise de façon soutenue, on va l'user prématurément. Dans les datasheet des disques, il est indiqué son utilisation : 24/7, quantité de données échangées sur une période de temps, etc. Entre un disque bas de gamme et un disque haut de gamme, l'électronique, et la mécanique ne sont pas du tout les mêmes. J'ai croisé un expert en stockage qui avait créé un profil I/O permettant de détruire un disque SATA en moins de 24h, là où un disque pro accepte la même charge pendant plusieurs mois !!! A coté de ces pannes mécaniques et électronique, il existe un problème primordial et totalement méconnu : l'état de surface du disque. Quand un disque n'arrive pas à lire un secteur, il réessaye de nombreuses fois avant d'y arriver. Ce qui peut prendre trop de temps. Si ce temps est raisonnable, le système d'exploitation va attendre que la donnée finisse par arriver. Si la donnée n'arrive jamais, sous Windows on peut avoir aux choix : un popup qui signale l'erreur de lecture, ou le célèbre BSOD dans le pire des cas. Si ce disque est intégré dans une grappe RAID logicielles, le comportement sera plus ou moins le même, car le driver RAID logiciel est dépendant du driver de l'OS. Ensuite, la couche qui gère le RAID (mdadm sous Linux par exemple, utilisé dans les Synology), va décider si l'erreur est récupérable, ou marquer la donnée comme perdue, voire de décider de marquer le disque complet comme défectueux, ce qui nécessitera un rebuild. Maintenant, si ce même disque est branché sur une carte RAID hardware, là y'a pas 36 solutions, la réaction est systématiquement la même, la carte dégage le disque. Donc RAID complet dégradé, alors que le disque a juste mis quelques millisecondes de trop à lire la donnée !!! Là où c'est drôle (ou pas....), c'est que le disque n'est pas mort, donc on force le rebuild sur le même disque.... oui sauf que le temps de ça reconstruise, on lit à fond les données sur les autres disques, donc on a de très grande chance que l'un des autres disques mette trop de temps à lire un secteur... donc celui-ci est dégagé du RAID à son tour.... et si on est en RAID 5, alors 2 disques de perdus impliquent une perte totale des données !!!! Gnarf Et je peux vous assurer que cette situation se produit très souvent avec les disques SATA non prévus pour fonctionner en RAID hardware. Alors en entreprise, on n'a pas trop de problème, car les disques SAS sont tous prévus pour fonctionner en RAID. Alors c'est quoi la différence ? On a dis plus haut que l'électronique et la mécanique des disques SAS est renforcée. Mais pas que. Il y a aussi l'état de surface (meilleure qualité des plateaux magnétiques). Regardez les datasheet, on passe d'une erreur pour 10^14 à une erreur pour 10^15 octets. Ce qui permet à ces disques d'avoir un firmware différent, qui réagira différemment aux secteurs difficiles à lire. On ne s'autorise qu'un temps très faible pour lire la donnée, afin de ne pas se faire dégager de la grappe RAID par le contrôleur RAID. Si on est vraiment pas capable de lire la données, alors on en informe rapidement la carte, qui prend la bonne décision (on dégage le disque....). Chez Western Digital, ce phénomène est bien documenté, et la paramètre permettant de régler le temps de recovery de la donnée se nomme le TLER (time-limited error recovery). Le nom est différent chez les concurrents. Par chance, en disques SATA, on trouve des disques avec le TLER réglé comme il faut... chez WD, c'est la gamme RE4. Regardez la datasheet, ça n'a rien à voir avec un disque Green ou Red. C'est plus cher qu'un disque SATA classique, sans être au prix d'un disque SAS. En résumé, le RAID logiciel est beaucoup plus tolérant aux défaillance des disques que le RAID matériel. Et en plus le RAID logiciel est plus souple (il existe des outils de récupération de données, on peut facilement étendre un volume (surtout chez Syno), etc) Par contre le RAID matériel garde pour lui ses performances (contrôleur dédié au calcul de parité, mémoire cache), et sa fiabilité (il résiste mieux aux pertes de courant). Si je ne veux pas du RAID logiciel de chez Syno (le SHR, pour rappel basé les couches Linux mdadm et ext4), c'est que je ne trouve pas cela fiable. Il n’apprécie pas du tout les pertes de courant, sur le forum Syno officiel c'est bourré de gens qui ont perdu leur grappe RAID SHR suite aux coupures de courant. Alors bien sur l'onduleur est une solution, mais malgré cela, le format de filesystem sous Linux, ext4, n'est pas très fiable. Au risque de me faire taper dessus par les Linux fanboys, par expérience personnelle je trouve NTFS plus fiable. Et c'est sans compter JFS2 sous AIX, mais là on n'est plus vraiment dans le domaine de l'informatique personnelle. A propos du ZFS par KIWI Qu'est-ce que le ZFS par (Lazer) Pour le ZFS, il faut avant tout noter qu'il s'agit d'une techno proche de Btrfs qu'on trouve sous Linux. ZFS a été développé par Sun (avant que Oracle l'achète) et a laissé ce système de fichier se balader sur d'autre OS. ZFS inclu deux choses principales : un gestionnaire de disques et système de fichiers. Donc on le trouve sur : - Solaris (et les forks : Nexenta, IllumOS, ...) - FreeBSD (un des premier Unix libre a le supporter) - Linux (avec 2 methodes : FUSE ou dans le noyau) Je ne développerais pas la version Linux car à mon goà»t un peu trop instable et pas encore finie. On trouve ZFS sur deux "distributions" de serveurs de fichiers : FreeNAS et NAS4Free (fork de FreeNAS). Fonctionnalités de ZFS : - Raid : mirror / raid5 (raidz1) / raid6 (raidz2) / raid7 (raidz3) - Scrubbing : le système peux faire une vérification complète de l'ensemble du FS pour vérifier que les checksum n'ont pas changés car sur les gros HD, la corruption des données arrive plus souvent qu'on ne le pense - Deduping : ne garder qu'une copie des données sur le HD (par exemple des VM ou des backup... il y a souvent les même datas) - Compression transparente : les block de données sont compressés sur le FS, ce qui permet de gagner de la place ET de la BP en lecture - Snapshotting - Mirroring distante grâce aux snapshot qu'on peux envoyer via SSH ou netcat par exemple (utile pour des backup à distance...). - Possibilité d'augmenter les disques en taille sans que ca n'affecte le file system. - Sur certain OS : export iSCSI et/ou NFS - Possibilité d'indiquer le nombre de copies de fichiers en plus du sous système raid (eg : etre capable que tous les fichiers soient copiés completement sur au moins "n" disques). - Cache lecture / écriture sur SSD - Quasi illimité en nombre de fichier et taille du file system. - Quota - Portabilité des pool ZFS entre OS, c'est a dire que vous pouvez effectuer un pool ZFS sur un Solaris, l'exporter et mettre les HD sur un FreeBSD ou autre. - Pas d'importance dans l'ordre des HD, vous pouvez faire un zpool export d'un pool et mélanger les HD, le zpool import se débrouillera a trouver ses petits. ====> https://fr.wikipedia.org/wiki/ZFS Par KIWI Qu'est-ce qu'à besoin ZFS : - des disques peut importe les tailles de disques, on peux se débrouiller avec - de CPU (si possible des CPU qui sont capables de faire des calculs AES, type core i3/i5/i7, Atom Avoton, ...) - de RAM (beaucoup si vous utilisez le deduping et/ou compression) - de processeur 64bits (oubliez les processeurs 32bits) Le minimun pour commencer c'est 2 disques et 4Go de RAM, plus ZFS a de ram plus il est content. Sur des serveurs du travail j'ai du bi Xeon E5 et 32Go de ram. Vous pouvez utiliser ZFS sur FreeNAS ou Nas4Free, par contre ces distribution ajoutent une surcouche spécifique à FreeBSD (et qui n'est pas obligatoire) qui peux chiffrer les données mais vous obligera a rester soit sur FreeNAS ou Nas4Free, et donc impossible de migrer sur d'autre distributions supportant ZFS. En général je fais ça à la main. Sur FreeBSD vous avez les disques nommés : ada0 / ada1 / ada2 / ada3, Exemple : zpool create file raidz ada0 ada2 raidz ada1 ada3 Permet de créer 2 raid5 (sur 2 hd, oui je sais), dans le même espace de fichiers. Pourquoi je mets du raid5 sur 2 hd ? Sur ZFS si on fait ça, automatiquement ça ajoute les checksum lors des écritures et donc le système de fichiers est donc sécurisé. Pourquoi 2 raid5 ? Juste que ceci permet de changer 1 à 1 les disques et passer par ex du 3To au 4To tranquillement sans devoir acheter 4 disques d'un coup. Une fois fait vous avez donc : zpool status pool: filer state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM filer ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 ada0 ONLINE 0 0 0 ada2 ONLINE 0 0 0 raidz1-1 ONLINE 0 0 0 ada1 ONLINE 0 0 0 ada3 ONLINE 0 0 0 errors: No known data errors On trouve donc monté en /filer le zpool. Qu'on peux facilement "segmenter" avec les concepts d'héritage des paramètres : zfs get all filer NAME PROPERTY VALUE SOURCE filer type filesystem - filer creation Wed Jan 8 19:44 2014 - filer used 4.47T - filer available 815G - filer referenced 27K - filer compressratio 1.00x - filer mounted yes - filer quota none default ... Exemple pour faire un sous FS "compta" avec une taille d'un 1G: zfs create filer/compta zfs set quota=1G filer/compta zfs set atime=no filer/compta Après ca vous donne : df -kh (...) filer 815G 27K 815G 0% /filer filer/applications 1.1T 270G 815G 25% /filer/applications filer/archives 1.2T 415G 815G 34% /filer/archives filer/compta 1.0G 47M 977M 5% /filer/compta Après pour le partage en CIFS ou AFP, le fonctionnement est identique à toute méthode de partage type : samba, netatalk Si vous avez d'autres questions... n'hésitez pas Kiwi vous répondra....
×