samedi 26 novembre 2016

Ventiller en fonction d'une température et /ou d'un taux d'humidité

Un petit montage pour mettre en fonctionnement deux ventilateurs en fonction de la température et/ou du taux d'humidité


Un petit montage arduino très simple

Un code aussi très simple

#include "DHT.h"                            // Librairie pour DHT22
#define DHTPIN 9                            // DHT22 Sensor connecte au PIN 9 pour le pole data
#define DHTTYPE DHT22                       // DHT de type22 DHT22
DHT dht22(DHTPIN, DHTTYPE);

int fan1 = 7;                               //le ventilateur 1 a son pole positif connecte au PIN7
int fan2 = 4;                               //le ventilateur 1 a son pole positif connecte au PIN4

void setup()
{
  Serial.begin(9600);                       //
  Serial.println("DHT22 mesure de la temperature et de l'hygrometrie"); // Texte a afficher sur le moniteur série
  dht22.begin();                            //  
  pinMode (fan1,OUTPUT);                    //
  pinMode (fan2,OUTPUT);                    //
}

void loop()                                 // on lance une serie de commande en boucle
{

delay(2000);
  float t = dht22.readTemperature();        // On enregistre la valeur de temperature dans la variable t
  float h = dht22.readHumidity();           // On enregistre la valeur d'humidite dans la variable h
 
  Serial.print("Temperature: ");            // on affiche du texte sur le moniteur serie
  Serial.print(t);                          // on affiche du texte sur le moniteur serie
  Serial.print(" C ");                     // on affiche du texte sur le moniteur serie
  Serial.print("Humidite : ");              // on affiche du texte sur le moniteur serie
  Serial.print(h);                          // on affiche du texte sur le moniteur serie
  Serial.println(" %");  


  if (t >21){                                // si la variable t est superieur a 21 (vous pouvez modifier la valeur)
   digitalWrite (fan1, HIGH);                // la valeur de fan 1 est portee a haut
 } else {                                    // sino
      digitalWrite (fan1, LOW);              // la valeur de fan 1 est portee a bas
 }



    if (h >65){                              // si la variable h est superieur a 65 (vous pouvez modifier la valeur)
   digitalWrite (fan2, HIGH);                // la valeur de fan 2 est portee a haut
 } else {                                    // sinon
      digitalWrite (fan2, LOW);              // la valeur de fan 2 est portee a bas
 }

   delay(500);                               // on attends 500 millisecondes avant de relancer la boucle
}


jeudi 24 novembre 2016

Utilisation de piles pour les petits montages électroniques.

J'étais toujours en questionnement sur la durée de vie des piles pour nos montages électroniques.

Laquelle choisir ?

Que signifie tous ces codes, chiffres et lettres ?

Sont elle polluantes ou très polluantes, toxiques ou non .......

Une page intéressante pour répondre à une partie de ces questions :












dimanche 7 février 2016

Programmer l'Attiny85 avec une arduino UNO

Le Tiny AVR Programmer de chez Saperkfun est très pratique et simple d'emploi après une légère configuration comme nous l'avons décrit ici

Mais il est intéressant aussi de savoir le programmer avec juste une carte arduino un breadboard et quelques fils.

Aller je me lance. Encore une fois je n'invente rien je suis un tuto et retranscrit ici ce que je fait.

Je pars du tutoriel suivant trouvé sur hackster.io  ICI

Il y a en premier lieu toute la partie configuration arduinoUNO comme ISP (In-System Programming)

Je connecte l'arduinoUNO, je lance le soft arduino IDE. J'ouvre l'exemple ArduinoISP.

File -> Examples -> ArduinoISP

Je le téléverse dans l'arduinoUNO

J'ajoute le support du Attiny85 dans le soft arduino IDE.

J'ouvre Fichiers > Préférences   puis dans la fenêtre qui s'ouvre dans la case nommées "Additional Boards Manager URLs" je colle l'adresse suivante :
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json


Je clique OK


Après quoi j'ouvre le gestionnaire de cartes



Ceci ouvre une fenêtre comme ceci :

Je descend jusqu'à la ligne "attiny by Davis A. Mellis". Et je clique dessus.

Voila c'est installé.

Je vérifie dans >Outil




Voilà qui est fait, il maintenant temps de passer à la partie matériel.

Le matériel nécessaire :

  • une carte arduino UNO (originale)
  • l’ATtiny85 à programmer.
  • des câbles
  • une breadboard
  • un condensateur 10µF  25 V
Je connecte l' arduino UNO avec Attiny85 en utilisant un breadboard comme ci dessous :

Arduino Uno – ATtiny85
  • 5V – Vcc
  • Gnd – Gnd
  • Pin 13 – Pin 2
  • Pin 12 – Pin 1
  • Pin 11 – Pin 0
  • Pin 10 – Reset
Un schéma plus simple qu'un long discour :


Et dans la réalité j’obtiens :



J'ajoute le condensateur de 10µF entre Resest et GND sur l'arduino UNO.

Ceci pour prévenir le reset de l'arduino UNO quand le programme est chargé sur l'Attiny85.

Comme j'utilise un condensateur électrolytique je m'assure que l'anode est sur le GND (sinon c'est mal).

Téléversement du programme sur l'Attiny85.

Nous retournons donc maintenant sur le logiciel.

>outils>type de carte  sélectionner "attiny" 

>outils>processeur>  sélectionner "attiny85"

>outils>clock  sélectionner 8 MHz (internal)


Je m'assure pour finir que l'arduino comme isp est sélectionné.

>outils>programmateur  sélectionner "arduino as isp"


Par défaut le ATtiny85 fonctionne à 1Mhz, pour le faire fonctionner à 8Mhz :

>outils>   "graver la séquence d'initialisation"

Je devrais avoir un message du type de celui ci dessous


Mais en fait j'ai ça :



Et là je sèche total

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00

après quelques recherches sur le toile j'ai trouvé ceci :

http://www.lesusinesnouvelles.com/wiki/index.php?title=Microcontrolleur_ATTINY85

J'ai
donc téléversé sur l'arduino après avoir :
tout déconnecté
sélectionné type de carte "Arduino Genuino/Uno"
le port
et programateur : "parallel programmer"

le téléversement se passe normalement

je reconnecte tout comme ci dessus

lance la séquence 

>outils>   "graver la séquence d'initialisation"

et là pas de message d'erreur, juste un écran noir



je  charge maintenant le code exemple  "Blink"


Je le téléverse, et là tout semble se passer nomalement :




Maintenant il faut vérifier que cela fonctionne :

J'enlève toutes les connection et réalise le cablage suivant :

Mais là rien ne se passe

à suivre ...

eureka, j'ai compris pourquoi j'ai oublié de modifier le 13 en zéro
 à suivre































lundi 1 février 2016

Premier essai attiny85 et Tiny AVR Programmer

Ca y est le Tiny AVR Programmer de chez Sparkfun est arrivé, les attiny 85 sont arrivés.

Let's go ......



Tout d'abord j'ai suivi le tutoriel de Spakfun,  celui CI

Comme je suis pour l'instant sous linux ou mac je suis passé directement à la page ICI 

Sur l'ordinateur Ubuntu le logiciel arduino est une version 1.0.X j'ai donc chargé le fichier nécessaire ATtiny for Arduino 1.0.x 

J'ai voulu aussi tester sur le mac ou est chargée une version 1.6.X j'ai donc chargé le fichier nécessaire ATtiny for Arduino 1.6.x

J'ai décompressé et déplacé le dossier "attiny" dans le dossier /arduino/hardware, j'ai d'ailleurs créé ce dossier hardware qui n’existait pas.

Puis j'ai lancé arduino, menu type de carte : ATtiny

Puis processeur : AtTiny85

J'utilise la puce suivante :



Le point suivant est très important d'après le site car il y a risque de destruction de la puce

Clock : 1 MHz

Apparemment mettre plus ralenti à 8 et détériore à 20.

Je connecte le Programmer et charge le sketch suivant :

je le copie d'abord dans la fenêtre du soft arduino, puis clique sur téléverser.

int blinkPin = 0;

void setup()
{
  pinMode(blinkPin, OUTPUT);
}

void loop()
{
  digitalWrite(blinkPin, HIGH);
  delay(500);
  digitalWrite(blinkPin, LOW);
  delay(500);
}

Le résultat vous le voyez sur la vidéo du début de l'article, donc ça fonctionne.

Les prochaines étapes :

1 - Tenter la même programation avec diverses cartes arduino uno, arduino nano, arduino mega, arduino leonardo

2 - essayer un projet simple, attiny85 seule et servo

3 - essayer attiny85 dht22 et transmission sans fil vers RaspberryPi pour usage Gladys (pour remplacer la liaison série actuelle) avec les composants suivants :

Émetteur récepteur NRF24L01 + 2,4 GHz :






et transmetteur Wi-Fi :





Et pour finir 433Mhz RF Transmetteur Module + Kit Récepteur pour Arduino ARM MCU WL TE122 :







dimanche 31 janvier 2016

Utiliser les arduino nano chinoise ...

J'ai fait l'acquisition de plusieurs arduino nano chinoise, vu leur prix c'est une bonne affaire

Malheureusement en essayant simplement de faire fonctionner un sketch de base "blink", pas moyen de téléverser sur l'arduino.

Bon ne nous affolons pas recherche sur internet.

Je suis tombé sur cette page :

http://kiguino.moos.io/2014/12/31/how-to-use-arduino-nano-mini-pro-with-CH340G-on-mac-osx-yosemite.html

Et là après quelques tâtonnements :


Bon pour être bien sur un petit sketch simple

un servo de modelisme simple






Un câblage tout aussi simple





le sketch :

#include <Servo.h>

Servo myservo;  // Création objet myservo par lequel on envois les instruction au servo

void setup()
{
  pinMode(6,OUTPUT);
  myservo.attach(6);  // pin auquel on associe notre objet connecté au fil données du servo, jaune sur le schéma orange sur notre servo
}

void loop()

  myservo.write(0);     // mise du servo à sont angle minimum       
  delay(1000);          // pendant une seconde
  myservo.write(255);   //
mise du servo à sont angle maximum !       
  delay(1000);          // pendant une seconde
}




Résultat :


jeudi 21 janvier 2016

Un truc génial et pas cher attiny85....

...... pour réaliser plein de petits montages. Elle est plus petite et moins cher que l'atmega328 (le coeur de l'arduino).




Projets domotiques :

Thermomètre indépendant transmettant en 2,4 Ghz

 http://arduino.stackexchange.com/questions/18163/using-attiny85-nrf24l01-dht2-cant-get-data-from-dht22


******

Contrôler un moteur pas à pas en wifi avec un script json (qui doit pas être bien éloigné du node.js pour notre projet gladys)



http://blog.nyl.io/esp8266-motor/

ouvrir et fermer portes, vollets, et mettre en mouvement tout un tas d'objets ...


*****

Contrôler un relai selon les données récoltées avec une sonde de températures DS18B20


http://www.duinos.net/show/?id=200

*****

Une porte domotique que l'on vérouille ou dévérouille avec son smatphone (pour moins de 40euros) :


http://blog.idleman.fr/raspberry-pi-22-creer-une-porte-domotique-partie-1/

*****

Projets modelistiques :

Avec des servos

Créer des sons

Diffuser des sons

Une floppée de gadget utiles ou pas :

Une alarme pour piège à souris :



http://www.instructables.com/id/Cheap-Wireless-Mousetrap-Alarm-Using-an-ATtiny85/?ALLSTEPS

*****

Un mini robot qui trouve et suit une ligne :


*****

Une guirlande led rgb pilotée



http://shin-ajaran.blogspot.sg/2014/04/wearable-electronics-arduino-x-attiny85.html

*****

Une micro lampe de poche



http://www.instructables.com/id/Supercapacitor-Programmable-Attiny-LED-Flashlight/?ALLSTEPS

Pour quelques euros à chaque fois.

Facile a programmer .....

.... avec un arduino :



https://www.hackster.io/arjun/programming-attiny85-with-arduino-uno-afb829
http://highlowtech.org/?p=1695
http://forum.arduino.cc/index.php?topic=150870.0

..... avec unTinyProgrammer :



à acheter ici :
https://www.sparkfun.com/products/11801

ou plutôt de france ici:
https://www.gotronic.fr

à fabriquer ici:
http://www.thingiverse.com/thing:12461



Ou avec un RaspberryPi



http://www.instructables.com/id/Programming-the-ATtiny85-from-Raspberry-Pi/?ALLSTEPS
https://www.raspberrypi.org/forums/viewtopic.php?f=96&t=106655
http://blog.stevemarple.co.uk/2013/03/how-to-use-gpio-version-of-avrdude-on.html


pas mal de projets :

http://www.instructables.com/tag/type-id/category-technology/keyword-attiny85/

http://www.electronics-lab.com/tag/attiny85/

Voila la découverte de l'attiny85 va me permettre de compléter le projet domotique et plus ....

mardi 19 janvier 2016

Les origines ....

D'où me viens cet envie d'un aide de camps domestique informatique ?

Je crois que la référence la plus éloignée dont je me souvienne c'est Hal, l'ordinateur de 2001.



Après il y a plein de références litéraires ou cinématographiques.

Les personnages qui ont un majordome dévoué m'ont toujours aussi amusés, mais avoir à son service h24 un humain me gène un peu, alors un ordinateur c'est idéal.

Il faut que je voit si on peut renommer le Gladys de la maison Hal ?

Pour ne montrer que quelques un de ces assistants dotés d'une AI

Robby



R2D2 et C3PO





 Jarvis


Sonny
























lundi 18 janvier 2016

synchroniser Gladys et calendrier google

Après une première tentative échouée abordée ici.

Je refait une tentative avec le tuto qui se trouve ici :

http://gladysproject.com/forum/viewtopic.php?f=6&t=6203&start=20

J'ai eu très peur d'un retour à la case départ à l'étape :

" Ouvrir gladys avec votreip:1337 "

je pense que je n'avais pas attendu assez longtemps que Gladys démarre complètement.

puis après un nouvel essais après plusieurs minutes :



Yessssssss

Donc je continue

Et ça fonctionne.





Je remet ci dessous le texte du tuto pour en augmenter la lisibilité, il n'est pas de moi mais de TOF membre du forum Gladys.


Bonjour,

Face au nombreux problèmes rencontrés pour synchroniser le compte google avec gladys, voici un petit tuto.

Aller à cette adresse
https://console.developers.google.com/project
Créer un projet
Renseigner le nom (Gladys par exemple)
Valider

Click sur API et Authentification puis API (dans le panneau de gauche)
Clic sur les API nécessaires puis activer l'API en haut à gauche (faire ça pour toutes les API nécessaires)
Liste des API nécessaires
- Calendar API
- Debuglet Controller API
- Gmail API
- Google Cloud Logging API
- Google Cloud SQL
- Google Cloud Storage
- Google Cloud Storage JSON API
- Google Maps Directions API
- Google Maps Geocoding API
- Google Maps JavaScript API

Pour contrôler que toutes les API de la liste sont bien activées, regarder dans "API activées (x)" en haut à gauche

Ensuite, clic sur "identifiants" dans le panneau de gauche
Puis "Ajouter des identifiants" puis "ID clients OAuth 2.0"
Renseigner un nom, exemple "Web client 1"
Dans "Origines JavaScript autorisées" rentrer:
- http://localhost
- http://192.168.0.16:1337 (donc l'adresse ip de votre raspberry sur votre réseau ... il faut qu'il soit en IP fixe)
Dans "URI de redirection autorisés"
Mettre: http://localhost:1337/googleapi/create
Puis enregistrer

Revenir sur le formulaire ID clients OAuth 2.0 nouvellement créer pour pouvoir copier/coller les
- ID client
- Code secret du client

______________________________________________________________________________________________

Ouvrir putty
Rentrer l'adresse ip du raspberry dans putty (laisser le port 22)
Valider
se connecter avec login: pi et mot de passe : raspberry (sauf si vous avez fait le changement)
taper
Code : Tout sélectionner
nano /usr/local/lib/node_modules/gladys/config/googleapi.js


Descendre avec les flèches et renseigner copier/coller les identifiants de votre compte
consumer_key = ID client (de la console google
consumer_secret = Code secret du client
attention, vérifier que vous avez toujours les apostrophes en début en en fin de vos identifiants ... et la virgule à la fin de chaque ligne

ça doit ressembler à ça
consumer_key: 'xxxxxxxxxxxxxxx-yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy.apps.googleusercontent.com',
consumer_secret: 'zzzzzzzzzzzzzzzzzzzzzzzzz',
scope: ['https://www.googleapis.com/auth/calendar', 'https://www.goog etc.......

Une fois fini, faire
Contrôle + O puis entré puis contôle + X pour sortir

Redémarrer gladys en faisant
Code : Tout sélectionner
sudo pm2 restart gladys


Quitter putty
_________________________________________________________________________________________________
Ouvrir gladys avec votreip:1337
Aller dans paramètres
Dans la partie "compte google", clic sur "connecter un nouveau compte"
une fenêtre google s'ouvre avec "Les autorisations suivantes sont requises pour gladys : Accès hors connexion"
Faire "autoriser"

Une nouvelle page apparaît avec "Page Web inaccessible"
Aller sur la barre d'adresse du navigateur ou il y a écrit
"http://localhost:1337/googleapi/create?code=xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
sélectionner "localhost" et tapez l'adresse ip de votre raspberry sur votre réseau (exemple 192.168.0.16)
ce qui doit vous donner
"192.168.0.16:1337/googleapi/create?code=xxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
faire "entrer"

Si ça a marché, ça doit vous renvoyer vers votre page "paramètres" de gladys
et votre adresse mail est bien enregistrée
Maintenant clic sur "synchroniser tous les calendriers"

Si ça a marché, vous devriez voir apparaître des nouvelles options dans la partie "Calendriers Google synchronisés"
Si vous ne voyez rien apparaître, revenir sur l’accueil de gladys puis revenir dans les paramètres
Normalement, les nouvelles option seront arrivées.

FIN

le texte original et les commentaires et échanges sur ce point ici :



dimanche 17 janvier 2016

Complément pour un Wi-Fi nomade sur RaspberryPi : désactiver l'économie d'énergie.

J'ai voulu me connecter à Gladys via l'ip wifi pour voir et là rien.

Je me connecte sur l'ip ethernet et là ça fonctionne, en cherchant sur internet à comprendre le pourquoi du comment je suis tombé sur différents sites et forum expliquant que le problème vient des paramètres par défaut d'économie d’énergie et donnant la solution suivante :

Désactiver l'économie d'énergie.

En premier lieu je vérifie l'état du système de gestion de l'énergie sur mon pi avec la commande suivante :

pi@gladys:~ $ cat /sys/module/8192cu/parameters/rtw_power_mgnt
1


la valeur 1 indique que le système d'économie d'énergie est en fonction active.

Je vais donc créer le fichier de configuration du module wifi

sudo nano /etc/modprobe.d/8192cu.conf

Je crée la ligne suivante :

options 8192cu rtw_power_mgnt=0 rtw_enusbss=0

Comme d'hab avec nano  [CTRL-X], [Y]  puis entrée [ENTER].

Toujours pour faire propre j'arrête Gladys avant de rebooter :


pi@gladys:~ $ sudo pm2 stop gladys
[PM2] Stopping gladys
[PM2] stopProcessId process id 0
┌──────────┬────┬──────┬─────┬─────────┬─────────┬────────┬────────┬──────────┐
App name id modepidstatus  │ restartuptime memory watching
├──────────┼────┼──────┼─────┼─────────┼─────────┼────────┼────────┼──────────┤
│ gladys   │ 0  │ fork │ 0   │ stopped │ 0       │ 0      │ 0 B    │ disabled │
└──────────┴────┴──────┴─────┴─────────┴─────────┴────────┴────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app


Puis je reboot la machine :

sudo reboot

Une fois qu'elle est redémarrée je vérifie l'état de l'économiseur :

pi@gladys:~ $ cat /sys/module/8192cu/parameters/rtw_power_mgnt
0


Tout semble OK, à suivre lors du prochain essais de connexion SSH via le wifi.

Quelques sources parmi d'autres :

 
http://svay.com/blog/setting-up-a-wifi-connection-on-the-raspberrypi/ 
http://www.raspberrypi-spy.co.uk/2015/06/how-to-disable-wifi-power-saving-on-the-raspberry-pi/
https://www.raspberrypi.org/forums/viewtopic.php?t=61665
http://forum.doozan.com/read.php?6,8618,8938,quote=1
 

vendredi 15 janvier 2016

Utiliser une clé USB pour les partitions au lieu de la carte SD.



Comme vous le savez peut être, les cartes SD et à fortiori microSD sont limitées en durée de vie.

En effet le nombre d'écritures sur ces supports est limité. Selon la technologie utilisée, elle est estimée entre 10 000 écriture (MLC - multiple-level-cell, 2 bits par cellule) et 100 000 écritures (SLC - single-level-cell, 1 bit par cellule) (1). Ce qui peut paraitre beaucoup, mais peut être peu pour un disque utilisé par un serveur qui va enregistrer et effacer régulièrement des données.

D'où l'intérêt de la commande de contrôle de corruption dont nous avions parlé ici.

Pour limiter ce risque d'usure prématurée l'idée est de déplacer les partitions sur une clé USB dont la durée de vie est plus longue. En plus ça va permettre de donner un peu de volume de données disponibles à notre RPi.


Il faut donc connecter une clé usb au RaspberryPi.


Je contrôle la présence de la clé en regardant quels sont les espaces disponibles sur les disques du RaspberryPi.

pi@gladys:~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       7.2G  2.0G  5.0G  29% /
devtmpfs        214M     0  214M   0% /dev
tmpfs           218M     0  218M   0% /dev/shm
tmpfs           218M   25M  193M  12% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           218M     0  218M   0% /sys/fs/cgroup
/dev/mmcblk0p1   60M   20M   41M  34% /boot
tmpfs            44M     0   44M   0% /run/user/0
tmpfs            44M     0   44M   0% /run/user/1000


Pas de clé usb visible, il faut donc que je trouve comment la rendre visible et accessible.

Google est mon ami, "monter une clé usb sur raspberry pi".

Après quelques essais infructueux je me rends compte que ma clé est formatée avec microsoft et donc non vue par le RPi, donc plutôt que de passer sur des configurations alambiquées (du moins elles me le paressent), je pars sur une nouvelle solution, formater cette clé en ext 3 qui est le format utilisé par les système linux dont notre Raspbian.

Il me faut donc déjà savoir où se situe ma clé usb, je la déconnecte la reconnecte et aussitôt lance la commande  dmesg | tail

pi@gladys:~ $ dmesg | tail
[ xxxx.xxxxxx] sd 0:0:0:0: [sda] 125042688 512-byte logical blocks: (64.0 GB/59.6 GiB)[ xxxx.xxxxxx] sd 0:0:0:0: [sda] Write Protect is off[ xxxx.xxxxxx] sd 0:0:0:0: [sda] Mode Sense: 23 00 00 00[ xxxx.xxxxxx] sd 0:0:0:0: [sda] Write cache: disabled, read cache: disabled, doesn't support DPO or FUA[ xxxx.xxxxxx] sd 0:0:0:0: [sda] Attached SCSI removable disk

me permet de situer ma clé USB en sda, puis comme elle est notée "Attached" je la démonte :

pi@gladys:~ $ sudo umount /dev/sda
umount: /dev/sda: not mounted

Maintenant qu'elle n'est plus montée je peut lancer le formatage

pi@gladys:~ $ sudo fdisk /dev/sda

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

/dev/sda: device contains a valid 'ext3' signature, it's strongly recommended to wipe the device by command wipefs(8) if this setup is unexpected to avoid possible collisions.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x0f5ff543.

Command (m for help):
 


Bon là on me propose de l'aide je saisi "m"

Command (m for help): m

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table


Command (m for help):


J'aperçois une option "n" qui me propose d'ajouter une nouvelle partition.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p):


Je saisis "p" pour primaire

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):


Je saisi "1" puisque c'est la première :

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-125042687, default 2048):


Je fais "entrée" pour garder l'option par défaut :

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-125042687, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-125042687, default 125042687):


 Comme je ne souhaites qu'une seule partition je fais de nouveau "entrée"

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-125042687, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-125042687, default 125042687):

Created a new partition 1 of type 'Linux' and of size 59.6 GiB.

Command (m for help):


Il me dit que j'ai une partition de type linux de 59.6 giga soit la taille de ma clé.

Je format en "ext4"

pi@gladys:~ $ sudo mkfs.ext4 /dev/sda
mke2fs 1.42.12 (29-Aug-2014)
/dev/sda contains a ext3 file system
        last mounted on Thu Jan 14 16:25:29 2016
Proceed anyway? (y,n) y
Creating filesystem with 15630336 4k blocks and 3907584 inodes
Filesystem UUID: 9a5c610e-d5bd-4998-ace6-c3d05ee39f3a
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done


 Je monte la clé :

pi@gladys:~ $  sudo mkdir /tmp/usb_root
pi@gladys:~ $  sudo mount /dev/sda1 /tmp/usb_root
pi@gladys:~ $ sudo mount /dev/sda /tmp/usb_root

Je regarde mes partitions :

pi@gladys:~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       7.2G  2.0G  5.0G  29% /
devtmpfs        214M     0  214M   0% /dev
tmpfs           218M     0  218M   0% /dev/shm
tmpfs           218M  4.5M  213M   3% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           218M     0  218M   0% /sys/fs/cgroup
/dev/mmcblk0p1   60M   20M   41M  34% /boot
tmpfs            44M     0   44M   0% /run/user/0
tmpfs            44M     0   44M   0% /run/user/1000
/dev/sda         59G   52M   56G   1%
/tmp/usb_root

Elle est bien là.

J'installe  rsync :

pi@gladys:~ $ sudo apt-get install rsync
Reading package lists... Done
Building dependency tree
Reading state information... Done
rsync is already the newest version.
rsync set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.


Il est déja installé, OK. Je stoppe Gladys par précaution.

pi@gladys:~ $ sudo pm2 stop gladys
[PM2] Stopping gladys
[PM2] stopProcessId process id 0
┌──────────┬────┬──────┬─────┬─────────┬─────────┬────────┬────────┬──────────┐
│ App name │ id │ mode │ pid │ status  │ restart │ uptime │ memory │ watching │
├──────────┼────┼──────┼─────┼─────────┼─────────┼────────┼────────┼──────────┤
│ gladys   │ 0  │ fork │ 0   │ stopped │ 0       │ 0      │ 0 B    │ disabled │
└──────────┴────┴──────┴─────┴─────────┴─────────┴────────┴────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app


OK

Je crée un répertoire temporaire pour "dupliquer" ce qui sert en ce moment

pi@gladys:~ $ sudo mkdir /tmp/sd_root


Je le monte avec l'option -bind pour la lier à la partition principale qui sert en ce moment

pi@gladys:~ $ sudo mount --bind / /tmp/sd_root/

Je vérifie que tout est là :

pi@gladys:/ $ ls -l /tmp/sd_root/
total 92
drwxr-xr-x  2 root root  4096 Jan 14 15:52 bin
drwxr-xr-x  3 root root  4096 Nov 21 21:32 boot
drwxr-xr-x  5 root root  4096 Jan  1  1970 boot.bak
drwxr-xr-x  4 root root  4096 Nov 21 19:51 dev
drwxr-xr-x 88 root root  4096 Jan 14 15:52 etc
drwxr-xr-x  3 root root  4096 Nov 21 21:32 home
drwxr-xr-x 19 root root  4096 Jan 14 15:52 lib
drwx------  2 root root 16384 Nov 21 20:35 lost+found
drwxr-xr-x  2 root root  4096 Nov 21 19:50 media
drwxr-xr-x  3 root root  4096 Jan 14 15:50 mnt
drwxr-xr-x  3 root root  4096 Nov 21 21:32 opt
drwxr-xr-x  2 root root  4096 Jan  7  2015 proc
drwx------  6 root root  4096 Jan 13 10:35 root
drwxr-xr-x  5 root root  4096 Nov 21 21:38 run
drwxr-xr-x  2 root root  4096 Jan 14 15:52 sbin
drwxr-xr-x  2 root root  4096 Nov 21 19:50 srv
drwxr-xr-x  2 root root  4096 Apr 12  2015 sys
drwxrwxrwt 10 root root  4096 Jan 15 12:25 tmp
drwxr-xr-x 10 root root  4096 Nov 21 19:50 usr
drwxr-xr-x 12 root root  4096 Dec  2 17:26 var

 

OK j'ouvre un screen car l'opération suivante est longue si la connection ssh plante l'opération ira à son terme :

pi@gladys:/ $ screen

Là faut être patient ..............................................................................

pi@gladys:/ $ sudo rsync -avh --exclude 'tmp/' --exclude 'boot/' /tmp/sd_root/ /tmp/usb_root/
 
 
Après quelques minutes :

sent 1.91G bytes  received 1.30M bytes  2.90M bytes/sec
total size is 1.90G  speedup is 1.00


Un df pour savoir où on en est :

pi@gladys:/ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       7.2G  2.5G  4.5G  36% /
devtmpfs        214M     0  214M   0% /dev
tmpfs           218M     0  218M   0% /dev/shm
tmpfs           218M  4.6M  213M   3% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           218M     0  218M   0% /sys/fs/cgroup
/dev/mmcblk0p1   60M   20M   41M  34% /boot
tmpfs            44M     0   44M   0% /run/user/0
tmpfs            44M     0   44M   0% /run/user/1000
/dev/sda         59G  2.1G   54G   4% /tmp/usb_root


Changer les partitions à monter lors du démarrage. Ca se passe dans le fichier /etc/fstab. Pour nous ça sera /tmp/usb_root/etc/fstab. Remplacer la ligne :

/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
 
Par

/dev/sda  /               ext4    defaults,noatime  0       1

 Dernière étape, modifier la carte SD pour démarrer sur la clé USB. Modifier le fichier /boot/cmdline.txt et remplacer par /dev/sda. Vous devriez avoir la ligne suivante :

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/sda rootfstype=ext4 elevator=deadline rootwait logo.nologo 

Et pour finir

pi@gladys:/ $  sudo reboot

Là il faut patienter quelques minutes ......

Tadaaaaaaaaaaaaaaaaaa .....

pi@gladys:~ $ sudo pm2 start gladys
[PM2] restartProcessId process id 0
[PM2] Process successfully started
┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────────────┬──────────┐
App name id mode pid  status restart uptime memory      watching
├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────────────┼──────────┤
gladys   │ 0  │ fork │ 3016 │ online │ 0       │ 1s     │ 11.883 MB   │ disabled │
└──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app



Gladys démarre

Et gladys fonctionne, du moins son interface web







Encore un pas de fait.

A ce stade je ne sait juste pas où sont passé les presque 8 giga de la carte SD et comment je pourrais ( si ça a un intérêt pour la durée de vie)  le /boot sur ces 8 Go.




pi@gladys:~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        59G  2.1G   54G   4% /
devtmpfs        214M     0  214M   0% /dev
tmpfs           218M     0  218M   0% /dev/shm
tmpfs           218M  4.6M  213M   3% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           218M     0  218M   0% /sys/fs/cgroup
/dev/mmcblk0p1   60M   20M   41M  34% /boot
tmpfs            44M     0   44M   0% /run/user/0
tmpfs            44M     0   44M   0% /run/user/1000



Peut là une piste d'amélioration ????



Sources:

Cartes SD :

https://fr.wikipedia.org/wiki/Carte_SD

Cartes micro SD :

https://fr.wikipedia.org/wiki/Carte_microSD 

Partitionner et formater une clé USB :

http://dmesg.fr/gestion-hardware/56-formater-disque-dur-cle-usb-linux

Déplacer les partitions sur clé USB :

http://www.pihomeserver.fr/2013/06/10/raspberry-pi-home-server-utiliser-une-cle-usb-pour-vos-partitions/

Mémoire flash :

https://fr.wikipedia.org/wiki/M%C3%A9moire_flash

(1)  http://www.edn.com/design/systems-design/4320024/What-is-the-difference-between-SLC-and-MLC- 

Gladys envera des SMS la semaine prochaine normalement ....

...

En effet après les mails il peut être intéressant d'envoyer des sms.

J'attends donc :

Une clé USB UMTS HSDPA UMTS Huawei E169, qui doit arriver milieu de semaine prochaine.



Une carte sim free pour la connecter.



 Et dès que tout sera là je testerais le tuto suivant :

http://raspbian-france.fr/raspisms-raspberry-pi-sms-internet/

A bientôt pour ce nouveau mode de communication sur RaspberryPi pour Gladys.

la seule question que je me pose c'est est ce que j'installe ça sur le serveur qui gère Gladys ou sur un autre RaspberryPi ?

mercredi 13 janvier 2016

Gladys envoie des mail ...

Comme Gladys va surveiller la maison en notre absence il faut quelle puisse envoyer des alerte s'il se passe un évènement.

Il faut donc que l'on puisse envoyer des mails depuis le RaspberryPi et même que l'on puisse envoyer des mails depuis la ligne de commande ce qui permet d'automatiser certaines surveillances système en crontab (on y reviendra).

Si vous souhaitez envoyer des données régulières par mail pour surveiller, la température de la maison, que le chien ne dévore pas le canapé, la pousse de votre camélia fraichement planté, où tout autre évènement dont vous voudriez des données régulièrement, il faut que votre RaspberryPi puisse envoyer des mail.


Aller c'est parti.

sudo apt-get update
 
sudo apt-get upgrade

Ca c'est un bon début avant toute modif.

Ensuite j'instale ssmtp qui me permetra d'accéder à un serveur smtp pour l'envoie des mails

pi@gladys:~ $ sudo apt-get install -y ssmtp
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  ssmtp
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 54.2 kB of archives.
After this operation, 1,024 B of additional disk space will be used.
Get:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main ssmtp armhf 2.64-8 [54.2 kB]
Fetched 54.2 kB in 0s (77.0 kB/s)
Preconfiguring packages ...
Selecting previously unselected package ssmtp.
(Reading database ... 33395 files and directories currently installed.)
Preparing to unpack .../ssmtp_2.64-8_armhf.deb ...
Unpacking ssmtp (2.64-8) ...
Processing triggers for man-db (2.7.0.2-5) ...
Setting up ssmtp (2.64-8) ...



OK, ensuite j'installe mailutils qui me permettra d'envoyer des mail avec la commande mail

pi@gladys:~ $ sudo apt-get install -y mailutils
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  guile-2.0-libs libgc1c2 libgsasl7 libkyotocabinet16 liblzo2-2 libmailutils4 libntlm0 libunistring0 mailutils-common
Suggested packages:
  mailutils-mh mailutils-doc
The following NEW packages will be installed:
  guile-2.0-libs libgc1c2 libgsasl7 libkyotocabinet16 liblzo2-2 libmailutils4 libntlm0 libunistring0 mailutils mailutils-common
0 upgraded, 10 newly installed, 0 to remove and 0 not upgraded.
Need to get 4,959 kB of archives.
After this operation, 19.3 MB of additional disk space will be used.
Get:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main libgc1c2 armhf 1:7.2d-6.4 [122 kB]
Get:2 http://mirrordirector.raspbian.org/raspbian/ jessie/main libunistring0 armhf 0.9.3-5.2 [253 kB]
Get:3 http://mirrordirector.raspbian.org/raspbian/ jessie/main guile-2.0-libs armhf 2.0.11+1-9 [2,162 kB]
Get:4 http://mirrordirector.raspbian.org/raspbian/ jessie/main liblzo2-2 armhf 2.08-1.2 [47.6 kB]
Get:5 http://mirrordirector.raspbian.org/raspbian/ jessie/main libkyotocabinet16 armhf 1.2.76-4 [289 kB]
Get:6 http://mirrordirector.raspbian.org/raspbian/ jessie/main mailutils-common all 1:2.99.98-2 [599 kB]
Get:7 http://mirrordirector.raspbian.org/raspbian/ jessie/main libntlm0 armhf 1.4-3 [19.7 kB]
Get:8 http://mirrordirector.raspbian.org/raspbian/ jessie/main libgsasl7 armhf 1.8.0-6 [193 kB]
Get:9 http://mirrordirector.raspbian.org/raspbian/ jessie/main libmailutils4 armhf 1:2.99.98-2 [701 kB]
Get:10 http://mirrordirector.raspbian.org/raspbian/ jessie/main mailutils armhf 1:2.99.98-2 [572 kB]
Fetched 4,959 kB in 6s (819 kB/s)
Selecting previously unselected package libgc1c2:armhf.
(Reading database ... 33417 files and directories currently installed.)
Preparing to unpack .../libgc1c2_1%3a7.2d-6.4_armhf.deb ...
Unpacking libgc1c2:armhf (1:7.2d-6.4) ...
Selecting previously unselected package libunistring0:armhf.
Preparing to unpack .../libunistring0_0.9.3-5.2_armhf.deb ...
Unpacking libunistring0:armhf (0.9.3-5.2) ...
Selecting previously unselected package guile-2.0-libs:armhf.
Preparing to unpack .../guile-2.0-libs_2.0.11+1-9_armhf.deb ...
Unpacking guile-2.0-libs:armhf (2.0.11+1-9) ...
Selecting previously unselected package liblzo2-2:armhf.
Preparing to unpack .../liblzo2-2_2.08-1.2_armhf.deb ...
Unpacking liblzo2-2:armhf (2.08-1.2) ...
Selecting previously unselected package libkyotocabinet16:armhf.
Preparing to unpack .../libkyotocabinet16_1.2.76-4_armhf.deb ...
Unpacking libkyotocabinet16:armhf (1.2.76-4) ...
Selecting previously unselected package mailutils-common.
Preparing to unpack .../mailutils-common_1%3a2.99.98-2_all.deb ...
Unpacking mailutils-common (1:2.99.98-2) ...
Selecting previously unselected package libntlm0:armhf.
Preparing to unpack .../libntlm0_1.4-3_armhf.deb ...
Unpacking libntlm0:armhf (1.4-3) ...
Selecting previously unselected package libgsasl7.
Preparing to unpack .../libgsasl7_1.8.0-6_armhf.deb ...
Unpacking libgsasl7 (1.8.0-6) ...
Selecting previously unselected package libmailutils4:armhf.
Preparing to unpack .../libmailutils4_1%3a2.99.98-2_armhf.deb ...
Unpacking libmailutils4:armhf (1:2.99.98-2) ...
Selecting previously unselected package mailutils.
Preparing to unpack .../mailutils_1%3a2.99.98-2_armhf.deb ...
Unpacking mailutils (1:2.99.98-2) ...
Processing triggers for man-db (2.7.0.2-5) ...
Setting up libgc1c2:armhf (1:7.2d-6.4) ...
Setting up libunistring0:armhf (0.9.3-5.2) ...
Setting up guile-2.0-libs:armhf (2.0.11+1-9) ...
Setting up liblzo2-2:armhf (2.08-1.2) ...
Setting up libkyotocabinet16:armhf (1.2.76-4) ...
Setting up mailutils-common (1:2.99.98-2) ...
Setting up libntlm0:armhf (1.4-3) ...
Setting up libgsasl7 (1.8.0-6) ...
Setting up libmailutils4:armhf (1:2.99.98-2) ...
Setting up mailutils (1:2.99.98-2) ...
update-alternatives: using /usr/bin/frm.mailutils to provide /usr/bin/frm (frm) in auto mode
update-alternatives: using /usr/bin/from.mailutils to provide /usr/bin/from (from) in auto mode
update-alternatives: using /usr/bin/messages.mailutils to provide /usr/bin/messages (messages) in auto mode
update-alternatives: using /usr/bin/movemail.mailutils to provide /usr/bin/movemail (movemail) in auto mode
update-alternatives: using /usr/bin/readmsg.mailutils to provide /usr/bin/readmsg (readmsg) in auto mode
update-alternatives: using /usr/bin/dotlock.mailutils to provide /usr/bin/dotlock (dotlock) in auto mode
update-alternatives: using /usr/bin/mail.mailutils to provide /usr/bin/mailx (mailx) in auto mode
Processing triggers for libc-bin (2.19-18+deb8u1) ...


OK, ensuite j'installe mpack qui doit me permettre d'encoder et décoder d’éventuelles pièces jointes.

pi@gladys:~ $ sudo apt-get install -y mpack
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  inews
The following NEW packages will be installed:
  mpack
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 38.4 kB of archives.
After this operation, 104 kB of additional disk space will be used.
Get:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main mpack armhf 1.6-8 [38.4 kB]
Fetched 38.4 kB in 13s (2,890 B/s)
Selecting previously unselected package mpack.
(Reading database ... 34213 files and directories currently installed.)
Preparing to unpack .../archives/mpack_1.6-8_armhf.deb ...
Unpacking mpack (1.6-8) ...
Processing triggers for man-db (2.7.0.2-5) ...
Setting up mpack (1.6-8) ...


Maintenant je configure  /etc/ssmtp/ssmtp.conf

 pi@gladys:~ $ sudo nano /etc/ssmtp/ssmtp.conf






Je modifie comme suit en ajoutant les lignes de la fin du fichier en bordeau ci dessous:


#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=postmaster

# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=mail

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
hostname=gladys

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
#FromLineOverride=YES


mailhub=smtp.gmail.com:587
AuthUser=jeanphilippebernard.dupontdugard@gmail.com
AuthPass=azertyuiop123456789
useSTARTTLS=YES
useTLS=YES


OK, je test maintenant cette configuration








pi@gladys:~ $ echo "Test configuration Gladys" | mail -s "premier test de configuration mail" jeanphilippebernard.dupontdugard@gmail.com


Là après quelques secondes message d'erreur :

mail: cannot send message: Process exited with a non-zero status

Même pas peur, google est mon ami je copie ce message dans la barre de recherche google.

Après quelques recherches il apparait qu'il faut faire un tour sur https://www.google.com/settings/security/lesssecureapps et "activer"

Nouveau test :

pi@gladys:~ $ echo "Test configuration Gladys" | mail -s "premier test de configuration mail" jeanphilippebernard.dupontdugard@gmail.com

Le mail passe sans souci.

Maintenant que mon raspberry sait envoyer des mails sur internet les mails générés par le système peuvent être renvoyés sur ma boite perso.

Il suffit de modifier le fichier /etc/aliases.

Je le fait comme suit :

    # /etc/aliases
    www: root
    root: dupontdugard@gmail.com

Les mails générés vers le user www seront redirigés vers le user root qui enverra les emails vers votre adresse externe Gmail.

Pour finir pour envoyer un mail avec pièce jointe :

mpack -s testpiècejointe piècejointe.ext jeanphilippebernard.dupontdugard@gmail.com


Bien sur pensez à remplacer  "tespiècejointe" par votre sujet "piècejointe.txt" par le nom de votre fichier à joindre et l'adresse mail par celle de votre destinataire

Source :
http://www.pihomeserver.fr/2015/08/13/envoyer-un-email-depuis-votre-raspberry-pi/

Quelques liens peut être utiles pour aller plus loin :

http://www.commentcamarche.net/faq/893-parametres-de-serveurs-pop-imap-et-smtp-des-principaux-fai
http://www.serversmtp.com/fr/liste-serveur-smtp