asso:si:si_garage

Ceci est une ancienne révision du document !


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 &
  • asso/si/si_garage.1786407027.txt.gz
  • Dernière modification : 2026/08/11 00:10
  • de grapsus