Ceci est une ancienne révision du document !
Système d'ouverture du garage
Le système d'ouverture du garage écoute sur le port 4280 et attend une requête sur une URL secrète de la part de framateam. Suite à cette requête il ouvre le périphérique série et lui envoie une commande pour procéder à l'actionnement du moteur.
Pré-requis:
apt install python3-flask python3-serial adduser lov dialout
Code du serveur dans /home/lov/garage:
from flask import Flask
app = Flask(__name__)
import serial
ARDUINO = '/dev/serial/by-id/usb-Arduino__www.arduino.cc__Arduino_Uno_64938323131351213190-if00'
@app.route('/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', methods=['POST'])
def open():
try:
with serial.Serial(port=ARDUINO, baudrate=9600) as f:
banner = f.readline().decode('ascii')
if 'LOV' not in banner:
return "didn't find the garage opener banner"
f.write(b'O')
f.flush()
resp = f.readline().decode('ascii')
return "\n".join((banner, resp))
except serial.serialutil.SerialException as e:
return str(e)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=4280)
#include <Servo.h>
Servo servo;
void setup() {
pinMode(10, OUTPUT);
digitalWrite(10, LOW);
pinMode(11, OUTPUT);
digitalWrite(11, LOW);
Serial.begin(9600);
Serial.println("LOV garage opener v3");
/*servo.attach(9);
servo.write(0);
delay(400);
servo.detach();*/
pinMode(9, INPUT);
digitalWrite(9, LOW);
}
void loop() {
int c = 0;
c = Serial.read();
if (c == 'O') {
//Code for activating the servo of that simulates a click on the real life remote of the garagedoor
Serial.println("opening garage...");
/*servo.attach(9);
servo.write(30);
delay(1000);
servo.write(0);
delay(400);
servo.detach();*/
pinMode(9, OUTPUT);
digitalWrite(9, LOW);
delay(1000);
pinMode(9, INPUT);
Serial.println("done");
} else if (c == 'E') {
//Serial data for shorting the remote controller of backdoor
Serial.println("opening back door...");
digitalWrite(10, HIGH);
delay(2500);
digitalWrite(10, LOW);
Serial.println("done");
} else if (c == 'L') {
//Serial data for shorting the remote controller of backdoor
Serial.println("closing back door...");
digitalWrite(11, HIGH);
delay(2500);
digitalWrite(11, LOW);
Serial.println("done");
}
}
Pour lancer au boot du serveur dans rc.local:
sudo -u lov -g lov /usr/bin/python3 server.py 2>&1 >/var/log/garage.log &