Mes Projets

Docker Public Repository

0

Pour faciliter le développement et surtout le déploiement de l’application Zacacia, j’utilise Docker.
Les 2 containers sont disponibles sous forme de Dockerfile ici

<a href="https://registry.hub viagra a vendre.docker.com/repos/hlepesant/ » title= »My Repositories »>https://registry.hub.docker.com/repos/hlepesant/

Cela vous donne aussi un aperçu des possibilités de Docker, et son inscription complète dans la mouvance DevOps.

noNoseOnTV part 3

0

Voici le dernier code source de l’appareil NoNoseOnTV.

Et voici le schéma :


Sensor_bb

// # Author  : Hugues Lepesant
// # Date    : 30/04/2014
// # Version : 0.3
 
// # URM Code based on Jiang's work from DFRobot
// # Product name:ultrasonic scanner Kit
// # Product SKU:SEN0001
  
// # Description:
// # The Sketch for scanning 180 degree area 4-500cm detecting range
  
// # Connection:
// #       Pin 1 VCC (URM V3.2) -> VCC (Arduino)
// #       Pin 2 GND (URM V3.2) -> GND (Arduino)
// #       Pin 4 PWM (URM V3.2) -> Pin 6 (Arduino)
// #       Pin 6 COMP/TRIG (URM V3.2) -> Pin 5 (Arduino)
// # Pin mode: PWM
// # Working Mode: PWM passive control mode.
// # If it is your first time to use it,please make sure the two jumpers to the right hand
// # side of the device are set to TTL mode. You'll also find a secondary jumper on
// # the left hand side, you must break this connection or you may damage your device.


#include <IRremote.h>
#include <NewTone.h>


const int URPWM = 6;      // PWM Output 0-25000us,every 50us represent 1cm
const int URTRIG = 5;     // PWM trigger pin

const int greenLedPin = 2;
const int yellowLedPin = 4;
const int redLedPin = 7;
const int buzzerPin = 8;
 
const int distMinimum = 100; // 1 meter
const int distMedium  = 150; // 1 meter and half

const int duration = 800;
int alert = 0;
int tvPower = 1;
 
//boolean up=true;       // create a boolean variable
//unsigned long time;    // create a time variable
//unsigned long urmTimer = 0; // timer for managing the sensor reading flash rate
unsigned int Distance=0;

IRsend irsend;
 
uint8_t EnPwmCmd[4]={0x44,0x22,0xbb,0x01}; // distance measure command
  
void setup() {             // Serial initialization
    Serial.begin(9600);    // Sets the baud rate to 9600
 
    pinMode(greenLedPin, OUTPUT);
    digitalWrite(greenLedPin, LOW);
     
    pinMode(yellowLedPin, OUTPUT);
    digitalWrite(yellowLedPin, LOW);
     
    pinMode(redLedPin, OUTPUT);
    digitalWrite(redLedPin, LOW);
 
    PWM_Mode_Setup();
}
  
void loop() {
  Distance = PWM_Mode();

  
  Serial.print("Distance = ");
  Serial.print(Distance);
  Serial.println(" cm");
   
  if ( Distance > distMedium ) {
    digitalWrite(greenLedPin, HIGH);
    digitalWrite(yellowLedPin, LOW);
    digitalWrite(redLedPin, LOW);
    
    if ( tvPower == 0 ) {
      SendPowerCode(tvPower);
      tvPower = 1;
    }
    
    alert = 0;
  }
 
  if ( Distance > distMinimum && Distance < distMedium ) {
    digitalWrite(greenLedPin, LOW);
    digitalWrite(yellowLedPin, HIGH);
    digitalWrite(redLedPin, LOW);
  }
 
  if ( Distance < distMinimum ) {
    digitalWrite(greenLedPin, LOW);
    digitalWrite(yellowLedPin, LOW);
    digitalWrite(redLedPin, HIGH);
    
    alert++;

    NewTone(buzzerPin, 440, duration);


    if (alert > 2) {
      if ( tvPower == 1 ) {
        SendPowerCode(tvPower);
      }
      tvPower = 0;
    }
 }

  delay(1000);
  
  Serial.print("ALERT = ");
  Serial.println(alert);
}
 
  
void PWM_Mode_Setup(){
    pinMode(URTRIG,OUTPUT);       // A low pull on pin COMP/TRIG
    digitalWrite(URTRIG,HIGH);    // Set to HIGH
  
    pinMode(URPWM, INPUT);        // Sending Enable PWM mode command
     
    for (int i=0;i<4;i++) {
        Serial.write(EnPwmCmd[i]);
    }
}
  
int PWM_Mode(){                   // a low pull on pin COMP/TRIG  triggering a sensor reading
    digitalWrite(URTRIG, LOW);
    digitalWrite(URTRIG, HIGH);   // reading Pin PWM will output pulses
      
    unsigned long DistanceMeasured=pulseIn(URPWM,LOW);
      
    if (DistanceMeasured==50000) { // the reading is invalid.
      return 0;
    } else {
        return DistanceMeasured/50; // every 50us low level stands for 1cm
    }
}

void SendPowerCode(int tvPower)
{
  for (int i = 0; i < 3; i++) {
    irsend.sendSony(0xa90, 12); // Sony TV power code
    delay(100);
  }
  
  if ( tvPower == 1 ) {
    Serial.print("Signal Off sent");
  } else {
    Serial.print("Signal On sent");
  }
}

NoNoseOnTV . part 2

0

Et hop voilà le code version 2.

// # Author  : Hugues Lepesant
// # Date    : 24/04/2014
// # Version : 0.2
 
// # URM Code based on Jiang's work from DFRobot
// # Product name:ultrasonic scanner Kit
// # Product SKU:SEN0001
  
// # Description:
// # The Sketch for scanning 180 degree area 4-500cm detecting range
  
// # Connection:
// #       Pin 1 VCC (URM V3.2) -&gt; VCC (Arduino)
// #       Pin 2 GND (URM V3.2) -&gt; GND (Arduino)
// #       Pin 4 PWM (URM V3.2) -&gt; Pin 3 (Arduino)
// #       Pin 6 COMP/TRIG (URM V3.2) -&gt; Pin 5 (Arduino)
// # Pin mode: PWM
// # Working Mode: PWM passive control mode.
// # If it is your first time to use it,please make sure the two jumpers to the right hand
// # side of the device are set to TTL mode. You'll also find a secondary jumper on
// # the left hand side, you must break this connection or you may damage your device.
  
int URPWM=3;        // PWM Output 0-25000us,every 50us represent 1cm
int URTRIG=5;       // PWM trigger pin
 
int pinGreen = 2;
int pinYellow = 6;
int pinRed = 7;

int duration = 1000;
 
int distMinimum = 100; // 100 cm
int distMedium = 150;  // 150 cm
 
boolean up=true;       // create a boolean variable
unsigned long time;    // create a time variable
unsigned long urmTimer = 0; // timer for managing the sensor reading flash rate
  
unsigned int Distance=0;
 
uint8_t EnPwmCmd[4]={0x44,0x22,0xbb,0x01}; // distance measure command
  
void setup() {             // Serial initialization
    Serial.begin(9600);    // Sets the baud rate to 9600
 
    pinMode(pinGreen, OUTPUT);
    digitalWrite(pinGreen, LOW);
     
    pinMode(pinYellow, OUTPUT);
    digitalWrite(pinYellow, LOW);
     
    pinMode(pinRed, OUTPUT);
    digitalWrite(pinRed, LOW);
 
    PWM_Mode_Setup();
}
  
void loop() {
  Distance = PWM_Mode();
  Serial.print("Distance = ");
  Serial.print(Distance);
  Serial.println(" cm");
   
  if ( Distance > distMedium ) {
    digitalWrite(pinGreen, HIGH);
    digitalWrite(pinYellow, LOW);
    digitalWrite(pinRed, LOW);
  }
 
  if ( Distance > distMinimum && Distance < distMedium ) {
    digitalWrite(pinGreen, LOW);
    digitalWrite(pinYellow, HIGH);
    digitalWrite(pinRed, LOW);
  }
 
  if ( Distance < distMinimum ) {
    digitalWrite(pinGreen, LOW);
    digitalWrite(pinYellow, LOW);
    digitalWrite(pinRed, HIGH);
    
    tone(8, 330, duration);
//    noTone(8);
 }
   
  delay(2000);
}
 
  
void PWM_Mode_Setup(){
    pinMode(URTRIG,OUTPUT);       // A low pull on pin COMP/TRIG
    digitalWrite(URTRIG,HIGH);    // Set to HIGH
  
    pinMode(URPWM, INPUT);        // Sending Enable PWM mode command
     
    for (int i=0;i<4;i++) {
        Serial.write(EnPwmCmd[i]);
    }
}
  
int PWM_Mode(){                   // a low pull on pin COMP/TRIG  triggering a sensor reading
    digitalWrite(URTRIG, LOW);
    digitalWrite(URTRIG, HIGH);   // reading Pin PWM will output pulses
      
    unsigned long DistanceMeasured=pulseIn(URPWM,LOW);
      
    if (DistanceMeasured==50000) { // the reading is invalid.
      return 0;
    } else {
        return DistanceMeasured/50; // every 50us low level stands for 1cm
    }
}

NoNoseOnTV, un projet animé par Arduino

0

Ce projet est né du constat que nos enfants sont bien souvent le nez collé sur l’écran.
Afin de corriger ce comportement j’ai pris l’habitude d’éteindre la télé avec la télécommande.
C’est rapidement fatiguant de faire le surveillant. Même si j’ai obtenu quelques succès.

Et la je me dis que si le truc pourrait être fait par un petit montage électronique.
Problème, mes notions d’électronique sont proche de zéro.
Par contre il y a les cartes Arduino qui peuvent être programmées et vous donnent accès à tout un tas de capteurs de l’environnement extérieur.

Armé d’une bonne dose de motivation j’achète le Arduino Starter Kit et quelques composants non inclus chez Arobose.

Voici la première version, les composants sont les suivants :

  • Arduino Uno rev 3
  • Capteur de distance par ultrasons URM 37 V3.2
  • 3 LEDs rouge, jaune, verte, avec des résistances 1kOhm pour pas les cramer
  • Platine de montage


Sensor_bb

 
 

Le fonctionnement de cette version 0.1 est simple.
Si une présence est détectée à plus de 1.5 m la LED verte s’allume.
Si une présence est détectée à moins de 1.5 m la LED jaune s’allume.
Si une présence est détectée à moins de 1 m la LED rouge s’allume.

Pour le code le voici :

// # Author  : Hugues Lepesant
// # Date    : 11/04/2013
// # Version : 0.1

// # URM Code based on Jiang's work from DFRobot
// # Product name:ultrasonic scanner Kit
// # Product SKU:SEN0001
 
// # Description:
// # The Sketch for scanning 180 degree area 4-500cm detecting range
 
// # Connection:
// #       Pin 1 VCC (URM V3.2) -&gt; VCC (Arduino)
// #       Pin 2 GND (URM V3.2) -&gt; GND (Arduino)
// #       Pin 4 PWM (URM V3.2) -&gt; Pin 3 (Arduino)
// #       Pin 6 COMP/TRIG (URM V3.2) -&gt; Pin 5 (Arduino)
// # Pin mode: PWM
// # Working Mode: PWM passive control mode.
// # If it is your first time to use it,please make sure the two jumpers to the right hand
// # side of the device are set to TTL mode. You'll also find a secondary jumper on
// # the left hand side, you must break this connection or you may damage your device.
 
int URPWM=3;        // PWM Output 0-25000us,every 50us represent 1cm
int URTRIG=5;       // PWM trigger pin

int pinGreen = 2;
int pinYellow = 6;
int pinRed = 7;

int distMinimum = 100; // 100 cm
int distMedium = 150;  // 150 cm

boolean up=true;       // create a boolean variable
unsigned long time;    // create a time variable
unsigned long urmTimer = 0; // timer for managing the sensor reading flash rate
 
unsigned int Distance=0;

uint8_t EnPwmCmd[4]={0x44,0x22,0xbb,0x01}; // distance measure command
 
void setup() {             // Serial initialization
    Serial.begin(9600);    // Sets the baud rate to 9600

    pinMode(pinGreen, OUTPUT);
    digitalWrite(pinGreen, LOW);
    
    pinMode(pinYellow, OUTPUT);
    digitalWrite(pinYellow, LOW);
    
    pinMode(pinRed, OUTPUT);
    digitalWrite(pinRed, LOW);

    PWM_Mode_Setup();
}
 
void loop() {
  Distance = PWM_Mode();
  Serial.print("Distance = ");
  Serial.print(Distance);
  Serial.println(" cm");
  
  if ( Distance &gt; distMedium ) {
    digitalWrite(pinGreen, HIGH);
    digitalWrite(pinYellow, LOW);
    digitalWrite(pinRed, LOW);
  }

  if ( Distance &gt; distMinimum &amp;&amp; Distance &lt; distMedium ) {
    digitalWrite(pinGreen, LOW);
    digitalWrite(pinYellow, HIGH);
    digitalWrite(pinRed, LOW);
  }

  if ( Distance &lt; distMinimum ) {
    digitalWrite(pinGreen, LOW);
    digitalWrite(pinYellow, LOW);
    digitalWrite(pinRed, HIGH);
  }
  
  delay(2000);
}

 
void PWM_Mode_Setup(){
    pinMode(URTRIG,OUTPUT);       // A low pull on pin COMP/TRIG
    digitalWrite(URTRIG,HIGH);    // Set to HIGH
 
    pinMode(URPWM, INPUT);        // Sending Enable PWM mode command
    
    for (int i=0;i&lt;4;i++) {
        Serial.write(EnPwmCmd[i]);
    }
}
 
int PWM_Mode(){                   // a low pull on pin COMP/TRIG  triggering a sensor reading
    digitalWrite(URTRIG, LOW);
    digitalWrite(URTRIG, HIGH);   // reading Pin PWM will output pulses
     
    unsigned long DistanceMeasured=pulseIn(URPWM,LOW);
     
    if (DistanceMeasured==50000) { // the reading is invalid.
      return 0;
    } else {
        return DistanceMeasured/50; // every 50us low level stands for 1cm
    }
}

La roadmap du projet est la suivante :

Version 0.2 :
Un signal sonore (façon « dernière sommation ») est joué.

Version 0.3 :
Après la sommation, la télé est éteinte.

Version 0.4 :
Si aucune présence n’est détectée à moins de 1.5 m pendant 10 secondes la télé est rallumée.

Version 0.5 :
Pouvoir programmer le code d’extinction de la télé avec la télécommande de celle-ci.

Version 0.6 :
Réalisation d’un boitier pour placer le NoNoseOnTV sous la télé.

Version 0.7 :
Réalisation d’un PCB.

Version 0.8 :
Réalisation d’un boitier pour une diffusion en masse.

Version 0.9 :
Vendre le truc à Sony, Samsung, Toshiba, Philips,

Version 1.0 :
Aller se coucher ou partir en vacances.

MiG

Mail Intelligent Gateway

0

MiG

La passerelle MiG est une passerelle SMTP permettant l’envoie de mails contenant des pièces jointes volumineuses. Elle fonctionne de deux manières différentes selon que la taille du mail traité dépasse une certaine limite (exemple: 5Mo).

Dans le cas d’un mail dont la taille est inférieure à 5Mo, le mail transit à travers la passerelle et est transféré au serveur gérant le domaine du destinataire.

Dans le cas d’un mail dont la taille est supérieur à la limite fixée, le mail subit les modifications suivantes

  1. Séparation des pièces jointes volumineuses du corps du message
  2. Stockage des pièces jointes sur un serveur de fichier
  3. Génération d’un lien web pointant vers les pièces jointes
  4. Modification du corps du message pour y ajouter le descriptif des pièces jointes (nom, type de fichier, taille) , les liens associés, et un texte explicatif sur la transformation apportée au message original par la plateforme MiG.

La plateforme MiG est destinée aux ISP et autres opérateurs télécom désirant offrir un service SMTP sans limite, et offrant de nombreux avantages :

  • Diminution de la bande passante. Seul le lien entre le poste client et la plateforme MiG est utilisé

La gestion des identités se fait par un portail web. Une personne identifié chez le client à la charge de créer les comptes SMTP-AUTH.

  • Chaque société cliente, et/ou compte est associé à un compte crédité de jetons.
    • abonnement mensuel limité,
    • abonnement mensuel illimité,
    • one shot
  • L’envoie de messages non volumineux ne retire aucun jeton. Par contre l’envoie de messages volumineux consomme un jeton. L’alimentation du compte en jeton est faite de différents manières selon le profil de compte :

  • Suivi du téléchargement des pièces jointes

L’expéditeur est notifié par message du téléchargement des pièces jointes dans son message. Afin de préserver l’espace de stockage des pièces jointes, les messages sont soumis à une durée de rétention de ces messages. Cette durée est modulable selon le profile de l’expéditeur. Les pièces jointes non téléchargées bénéficies du service de relance du destinataire, et d’une durée de rétention prolongée. L’expéditeur a la possibilité de prolonger la durée de rétention des pièces jointes d’un message en utilisant des jetons.

[Partie à terminer]

A propos du projet

Ce vieux projet trotte dans ma tête depuis quelques années. Ce projet est un projet libre. Basé sur des solutions libres, la plateforme MiG, ainsi que les sources des modules binaires et services Web nécessaire au fonctionnement de MiG devront respecter la licence BSD. La plateforme de prédilection de cette solution pourra être FreeBSD ou GNU/Linux. Des ports ou packages seront disponibles. L’utilisation d’un milter et/ou d’un service LMTP doivent permettre à l’administrateur de choisir son MTA favoris. (to be continued)

Le Logo

C’est une ébauche rapide. Il reprend le nez du fameux MIG-21

OpenXchange 5 SOAP Admin PHP scripts

The commercial edition of OpenXchange 5
comes with some tools to manage users, groups, resource or group of resource.

This tools must be used in commande line and are located in :


/opt/openexchange/ox_admin_tools/openexchange-daemons/sbin/

There is no way to give a minimalist administration interface of their users,
groups, resources and group of resource with the OxAdmin interface.

So I made this few PHP scripts to act as a SOAP server.
This PHP script run each OXAdmin command line tools in a SOAP call.
They are the base of any web interface to manage the open-xchange server.
They use nusoap with PHP4.

Download now !

To execute this scripts you must :
– install some RPMs to have php4
– configure sudo to make the user running apache able to run the oxadmin tools
– untar the archive file in /var/www/html/
– restart apache

This scripts are under GPL.
Use, modify, send feedback, re-distribute.

Have fun,
Hug

Haut de page