Supervision des serveurs de la plateforme : Différence entre versions

De Wiki d'activités IMA
(Semaine 6)
(Semaine 4)
Ligne 392 : Ligne 392 :
  
 
Grâce à l'utilisation de freecad pour simuler l'assemblage, j'ai pu découper du plexiglas pour fabriquer mon chassis. Le chassis a été réalisé avec une découpeuse laser sur du plexiglas.
 
Grâce à l'utilisation de freecad pour simuler l'assemblage, j'ai pu découper du plexiglas pour fabriquer mon chassis. Le chassis a été réalisé avec une découpeuse laser sur du plexiglas.
 +
 +
Après avoir récupéré mes pièces, j'ai assemblé le chariot.
  
 
=== <span style="color:#6FB7B7">Semaine 5</span> ===
 
=== <span style="color:#6FB7B7">Semaine 5</span> ===

Version du 25 juin 2018 à 10:28

Présentation générale du projet 1

Objectif du stage

L'objectif de ce stage est que trouver une application Web standard sous Linux permettant à un administrateur d'obtenir un tableau de bord de machines virtuelles désiminées sur plusieurs machines physiques. Configurer cette application pour obtenir les informations suivantes :

  • état de santé des machines physiques : température, état des disques, ...
  • occupation des machines physiques : utilisation CPU, utilisation espace disque, utilisation mémoire
  • état de santé des connexions réseau : réseau Renater, réseau ADSL, réseau SDSL
  • état de santé des machines virtuelles : temps d'exécution de chaque machine virtuelle
  • occupation des machines virtuelles : utilisation disque et mémoire
  • état de certaines applications critiques :
    • date de validité des clefs DNSSEC
    • dates des dernières sauvegardes des machines virtuelles

Voici le schéma du réseau de la plateforme maths/info

Plateforme Drawing.png

Recherche sur des applications de surveillance système et réseau

Nagios

Possibilités:

  1. Superviser des services réseaux : (SMTP, POP3, HTTP, NNTP, ICMP, SNMP, LDAP, etc.)
  2. Superviser les ressources des serveurs (charge du processeur, occupation des disques durs, utilisation de la mémoire paginée) et ceci sur les systèmes d'exploitation les plus répandus.
  3. Interface avec le protocole SNMP.
  4. La supervision à distance peut utiliser SSH ou un tunnel SSL (notamment via un agent NRPE).
  5. Les plugins sont écrits dans les langages de programmation les plus adaptés à leur tâche : scripts shell (Bash, ksh, etc.), C++, Perl, Python, Ruby, PHP, C#, etc.
  6. La vérification des services se fait en parallèle.
  7. Possibilité de définir une hiérarchie dans le réseau pour pouvoir faire la différence entre un serveur en panne et un serveur injoignable.
  8. La remontée des alertes est entièrement paramétrable grâce à l'utilisation de plugins (alerte par courrier électronique, SMS, etc.).
  9. Acquittement des alertes par les administrateurs.
  10. Gestion des escalades pour les alertes (une alerte non acquittée est envoyée à un groupe différent).
  11. Limitation de la visibilité, les utilisateurs peuvent avoir un accès limité à quelques éléments.
  12. Capacité de gestion des oscillations (nombreux passages d'un état normal à un état d'erreur dans un temps court).
  13. Créer ses propres plugins, dans le langage désiré. Il suffit de respecter la norme Nagios des Codes retour
    1. Code 0 : OK (tout va bien)
    2. Code 1 : WARNING (le seuil d'alerte est dépassé)
    3. Code 2 : CRITICAL (le service a un problème)
    4. Code 3 : UNKNOWN (impossible de connaître l'état du service)

Zabbix

Le « serveur ZABBIX » peut être décomposé en trois parties séparées : Le serveur de données, l'interface de gestion et le serveur de traitement. Chacune d'elles peut être disposée sur une machine différente pour répartir la charge et optimiser les performances.

Le système dont l'utilisation des ressources doit être analysée comporte un agent fonctionnant sous forme de daemon appelé zabbix-agentd et écoutant par défaut sur le port TCP 10050. Celui-ci est chargé d’exécuter sur le système différents scripts permettant d'échantillonner l'état des ressources des différents composants du système (Mémoire, CPU, débit réseau, entrées-sorties, nombre de connexion à une application, etc.). Le serveur Zabbix appelle donc régulièrement cet agent et lui demande les informations concernant telle ou telle ressource.

Son interface web est écrite en PHP. Elle agit directement sur les informations stockées dans la base de données. Chaque information nécessaire au serveur de traitement étant réactualisée automatiquement, il n'y a pas d'action à effectuer sur le binaire pour lui indiquer qu'il y a eu une mise à jour.

Cette interface dispose des fonctionnalités principales suivantes:

  1. Affichage des données et état des machines
  2. Génération de graphiques (évolution des données et état des machines/liens)
  3. Classement et groupement des machines surveillées
  4. Auto découverte de machines et ajout automatique
  5. Gestion fine des droits d'accès pour les utilisateurs de l'interface

MRTG

Multi Router Traffic Grapher (MRTG) est un logiciel développé sous licence GNU/GPL à l'initiative de Tobi Oetiker. Ce logiciel permet de surveiller et mesurer le trafic réseau. Il utilise le protocole SNMP pour interroger des équipements réseaux tels que des routeurs, commutateurs, ou bien encore serveurs, disposant d'une MIB.

MRTG a été développé en Perl , et peut être lancé sous Windows, Linux, MacOS et NetWare.

PRTG

PRTG (Paessler Router Traffic Grapher) est un logiciel qui permet grâce à l'analyse de trames SNMP de créer des graphiques sur le trafic réseau. PRTG est aussi capable de faire du sniffing.

Xymon

Xymon s'inspire du logiciel Big Brother System and Network Monitor de Quest Software. De 2002 et 2004, une version open source s'est appelée bbgen toolkit, puis entre 2005 et 2008 Hobbit, mais étant déjà une marque déposée, l'outil a finalement été baptisé Xymon depuis.

Xymon offre une interface graphique de supervision dans un navigateur web, énumérant les états de différents services sur chaque machine. Il permet de paramétrer des envois de courriels après un certain temps de dégradation, par exemple après 30 minutes d'espace disque utilisé à plus de 90 %. On peut ensuite afficher les statistiques de tous ces services sous forme de graphique.

Notices d'installation

Installation de Nagios sur zabeth17

Nagios 4.3.2 est la dernière version au moment de l'écriture, avant de compiler Nagios à partir de la source; installez des paquets dépendants pour l'outil de surveillance Nagios. Avant de commencer, il faut Passer à l'utilisateur root.

apt update

Et puis, il faut assurer que le système répond à toutes les exigences logicielles pour la compilation et l'installation de Nagios. Dans la première étape,on a met à jour référentiels système et progiciels en émettant la commande ci-dessous.

su 

À l'étape suivante,on a lancé une nouvelle commande afin d'installer les utilitaires nécessaires pour gérer le système à partir de la ligne de commande.

 apt-get -y install build-essential apache2 php openssl perl make php-gd libgd2-xpm-dev libapache2-mod-php libperl-dev libssl-dev daemon wget apache2-utils unzip

Créez un utilisateur pour autoriser l'exécution des commandes externes via l'interface Web.

utilisateur: nagios

groupe: nagcmd

Ajoutez également "nagios" et l'utilisateur apache (www-data) à la partie du groupe "nagcmd".

useradd nagios
groupadd nagcmd
usermod -a -G nagcmd nagios 
usermod -a -G nagcmd www-data
cd /tmp
wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.3.2.tar.gz
tar -zxvf nagios-4.3.2.tar.gz
cd /tmp/nagios-4.3.2/  

On a utilisé les étapes ci-dessous pour compiler Nagios à partir du code source.

./configure --with-nagios-group=nagios --with-command-group=nagcmd --with-httpd_conf=/etc/apache2/sites-enabled/  
make all 
make install 
make install-init 
make install-config 
make install-commandmode 
make install-webconf 

Tout ce dont on a besoin est de mettre à jour l'adresse e-mail dans le fichier "/usr/local/nagios/etc/objects/contacts.cfg" pour "nagiosadmin" avant de démarrer Nagios ...

  vi /usr/local/nagios/etc/objects/contacts.cfg


Et puis on a changé l'adresse e-mail dans ce fichier pour recevoir la notification.

on a créer un compte utilisateur "nagiosadmin" pour connecter à l'interface Web de Nagios. Ensuite, on a défini un mot de passe à l'utilisateur "nagiosadmin".

htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin 

Pour activer CGI

a2enmod cgi

Et puis redémarrer le service Web Apache pour que les nouveaux paramètres prennent effet.

service apache2 restart

On a téléchargé et installé les plugins Nagios pour surveiller les services.

cd /tmp
wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz
tar -zxvf /tmp/nagios-plugins-2.2.1.tar.gz
cd /tmp/nagios-plugins-2.2.1/

Compiler et installer les plugins.

./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
 make install

Pour Vérifier les exemples de fichiers de configuration Nagios.

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Ensuite, démarrer l'outil de surveillance Nagios en utilisant la commande suivante.

 /etc/init.d/nagios start

en fin , on a réussi à installer Nagios 4.3.2 sur Debian 9 .

Ajoute l'hôte linux à la surveillance de nagios en utilisant le plugin NRPE

NRPE Plugin:

Le plugin Nagios Remote Plugin Executor (en abrégé NRPE) nous permet de surveiller les applications et services s'exécutant sur des hôtes Linux / Windows distants. Ce module NRPE permet à Nagios de surveiller les ressources locales comme le processeur, la mémoire, le disque, l'échange, etc. de l'hôte distant.

Et il faut que nôtre système distant doit avoir ce plugin NRPE installé.

Nagios Remote Host:

Installez le plug-in NRPE et les plugins Nagios:

Les plugins NRPE et Nagios ne sont pas disponibles dans le référentiel de base. Donc, pour CentOS 7 / RHEL 7, nous devons configurer le référentiel EPEL sur nôtre machine.

rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

Ensuite, on a installeé le module complémentaire NRPE et les plugins Nagios.

apt-get install -y nagios-nrpe-server nagios-plugins

Après, on a Modifié le fichier de configuration NRPE pour accepter la connexion du serveur Nagios

vi /etc/nagios/nrpe.cfg

On a ajouteé l'adresse IP des serveurs Nagios, séparés par une virgule comme ci-dessous.

 allowed_hosts=127.0.0.1,172.26.145.112


Configurer les vérifications Nagios:

Le fichier /etc/nagios/nrpe.cfg contient les commandes de base pour vérifier les attributs (CPU, mémoire, disque, etc.architecure) et les services (HTTP, FTP, etc.) sur les hôtes distants. On a fait les lignes de commande ci-dessous pour surveiller les attributs à l'aide des plugins Nagios.

command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/mapper/server--vg-root
command[check_swap]=/usr/lib/nagios/plugins/check_swap -w 20% -c 10%
command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200

Dans la définition de commande ci-dessus -w signifie avertissement et -c signifie critique.

Ensuite, on a exécuté la commande ci-dessous dans un autre terminal.

/usr/lib/nagios/plugins/check_procs -w 150 -c 200

Sortie:

PROCS CRITICAL: 235 processes | procs=235;150;200;0;

Nagios plugin comptera les processus en cours et on avertiras lorsque le nombre de processus est supérieur à 150, ou il nous indiquera critique lorsque le nombre de processus est supérieur à 200, et en même temps, la sortie affichera OK si le nombre est inférieur à 150

On peux ajuster le niveau d'alerte selon nos besoins. On a chnagé l'avertissement à 200 et critiquez à 250 pour l'essai.

/usr/lib/nagios/plugins/check_procs -w 200 -c 250 

Sortie:

 PROCS WARNING: 235 processes | procs=235;200;250;0;

Ces définitions de commande doivent être entrées dans le fichier modèle sur l'hôte du serveur Nagios pour activer la surveillance.

Redémarrez le service NRPE.

/etc/init.d/nagios-nrpe-server restart

Nagios Server Host:

Les plugins NRPE et Nagios ne sont pas disponibles dans le référentiel de base. Donc, pour CentOS 7 / RHEL 7, nous devons configurer le référentiel EPEL sur nôtre machine.

rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

Pour installer check_nrpe plugin:

apt-get -y install nagios-nrpe-plugin

Et puis, on a édité le fichier de configuration de Nagios pour inclure tous les fichiers "* .cfg" dans le répertoire "/ usr / local / nagios / etc / servers".

vi /usr/local/nagios/etc/nagios.cfg

Ajouter ou décommenter la ligne suivante.

cfg_dir=/usr/local/nagios/etc/servers

Ensuite, créer un répertoire de configuration.

mkdir /usr/local/nagios/etc/servers

Pour configurer le serveur Nagios pour qu'il surveille l'ordinateur client distant, nous devons créer une définition de commande dans le fichier de configuration d'objet Nagios pour utiliser le plugin "check_nrpe". Pour ouvrir le fichier "commands.cfg" ....

vi /usr/local/nagios/etc/objects/commands.cfg

Ensuite, ajouter la définition de commande Nagios suivante au fichier.

# .check_nrpe. command definition
define command{
command_name check_nrpe
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -t 30 -c $ARG1$
}

Ajouter un hôte Linux au serveur Nagios:

Il faut créer un fichier de configuration client (/usr/local/nagios/etc/servers/client.itzgeek.local.cfg) pour définir les définitions d'hôte et de service de l'hôte Linux distant. Nous pouvons également utiliser le modèle suivant et le modifier en fonction de vos besoins. Le modèle suivant permet de surveiller les utilisateurs connectés, le chargement du système, l'utilisation du disque (/ - partitions), le swap et le processus total.

vi /usr/local/nagios/etc/servers/client.zabeth16.local.cfg

Ensuite, on a copié le contenu ci-dessous dans le fichier /usr/local/nagios/etc/servers/client.zabeth16.local.cfg.

define host
use linux-server
host_name client.zabeth16.local{
alias client.zabeth16.local
address 172.26.145.107
}
define hostgroup{
hostgroup_name linux-server
alias Linux Servers
members client.zabeth16.local
 }
define service{
use local-service
host_name client.zabeth16.local
service_description SWAP Uasge
check_command check_nrpe!check_swap
}
define service{
use local-service
host_name client.zabeth16.local
service_description Root / Partition
check_command check_nrpe!check_root
}
define service{
use local-service
host_name client.zabeth16.local
service_description Current Users
check_command check_nrpe!check_users
}
define service{
use local-service
host_name client.zabeth16.local
service_description Total Processes
check_command check_nrpe!check_total_procs
}
define service{
use local-service
host_name client.zabeth16.local
service_description Current Load
check_command check_nrpe!check_load
}

Pour vérifier Nagios pour toute erreur.

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Pour arrêter le serveur Nagios

service nagios stop

Pour redémarrer le serveur Nagios

service nagios restart

En fin,On a réussi à ajouter deux l'hôte Linux distant: zabeth15 et zabeth16. En plus, on a ajouté un fonction super check smart.On peux trouver tous les fonctions dans le fichier en utillisant le commande ci-dessous.

dpkg -L monitoring-plugins-basic

Pour changer le root à nagios

su -s /bin/bash nagios


Et puis, on a ajouté une ligne dans le fichier /etc/nagios/nrpe.cfg pour le fonction check_smart.

 commade[check_smart]= super check_smart

On a ajouté une ligne dans le fichier /etc/super.tab

  check_smart    "/usr/lib/nagios/plugins/check_ide_smart -d /dev/sda"   nagios

Et ajouté un fonction dans le fichier /usr/local/nagios/etc/servers/client.zabeth16.local.cfg qui se trouve à zabeth17

define service{
use local-service
host_name client.zabeth16.local
service_description Disk smart Load
check_command check_nrpe!check_smart
}

Enfin, lancé super check_smart

Installation de Zabbix sur zabeth17
  • Récupération du paquetage Zabbix pour Debian
 wget http://repo.zabbix.com/zabbix/3.4/debian/pool/main/z/zabbix-release/zabbix-release_3.4-1+stretch_all.deb
 mv zabbix-release_3.4-1+stretch_all.deb  /usr/src
  • Installation du paquetage
 cd /usr/src
 dpkg -i zabbix-release_3.4-1+stretch_all.deb 
 apt install zabbix-frontend-php
 apt install zabbix-server-mysql
  • Création de la base de données pour le serveur Zabbix
zcat /usr/share/zabbix-server-mysql/schema.sql.gz | mysql -uzabbix -p zabbix
zcat /usr/share/zabbix-server-mysql/data.sql.gz | mysql -uzabbix -p zabbix
zcat /usr/share/zabbix-server-mysql/images.sql.gz | mysql -uzabbix -p zabbix
  • Ajout du mot de passe de la base dans le fichier de configuration de Zabbix
 vi  /etc/zabbix/zabbix_server.conf
 service zabbix-server start
 cd /etc/apache2/conf-enable/
 ln -s ../conf-available/zabbix-frontend-php.conf 
 service apache2 stop
 service apache2 start
  • Ajout des modules PHP pour Zabbix
 apt install php7.0-bcmath
 vi /etc/php/7.0/apache2/php.ini 
 service apache2 restart
Installation de XYmon sur zabeth17
Installation des smart disks tools sur zabeth17

Travail à effectuer

  • Essai d'installation de Nagios, Zabbix et Xymon sur zabeth17 avec remontée d'informations de zabeth15 et de zabeth16 (charge cpu, température, état des systèmes de fichiers et des disques). Décrire pas à pas dans le Wiki les opérations à faire pour les installations.
  • Dessiner le schéma du réseau de la plateforme maths/info, trouver un moyen de tester les connexion réseau.
  • Trouver des commandes pour évaluer l'état des disques du serveur de sauvegarde (baleine). Regarder ce que peut dire l'utilitaire linux "hpssacli". Regarder aussi du coté des utilitaires "smart disks". Commencer par installer les utilitaires smart disk sur zabeth17 pour tester.
  • Réparer l'espace de stockage de baleine (un disque semble presque défecteux), essayer d'évaluer la durée de vie des autres disques, les remplacer si nécessaire.
  • Faire un essai de sauvegarde d'une machine virtuelle sur baleine.
  • Essayer de trouver un outil pour afficher des informations sur les KSK et ZSK du DNSSEC (en particulier la date de création et la date de fin de vie).

Présentation générale du projet 2

Objectif du stage

L'objet de ce projet est de concevoir et fabriquer des robots mobiles relativement petits, simples et peu coûteux. Les robots devront pouvoir communiquer entre eux par infrarouge. La simplicité et le bas côut de fabrication des robots doit permettre d'en fabriquer en nombre suffisant pour simuler des comportements d'essaim d'insectes.

Description du stage

L'objectif de mon stage est de réaliser une petite carte de contrôle de robot mobile. Les robots pourront avoir trois types de motorisations : vibreurs, servo-moteurs continus et micro-moteurs.

J'ai pris une carte qui est déjà conçues à l'école. Il y a un contrôleur de moteur (TB6612), des détecteurs infrarouges (3 TSOP IR) , une LED infrarouge et des lignes pour les servo-moteurs dans cette carte.

Par la suite, il faudra écrire le code ATMega328p pour générer les PWM nécessaires aux servo-moteurs ou au contrôleur de moteurs. Pour la communication nous utiliserons le protocole RC5 qui permet une certaine immunité à la lumière ambiante.

Enfin, nous allons tester les trois motorisations: vibreurs, servo-moteurs continus et micro-moteurs pour vérifier le bon fonctionnement de la carte. Si plusieurs robots fonctionnent certains seront programmés pour repérer les autres et les poursuivre.

Avancement du stage

Semaine 3

Durant la troisième semaine, j'ai utilisé le logiciel inkscape pour construire le chassis du robot. Ensuite, comparé à ce que mes camarades faisaient auparavant, j'ai apporté quelques améliorations. J'ai utilisé le logiciel freecad pour vérifier si la taille des pièces était correcte en assemblant ces pièces. La version de freecad que j'utilisais n'avait pas la fonctionnalité assemblage. Donc j'ai du trouver un paquet d'installation sur Internet pour l'ajouter le module assemblage à freecad. Ensuite, j'ai importé l'image de la structure des pièces realisé par inkscape dans le logiciel freecad. J'ai modifié l'image vectorielle plusieurs fois pour que les pièces puissent être assemblées avec succès.

Le fichier freecad est disponible: Media:support_robot.zip

Le fichier vectoriel est disponible : Media:new_robot_plain.svg

L'image ci-dessous en donne un aperçu.

New robot plain.png

Semaine 4

J'ai pris un circuit déjà disponible mais je l'ai soudé :

Robot PCB.png
Robot pcb.jpg


Grâce à l'utilisation de freecad pour simuler l'assemblage, j'ai pu découper du plexiglas pour fabriquer mon chassis. Le chassis a été réalisé avec une découpeuse laser sur du plexiglas.

Après avoir récupéré mes pièces, j'ai assemblé le chariot.

Semaine 5

J'ai appris à utiliser d'une bibliothèque infrarouge sur Arduino par ce site: https://learn.adafruit.com/using-an-infrared-library/controlling-neopixels-with-ir-1

Tout d'abord, j'ai installé la bibliothèque IRLib en suivant les étapes sur ce site.Après l'installation, je peux trouver des codes dans l'exemple de Arduino IDE.J'ai trouvé un code pour recevoir un signal IR, le décoder et l'imprimer informations à ce sujet sur le moniteur série. Voici un extrait du code:

void setup() {
 Serial.begin(9600);
 delay(2000); while (!Serial); //delay for Leonardo
 myReceiver.enableIRIn(); // Start the receiver
 Serial.println(F("Ready to receive IR signals"));
}
void loop() {
 //Continue looping until you get a complete signal received
 if (myReceiver.getResults()) {
   myDecoder.decode();           //Decode it
   myDecoder.dumpResults(true);  //Now print results. Use false for less detail
   myReceiver.enableIRIn();      //Restart receiver
 }
}

Et puis, j'ai vérifié que la connexion du récepteur IR. La broche gauche est connecté à n'importe quelle broche d'entrée numérique sur le Arduino. Dans mon cas, j'ai utilisé la broche 2. Puis j'ai confirmé que les autres broches sont correctement connectées: la broche centrale à la masse et la broche droite à + 5v.

Light TSOP38238.png

Enfin, j'ai utilisé d'une télécommande IR que on utilisons pour contrôler nos téléviseur, le récepteur IR peut bien accepter l'information et ca marche bien.

J'ai trouvé un code pour piloter les moteurs dans le logiciel, Puis j'ai modifié la connexion de broche dans le code, et Les moteurs peuvent fonctionner normalement.Voici un extrait du code:

int STBY = 9; //standby
//Motor A
int PWMA = 6; //Speed control
int AIN1 = 8; //Direction
int AIN2 = 7; //Direction
//Motor B
int PWMB = 10; //Speed control
int BIN1 = 4; //Direction
int BIN2 = A5; //Direction
void loop(){
move(1, 255, 1); //motor 1, full speed, left
move(2, 255, 1); //motor 2, full speed, left
delay(1000); //go for 1 second
stop(); //stop
delay(250); //hold for 250ms until move again
move(1, 128, 0); //motor 1, half speed, right
move(2, 128, 0); //motor 2, half speed, right
delay(1000);
stop();
delay(250);
}

Semaine 6

J'ai combiné et modifié les deux ensembles de code ci-dessus pour implémenter les fonctions suivantes: Lorsque j'appuie sur 2 avec la télécommande, la voiture avance; Lorsque j'appuie sur 8 avec la télécommande, la voiture recule; Lorsque j'appuie sur 4 avec la télécommande, la voiture tourne à gauche; Lorsque j'appuie sur 6 avec la télécommande, la voiture tourne à droite. Voici un extrait du code:

if (myReceiver.getResults()) {
   myDecoder.decode();           //Decode it
//    myDecoder.dumpResults(false);  //Now print results. Use false for less detail
   int value=myDecoder.value&0xff;
   switch(value){
     case 2 :
       move(1, speed, 0);
       move(2, speed, 1);
       break;
     case 4 :
       move(1, speed, 1);
       move(2, speed, 1);
       break;  
     case 6 :
       move(1, speed, 0);
       move(2, speed, 0);
       break;   
     case 8 :
       move(1, speed, 1);
       move(2, speed, 0);
       break; 
   
   }


Le même code pour le robotIRServo:

if (myReceiver.getResults()) {
   myDecoder.decode();           //Decode it
//    myDecoder.dumpResults(false);  //Now print results. Use false for less detail
   int value=myDecoder.value&0xff;
   switch(value){
     case 2 :
       motor1.write(0);
       delay(50);
       motor2.write(180);
       break;
     case 4 :
       motor1.write(100+speed);
       delay(50);
       motor2.write(100+speed);
       break;  
     case 5 :
       motor1.write(90);
       motor2.write(90);
       break;  
     case 6 :
       motor1.write(90-speed);
       motor2.write(90-speed);
       break;   
     case 8 :
       motor1.write(180);
       delay(50);
       motor2.write(0);
       break; 
   }