asso:si:si_garage

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
asso:si:si_garage [2022/11/27 19:06] – supprimée - modification externe (Unknown date) 127.0.0.1asso:si:si_garage [2026/08/11 01:07] (Version actuelle) grapsus
Ligne 1: Ligne 1:
 +===== 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:
 +<code>
 +apt install python3-flask python3-serial
 +adduser lov dialout
 +</code>
 +
 +Code du serveur dans /home/lov/garage:
 +<code>
 +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)
 +</code>
 +
 +<code>
 +#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, HIGH);
 +}
 +
 +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(800);
 +      pinMode(9, INPUT);
 +      digitalWrite(9, HIGH);
 +      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");
 +    }
 +}
 +</code>
 +
 +Pour lancer au boot du serveur dans rc.local:
 +<code>
 +sudo -u lov -g lov /usr/bin/python3 server.py 2>&1 >/var/log/garage.log &
 +</code>