Domotiser un portier Extel

Bonjour à toutes et tous !

Je suis plutôt débutant dans le monde de la domotique et j’ai une question :

Je dispose d’un portier Extel (pas tout jeune), la partie extérieure est alimentée électriquement en filaire via l’écran à l’intérieur.
J’aimerais intercepter le signal quand quelqu’un sonne afin de lancer une action via un scénario Jeedom (en l’occurrence allumer une lumière ou faire sonner une petite alarme, je ne sais pas encore).

Je ne vois pas quel matériel je dois utiliser (contact sec ?).
J’ai dans l’idée d’interposer le « capteur » avant l’écran afin qu’il voit le signal électrique passer et fasse signe à Jeedom qu’il se passe quelque chose, mais je nage complètement !

Je précise que je souhaite vraiment que tout passe par Jeedom et non pas une application externe sur smartphone.

Auriez-vous une idée ?

D’avance merci :slight_smile:

Bonjour,

Je suis intéressé par le sujet. J’ai aussi un portier Extel (js-s436e0), mais de ce que j’ai pu voir ce n’était pas évident.
En effet, pour la partie intérieur avec écran, il y a juste l’alimentation et deux fils qui partent vers la partie extérieure. Dans ces deux fils, il passe l’alimentation vers le boitier extérieur, le signal vidéo, l’information d’appui sur le bouton sonnette, et les ordres d’ouverture portillon et/ou portail. Du coup, c’est forcément pas un contact simple et il doit y avoir un protocole de communication sur ces deux fils.
N’ayant pas réussi à trouver plus d’informations, je ne suis pas allé plus loin même si c’est vrai que ça m’intéresserait.

Bonjour,
J’avais également un portier Extel mais j’ai abandonné l’idée de décoder leur protocole de communication.
J’ai gardé la coque extérieure et remplacer l’interieur avec un rapsberry et une caméra grand angle avec RPI_Cam dans un boitier imprimé en 3D.
Pour le bouton, j’ai un script python qui tourne sur le pi et qui envoi un message MQTT à mon Jeedom lorsque le bouton est pressé.

Jeedom se charge de faire la capture, de l’envoyer sur nos smartphones et de faire sonner la gateway Xiaomi/Google Home

Cette solution fait perdre le retour vidéo et la communication bi-directionnelle mais je n’en avais pas l’utilité.

1 « J'aime »

Les modules Fibaro FGBS-001 et/ou FGBS-222 servent entre autres à capter ce genre de chose.
Faut du Zwave par contre.

Merci pour vos réponses !

Il faut que je vois avec le FGBS-222 donc, mais il restera la question du branchement, l’électronique est relativement opaque pour moi xD

Merci bien

1 « J'aime »

Hello ,

Suite à cet article:
(Comment domotiser un portier vidéo avec un module Fibaro fgbs-001 - Page 2 sur 2)

j ai réalisé ce montage sur un autre portier avec le même fonctionnement , la pression du bouton coupe le circuit .

bon les soudures sont horribles mais ça tient !!

si je teste , aux borniers de sortie OUT1 , au testeur j ai bien bien 0 volt à la pression du bouton et l’appel se fait comme avant .

Sauf que je ne vois rien arriver sur ma box Jeedom .

Y a t il un paramètre à modifier sur le FGBS-001 ? j 'ai l’impression que c’est purement un problème Zwave module /Box .
Les commandes du modules sont toutes en infos.

Icone

J ai exclu / ré-inclu => pareil !!

Vous avez une idée ?

Merci par avance,

Minos

C 'est résolu !!

Tout simplement une mauvaise inclusion !!

Mon module n 'avait pas de voisin de déclaré j ai soigné le nœud … l’inclusion a redémarré .

Et tout communique !! :grin:

Bon il me reste un soucis à régler , c 'est récupérer la vidéo lors de l’appel …

A suivre.

1 « J'aime »

bonjour ,juste pour connaitre la fin de l histoire ?

Salut, j’ai également un vieux visiophone Extel LENA 11.3 (js-s436e0). J’ai fait quelques mesures pour essayer de lui rajouter des capteurs ou pour acquérir le signal vidéo.

Le lien entre la platine de rue et le boitier de commande est fait avec 2 fils avec un voltage autour de 13 V DC. La vidéo, la voix et le signal de sonnerie sont encodés sur ces 13V. Cas particulier pour la commande d’ouverture du portique ou du portail où le voltage passe de 13V à 17V. Je n’ai pas d’oscilloscope pour identifier le protocole utilisé malheureusement. En tout cas cela doit ressembler à ce qui est présenté pour ce portier : 2Wire Intercom Arduino Hacking, How to controll TCS via Arduino - YouTube

J’ai surtout regardé la platine de rue. Il y a moyen de détecter lorsque quelqu’un sonne car lors d’un appui sur le bouton, le signal de 5V connecté au bouton est coupé pendant l’appui. Par contre, je n’ai pas encore trouvé de moyen de voir ce signal côté boitier de commande.

Pour la vidéo, la camera est alimenté en 10V lorsque quelqu’un sonne ou lorsque l’on allume l’écran. La camera renvoie un signal composite PAL (que l’on peut afficher sur une TV).

Mon idée serait de brancher un raspberry pi zero ou arduino ou autre pour intercepter les signaux et remonter l’info dans ma domotique. Et idéalement récupérer le flux vidéo en permanence pour faire une caméra de surveillance.

Pour la vidéo, il suffirait d’alimenter la camera en 10V en permanence pour avoir le signal composite. Après il faut voir comment l’encoder et le transmettre ou l’enregistrer. Le truc c’est qu’il faut une alimentation pour l’enregistreur.

J’ai fait un test pour alimenter un Raspberry Pi Zero avec le 13 V provenant des 2 fils (avec un transformateur variable vers 5V CC). J’ai aussi testé avec le 5 V disponible à certain endroit sur la platine de rue. Le Raspberry Pi est bien alimenté et démarre, mais cela produit des perturbations sur les 2 fils qui rend le portier fou (sonnette en boucle). J’imagine que la charge du Pi Zero induit des perturbations sur le bus qui fait croire que l’on est toujours en train de sonner. Je ne sais pas comment éviter cela pour le moment.

Je m’en suis arrêté là pour le moment

Bonjour
J’ai perso un portier extel avec deux ecrans ; ce projet de domotisation m’intéresse au plus haut point

aurais tu avancé sur ce sujet ?

Salut, après avoir passé (beaucoup trop) de temps à analyser ce visiophone (Extel LENA 11.3 js-s436e0). J’arrive à la fin du projet. J’ai pu récupérer le signal vidéo composite PAL, récupérer les états des boutons (quelqu’un sonne, active la vidéo, ouvre le portail…), et aussi agir sur le visiophone (demander l’activation de la vidéo, l’ouverture du portail etc.).

Comme tout est en 5 volts, cela peut se faire avec un arduino. J’ai tenté avec un ESP32 C3 Mini car avec le wifi intégré ça serait plus pratique pour manipuler le visiophone que de passer par le serial.
L’ESP32 fonctionne aussi mais il faut jouer avec des transistors et mosfets pour rehausser ou abaisser le voltage de 3.3V à 5V quand on s’interface avec le microcontrôleur du visiophone.

Voici une partie des infos que j’ai pu recueillir avec un oscilloscope

# Hack Extel LENA 11.3

La documentation suivante s'applique uniquement au boitier noir situé à l'intérieur du logement.
La platine de rue n'a pas été analysée.

On considère que le boitier est positionné avec l'écran vers le haut et que l'on a vue sur l'arrière du boitier.

## Microcontrôleur

Le microcontrôleur est un TM57FLA80A dans un format DIP20. Il est situé en bas à gauche sur la carte mère.

### Assignation des pins

On considère le microcontrôleur orienté avec sa marque ronde vers le bas. Les pins sont listées de haut en bas.

#### Partie gauche (nommée A)

* A0 : état du 12 volts (activé 0V, désactivé 5V)
* A1 : état du microphone intérieur (activé 5V, désactivé 0V)
* A2 : entrée analogique du bouton portail (activé 0V, désactivé 5V)
* A3 : entrée analogique du bouton clé (activé 0V, désactivé 3V)
* A4 : inconnu (5V)
* A5 : inconnu (5V)
* A6 : envoi de commandes vers la platine de rue (signal de 5V, repos 0V)
* A7 : entrée analogique du bouton caméra (activé 0V, désactivé 5V)
* A8 : entrée analogique du bouton microphone (activé 0V, désactivé 5V)
* A9 : alimentation Vcc (5V)

#### Partie gauche (nommée B)

* B0 : état du bouton microphone, du bouton choix sonnette et activation de la sonnette (impulsions activé 5V, désactivé 0V)
* B1 : idem B0
* B2 : état du bouton choix sonnette (activé 0V, désactivé 5V)
* B3 : états des boutons (voir paragraphe dédié)
* B4 : état du microphone extérieur (activé 0V, désactivé 5V)
* B5 : inconnu (activé 0V, désactivé 5V)
* B6 : inconnu (5V)
* B7 : sinusoïde, clock ? (33 Hz)
* B8 : inconnu (activé 0V, désactivé 2V)
* B9 : masse Vss (GND)

### Pin A6

La pin A6 envoie des commandes pour la platine de rue.
Le signal est un signal PWM de 0 volt à 5 volts.
Le signal change de voltage toutes les 10 us.
La commande est déterminée suivant la durée d'activation du signal.

* Pas de commande : 0 volt
* Sonnette : signal pendant 10000 us
* Désactivation vidéo : signal pendant 20000 us
* Activation microphone : signal pendant 30000 us
* Activation vidéo: signal pendant 50000 us
* Activation du rélai portail: signal pendant 60000 us
* Activation du rélai clé : signal pendant 80000 us

### Pin B3

La pin B3 indique un changement d'état d'un bouton.
La valeur est encodée sur 30 bits pendant 3000 us.
Un bit à donc une durée de 100 us.
5 volts est un 0 et 0 volt est un 1.

Liste des valeurs décimales pour l'état d'un bouton:

* Sonnette : 266873596
* Désactivation vidéo : 266900220
* Activation microphone : 266920700
* Activation vidéo : 266898172
* Activation du rélai portail : 266922748
* Activation du rélai clé : 266924796

## Carte fille des boutons

Les 4 boutons caméra, microphone, portail et clé sont sur une carte fille situé en haut à gauche.
La carte fille est reliée à la carte mère avec 6 fils.

Assignation des pins sur le port CM2 de la carte mère. En partant du pin le plus proche de la marque CM2 :
Bouton microphone, bouton vidéo, bouton clé, bouton portail, masse ?, masse ?

## Carte fille décodage vidéo

La carte de décodage vidéo est soudée sur la carte mère avec 5 pins en bas à gauche. Juste au dessus du microcontrôleur.

On considère la carte fille orientée avec ses 5 pins vers le bas. Les pins sont listées de gauche à droite.

* Signal vidéo composite
* Alimentation Vcc (12V)
* Masse Vss (GND)
* Masse du signal vidéo composite
* Signal vidéo non décodé (13V)

## Fonctionnement

Lors de l'appui sur le bouton de la sonnette ou le bouton vidéo, du 12 volts est envoyé :

* à l'alimentation de la carte fille de décodage vidéo
* à l'alimentation du microcontrôleur de l'écran LCD (autour de R75)
* à la LED en haut du boitier pour changer sa couleur en vert

Le temps d'activation de la caméra dépend du bouton appuyé :

* Bouton sonnette : 30 secondes
* Bouton caméra : 60 secondes

Le programme arduino associé

#define PIN_READ_STATE 2 // From IC, B3 pin
#define PIN_SEND_COMMAND 3 // To IC, A6 pin

#define COMMAND_BELL 10000
#define COMMAND_VIDEO_OFF 20000
#define COMMAND_MICROPHONE_ON 30000
#define COMMAND_VIDEO_ON 50000
#define COMMAND_FRONT_GATE_RELAY 60000
#define COMMAND_KEY_RELAY 80000

#define STATE_BIT_DURATION 100 // Bit duration, in microseconds
#define STATE_FRAME_DURATION 3000 // Total frame duration, in microseconds
#define STATE_MAX_SAMPLE_COUNT STATE_FRAME_DURATION / STATE_BIT_DURATION

#define STATE_BELL 266873596
#define STATE_VIDEO_OFF 266900220
#define STATE_MICROPHONE_ON 266920700
#define STATE_VIDEO_ON 266898172
#define STATE_FRONT_GATE_RELAY 266922748
#define STATE_KEY_RELAY 266924796

volatile long long onStateChanges[STATE_MAX_SAMPLE_COUNT] = {};
volatile byte onStateChangesIndex = 0;

void onState() {
  const long long now = micros();
  if (abs(now - onStateChanges[0]) > STATE_FRAME_DURATION)
    onStateChangesIndex = 0;
  if (onStateChangesIndex > STATE_MAX_SAMPLE_COUNT)
    return;

  onStateChanges[onStateChangesIndex] = now;
  onStateChangesIndex++;
}

void sendCommand(long long command) {
  const long long deadline = micros() + command;

  pinMode(PIN_SEND_COMMAND, OUTPUT);
  digitalWrite(PIN_SEND_COMMAND, LOW);
  while (micros() < deadline) {
    digitalWrite(PIN_SEND_COMMAND, HIGH);
    delayMicroseconds(10);
    digitalWrite(PIN_SEND_COMMAND, LOW);
    delayMicroseconds(10);
  }

  pinMode(PIN_SEND_COMMAND, INPUT);
}

void setup() {
  Serial.begin(9600);
  while (!Serial) {}

  pinMode(PIN_SEND_COMMAND, INPUT);
  pinMode(PIN_READ_STATE, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(PIN_READ_STATE), onState, CHANGE);

  digitalWrite(PIN_READ_STATE, LOW);
}

bool screenRelayStatus = false;

void loop() {
  while (Serial.available() > 0)
    Serial.read();

  Serial.print("Enter action: ");
  int action = 0;
  while (action < 1 || action > 7) {
    while (Serial.available() <= 0);
    action = Serial.parseInt();
  }
  Serial.println(action);

  if (action == 1){
    Serial.println("COMMAND_BELL");
    sendCommand(COMMAND_BELL);
  }
  else if (action == 2){
    Serial.println("COMMAND_VIDEO_OFF");
    sendCommand(COMMAND_VIDEO_OFF);
  }
  else if (action == 3){
    Serial.println("COMMAND_MICROPHONE_ON");
    sendCommand(COMMAND_MICROPHONE_ON);
  }
  else if (action == 4){
    Serial.println("COMMAND_VIDEO_ON");
    sendCommand(COMMAND_VIDEO_ON);
  }
  else if (action == 5){
    Serial.println("COMMAND_FRONT_GATE_RELAY");
    sendCommand(COMMAND_FRONT_GATE_RELAY);
  }
  else if (action == 6){
    Serial.println("COMMAND_KEY_RELAY");
    sendCommand(COMMAND_KEY_RELAY);
  }
  else if (action == 7){
    long long stateChanges[STATE_MAX_SAMPLE_COUNT] = {};
    cli();
    const byte stateChangesIndex = onStateChangesIndex;
    memcpy(stateChanges, (const void *)onStateChanges, sizeof(onStateChanges[0]) * STATE_MAX_SAMPLE_COUNT);
    sei();

    uint32_t state = 0;
    uint32_t level = LOW;
    byte stateIndex = 0;

    for (byte i = 1; i < stateChangesIndex; i++) {
      const unsigned long elapsed = stateChanges[i] - stateChanges[0];
      const unsigned long bitCount = (elapsed + (STATE_BIT_DURATION / 2)) / STATE_BIT_DURATION;

      for (; stateIndex < bitCount; stateIndex++)
        state |= level << stateIndex;

      level = level == LOW ? HIGH : LOW;
    }

    switch (state) {
    case 0:
      if (stateIndex == 1)
        Serial.println("Start/stop");
      else
        Serial.println("None");
      break;
    #define SWICTH_CASE_DEBUG(_case) case _case: Serial.println(#_case); break;
    SWICTH_CASE_DEBUG(STATE_BELL)
    SWICTH_CASE_DEBUG(STATE_VIDEO_OFF)
    SWICTH_CASE_DEBUG(STATE_MICROPHONE_ON)
    SWICTH_CASE_DEBUG(STATE_VIDEO_ON)
    SWICTH_CASE_DEBUG(STATE_FRONT_GATE_RELAY)
    SWICTH_CASE_DEBUG(STATE_KEY_RELAY)
    #undef SWICTH_CASE_DEBUG
    default:
      Serial.print("Unkown state: ");
      Serial.println(state, BIN);
      Serial.println(state, DEC);
      break;
    }
  }
}

@seb821 @aladin