Installation du .NET Framework 3.5

Méthode 1

La méthode habituelle pour installer le Framework .NET 3.5 sur Windows 10 se détaille comme suit :

Allez dans Paramètres –> Système –> Applications et fonctionnalités –> Programmes et fonctionnalités

clip_image002

Cliquez sur “Activer ou désactiver des fonctionnalités Windows”

clip_image004

clip_image006

Malheureusement, il est possible que vous ayez l’erreur suivante :

Code d’erreur : 0x800F081F

clip_image008

Méthode 2

Si le téléchargement par Windows Update ne fonctionne pas, il faut alors utiliser le DVD ou le ISO d’installation de Windows 10. Puis, utiliser une commande DISM ou PowerShell.

Par exemple :

DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:d:\sources\sxs

Méthode 3

Pour simplifier les choses, l’équipe TechGainer.com ont développé un petit outil nommé “.NET Framework 3.5 Offline Installer for Windows 10 and 8.x”.

Il suffit de mettre le DVD ou monter l’image ISO, puis de cliquer sur Install.

clip_image010

http://www.techgainer.com/tools/net-framework-3-5-offline-installer-windows-10-8-x/

Raspberry Pi et capteurs de température

J’ai récemment configuré un Raspberry Pi afin d’obtenir des lectures de température et d’humidité.  Il existe de nombreux articles sur le Net pour y parvenir, mais je vous propose ma méthode de fonctionnement.

Mon objectif était d’utiliser un Raspberry Pi version 1 ou 2 et d’utiliser le capteur de température et d’humidité que j’avais sous la main avec le minimum d’éléments.  Le capteur est un DHT11. Les données de lecture doivent être accessibles par protocole SNMP afin d’être utilisé facilement avec un outils de monitoring.  Dans mon exemple, j’utilise PRTG.

http://osepp.com/products/sensors-arduino-compatible/humidity-temperature-sensor/

clip_image001

 

Pour cette installation, j’ai utilisé la dernière version de Raspbian en date du mois de février 2016. La version Jessie Lite suffit pour nos besoins. Vous pouvez bien sûr utiliser NOOBS qui contient tout ce qu’il faut pour installer Raspbian ou une autre distribution de votre choix, mais je n’ai effectué aucun test avec une autre distribution.

https://www.raspberrypi.org/downloads/raspbian/

Je vous décris rapidement ma méthode d’installation du système d’exploitation. En cas de problème, vous trouverez facilement d’autres procédures plus détaillées sur Internet.

Pour créer ma carte SD, j’utilise Win32 Disk Imager.

clip_image002
clip_image004

Une fois que vous avez démarré Raspbian sur votre RPi, vous devez étendre la partition pour utiliser toutes l’espace disponible sur votre carte SD.

sudo raspi-config

Choisissez l’option “Expand Filesystem”, puis redémarrer.

Mettre à jour le système :

sudo apt-get update
sudo apt-get upgrade

 

Branchement du capteur :

image

Le Raspberry Pi 2 contient plus de pins, mais les mêmes sont utilisés pour ce montage, peu importe le modèle.

Un script en Python sera utilisé pour obtenir les lectures de température et d’humidité du capteur DHT11.  L’information est disponible sur le site web Adafruit :

https://learn.adafruit.com/dht-humidity-sensing-on-raspberry-pi-with-gdocs-logging/software-install-updated

sudo apt-get install build-essential python-dev python-openssl
sudo apt-get install git
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install
cd examples

Pour accéder aux données du capteur, le programme doit obligatoirement être exécuté en tant que ROOT.

sudo python AdafruitDHT.py 11 4

Le programme en Python prend en paramètre le modèle du DHT (11 dans ce cas-ci) et le numéro de la pin utilisée pour les données (4).

Le programme devrait afficher la température et l’humidité sur une ligne.

clip_image002[4]

 

Si tout est bien branché, nous pouvons passer à l’étape suivante qui consiste à rendre les données accessibles par SNMP.

On modifie d’abord le programme AdafruitDHT.py pour obtenir d’un programme distinct permettant d’obtenir indépendamment la valeur de la température et celle de l’humidité. Vous pouvez placer les programmes où vous désirez.  Dans mon exemple, je place tout dans \root, car de toute façon, nos scripts et programmes doivent s’exécuter en root.

Voici les deux fichiers à créer :

sudo nano /root/temperature.py

import sys
import Adafruit_DHT

sensor_args = { '11': Adafruit_DHT.DHT11,'22': Adafruit_DHT.DHT22,'2302': Adafruit_DHT.AM2302 }

if len(sys.argv) == 3 and sys.argv[1] in sensor_args:
    sensor = sensor_args[sys.argv[1]]
    pin = sys.argv[2]
else:
    print 'usage: sudo ./Adafruit_DHT.py [11|22|2302] GPIOpin#'
    print 'example: sudo ./Adafruit_DHT.py 2302 4 - Read from an AM2302 connected to GPIO #4'
    sys.exit(1)

humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

if humidity is not None and temperature is not None:
    print '{0:0.1f}'.format(temperature)
else:
    print 'Failed to get reading. Try again!'
    sys.exit(1)

 

sudo nano /root/humidity.py

import sys
import Adafruit_DHT

sensor_args = { '11': Adafruit_DHT.DHT11,'22': Adafruit_DHT.DHT22,'2302': Adafruit_DHT.AM2302 }

if len(sys.argv) == 3 and sys.argv[1] in sensor_args:
    sensor = sensor_args[sys.argv[1]]
    pin = sys.argv[2]
else:
    print 'usage: sudo ./Adafruit_DHT.py [11|22|2302] GPIOpin#'
    print 'example: sudo ./Adafruit_DHT.py 2302 4 - Read from an AM2302 connected to GPIO #4'
    sys.exit(1)

humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

if humidity is not None and temperature is not None:
    print '{0:0.1f}'.format(humidity)
else:
    print 'Failed to get reading. Try again!'
    sys.exit(1)

 

Si on teste les deux programmes, on devrait obtenir ceci :

root@raspberrypi:~# python temperature.py 11 4

23.0

root@raspberrypi:~# python humidity.py 11 4

33.0

 

Nous obtenons donc une simple valeur.  Il nous reste à créer un petit script pour simplifier l’utilisation en SNMP par la suite :

sudo nano /root/dhtsensor.sh

#!/bin/bash

if [ "$1" = "-t" ]
then
echo .1.3.6.1.4.1.333.1
echo gauge
python /root/temperature.py 11 4
fi

if [ "$1" = "-h" ]
then
echo .1.3.6.1.4.1.333.2
echo gauge
python /root/humidity.py 11 4
fi

exit 0

Ce qui donne comme résultat :

root@raspberrypi:~# sh dhtsensor.sh -t

.1.3.6.1.4.1.333.1

gauge

23.0

root@raspberrypi:~# sh dhtsensor.sh -h

.1.3.6.1.4.1.333.2

gauge

33.0

 

Il nous reste à intégrer le tout dans notre serveur SNMP.

On procède à l’installation du client et serveur SNMP :

sudo apt-get install snmpd snmp

Vous pouvez modifier la configuration du serveur SNMP ou simplement remplacer le fichier de configuration par celui que je vous propose :

sudo mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak
sudo nano /etc/snmp/snmpd.conf

agentAddress 161
view systemonly included .1.3.6.1.2.1.1
view systemonly included .1.3.6.1.2.1.25.1
rocommunity public default -V systemonly
rocommunity6 public default -V systemonly
rouser authOnlyUser
sysLocation Sitting on the Dock of the Bay
sysContact Me <me@example.org>
sysServices 72
proc mountd
proc ntalkd 4
proc sendmail 10 1
disk / 10000
disk /var 5%
includeAllDisks 10%
load 12 10 5
trapsink localhost public
iquerySecName internalUser
rouser internalUser
defaultMonitors yes
linkUpDownNotifications yes
master agentx
pass .1.3.6.1.4.1.333.1 /bin/sh /root/dhtsensor.sh -t
pass .1.3.6.1.4.1.333.2 /bin/sh /root/dhtsensor.sh –h

 

Il reste une modification à effectuer au niveau des droits du service SNMP.  En effet, par défaut, le service utilise l’usager “snmp”.  Celui n’a toutefois pas les droits nécessaires pour récupérer des valeurs du capteur.  Il est nécessaire d’exécuter le service en root.

Notez qu’il existe certainement une façon plus sécurité d’obtenir le même résultat, mais pour mon usage actuel, cela convient.

Pour ce faire, il faut modifier le fichier suivant :

sudo nano /etc/default/snmpd

Remplacer “–u snmp –g snmp” par “-u root –g root”.

On redémarre finalement le service SNMP :

sudo /etc/init.d/snmpd restart

 

On croise les doigts et on teste notre serveur SNMP :

root@raspberrypi:~# snmpwalk -Os -c public -v 1 localhost .1.3.6.1.4.1.333.1

iso.3.6.1.4.1.333.1 = Gauge32: 23

Error: OID not increasing: iso.3.6.1.4.1.333.1 >= iso.3.6.1.4.1.333.1

root@raspberrypi:~# snmpwalk -Os -c public -v 1 localhost .1.3.6.1.4.1.333.2

iso.3.6.1.4.1.333.2 = Gauge32: 33

Error: OID not increasing: iso.3.6.1.4.1.333.2 >= iso.3.6.1.4.1.333.2

 

 

Ne reste plus qu’à utiliser ces nouvelles données dans votre système de monitoring.  Personnellement, j’utilise PRTG :

Ajoutez un nouvel équipement (notre Raspberry Pi) :

image

Ajoutez un capteur SNMP (personnalisé) permettant de surveiller une valeur numérique.

image

Entrez le chemin OID et autres paramètres du capteur :

image

Répétez les mêmes étapes pour ajouter un capteur pour l’humidité.

Si tout fonctionne bien, vous aurez deux nouveaux capteurs dans votre interface :

image

 

Voici un graphique de la température à la sortie d’un climatiseur d’une salle informatique :

image

RazorSQL–Outils de base de données

Mon outil ultime pour gérer toutes les sortes de bases de données qui se trouvent dans mon environnement est RazorSQL.

https://razorsql.com/

Il vous en coûtera 99,95$ par usager pour acquérir une licence.  Mais si vous avez de multiples et diverses bases de données à gérer, c’est un investissement qui vaut la peine.

La liste de bases de données supportées est impressionnante.

Je n’entrerai pas dans les détails de toutes les fonctionnalités, mais en voici quelques-unes que vous ne trouverez pas nécessairement dans d’autres logiciels du genre.

Connexion par tunnel SSH

Si vous avez une base de données qui n’est accessible que localement ou que vous n’avez pas la possibilité d’ouvrir un port de communication, RazorSQL offre la possibilité d’établir automatiquement un tunnel SSH pour vous connecter à votre base de données.  Il vous faut bien sûr un serveur SSH installé sur le serveur de base de données, mais vous aurez alors une connexion parfaitement sécurisée sans rendre votre base de données directement accessible de l’externe.

image

 

Générer la structure d’une table ou d’une base de données complète

Très pratique pour modifier une ou plusieurs tables.  Ou encore faire une sauvegarde de la structure.

Je l’utilise régulièrement pour modifier des tables lorsque je fais du développement.  On fait “Generate DDL”, ce qui nous donne le code SQL pour la création de la table.  Il ne reste plus qu’à modifier le code, puis faire un DROP TABLE et exécuter notre code.

image

image

 

Copier une ou plusieurs tables

RazorSQL permet facilement de copier une table en local ou même vers une autre base de données.

image

Pour copier vers une autre base de données, il faut d’abord établir une connexion dans un nouvel onglet, puis l’option devient disponible.

image

 

Exportation des résultats d’une requête de sélection

Il est facile d’exporter les résultats, soit vers le presse-papier ou dans différents formats, dont SQL ou Excel.

image