X-WIEGAND et X-DISPLAY V2 : La sûreté avec IPX800 V5

De GCE Electronics
Aller à la navigation Aller à la recherche

ACCÈS ET INTRUSION

Wiegand.jpg
Nom ACCÈS ET INTRUSION
Famille IPX800 V5
Wiki créé le 11/11/2024
Wiki mis à jour le 11/11/2024
Auteur fgtoul

Introduction

La mise en place d'un système de contrôle d'accès efficace est essentielle pour garantir la sécurité et la tranquillité d'esprit dans tout environnement, qu'il soit résidentiel ou professionnel. L'intégration de dispositifs utilisant le protocole Wiegand, combinés à un clavier digital et tactile, offre une solution moderne et fiable pour la gestion des accès et des systèmes d'alarme.

Les dispositifs Wiegand sont réputés pour leur robustesse et leur compatibilité avec une large gamme de lecteurs de cartes et de claviers. En les associant à un clavier digital et tactile, vous pouvez non seulement contrôler l'accès à vos locaux, mais aussi gérer les systèmes d'alarme de manière intuitive et sécurisée. Cette combinaison permet une flexibilité accrue dans la configuration des accès et une réponse rapide en cas d'incident.

L'utilisation d'un clavier tactile ajoute une couche de modernité et de facilité d'utilisation, permettant aux utilisateurs de saisir des codes d'accès ou de désarmer une alarme avec une simple pression du doigt. De plus, le X-Display est intégré dans votre système domotique et offre ainsi une gestion centralisée et simplifiée de la sécurité.

L’IPX800 V5 a introduit des outils innovants pour la conception de systèmes de contrôle d’accès dans sa version 5.5.8.

Depuis la version 5.5.8, grâce au clavier virtuel intégré sur le X-Display V2, il est désormais possible de saisir des codes pour exécuter diverses actions sur l’IPX800 V5.

De plus, l'extension X-Wiegand, sous forme de micromodule, peut être facilement dissimulée dans un boîtier encastrable, sous un clavier ou un lecteur RFID, offrant ainsi une solution discrète et efficace pour vos besoins de sécurité.

Nous aborderons la mise en place d'un contrôle d'accès avec le module X-Wiegand.


Vous devez au préalable connaître les méthodes de programmation de l'IPX800 V5.

Pour cela, je vous invite à lire les articles suivants :

Clavier virtuel sur X-Display

Illustration clavier.png

Prérequis :

Pour bénéficier de cet écran présentant un clavier virtuel, vous devrez vous assurer que votre X-Display est en version 3.1 ou supérieure. Votre IPX800 V5 doit être en version 5.5.8 minimum.

Votre X-Display doit être connecté et configuré sur l'IPX800 (consultez la documentation du produit pour plus d'information).

Pour le pilotage d'un système d'alarme, je préconise l'utilisation du display sur alimentation secourue. La X-PSU équipée de sa batterie remplira ce rôle.

Mise en œuvre sur IPX800 V5 :

En vous rendant sur la page Liens/Objets, vous devez préalablement créer un objet de type "Access Control".

Access control.png

Cliquez sur le bouton Édition pour nommer l'objet, et saisir jusqu'à 6 codes autorisés. Vous devez également associer une variable de type String (vous l'aurez créée préalablement) qui recevra le dernier code entré au clavier.

Edition access control.png


En vous rendant sur la page Liens/Extensions, créez un nouvel écran de type "Access Control" dans la configuration du X-Display, et associez cet écran à l'objet "Access Control" créé précédemment.

Config x-display et access control.png


Vérifiez l'affichage du clavier digital sur votre X-Display.

Fonctionnement de l'objet Access Control :

lors de l'entrée d'un code valide, la sortie de l'objet passe ON momentanément (impulsion d'une seconde environ).

De même, la sortie "Défaut" s'active temporairement lors de la saisie d'un code erroné.

L'utilisation la plus simple de l'objet Access control consiste donc à lier sa sortie à un objet Télérupteur.

Un même code valide entré plusieurs fois activera puis désactivera la sortie du télérupteur.

Image telerupteur et access control.png

À ce stade, vous pouvez déclencher des actions à partir de l'impulsion de la sortie du contrôle d'accès, ainsi que de la sortie du télérupteur.

Vous avez également la possibilité de lier la sortie "Défaut" à une sortie collecteur ouvert, sur laquelle un buzzer (type piézo actif) ou tout autre dispositif peut être connecté pour se déclencher en cas de saisie d'un code erroné. L'état de cette sortie peut également être utilisé pour enclencher des actions par scénario.

X-Wiegand

Le module X-Wiegand est compatible avec les dispositifs de contrôle d'accès utilisant le protocole Wiegand. L'utilisation la plus simple consiste à connecter un clavier ou un lecteur de badge RFID pour activer une alarme. Dans ce cas, il est recommandé d'installer le clavier à l'intérieur, avec le module placé derrière, grâce à un boîtier d'encastrement.

L'utilisation complète du module permet également de gérer l'ouverture d'une porte via une sortie relais. Il est crucial de respecter les règles de sécurité lors de l'installation de verrouillages automatiques sur des issues. Les Établissements Recevant du Public (ERP) doivent se conformer à la réglementation et aux normes (APSAD, CNIL, NF S61-937, etc.). Par exemple, un Dispositif à Déclenchement Manuel (DM) est obligatoire sur une issue de secours, et les dispositifs de verrouillage doivent se désactiver par coupure de l'alimentation.

Le bon sens peut sauver des vies en cas d'incendie. Soyez prudents et, si nécessaire, faites appel à des installateurs professionnels.

Remarque :

Pour commuter l'alimentation d'un dispositif d'ouverture (comme une gâche électrique ou une ventouse électromagnétique), il est préférable d'utiliser une alimentation dédiée pour éviter toute perturbation de votre installation domotique. Si l'ajout d'une alimentation dédiée n'est pas possible, veillez à installer une diode de roue libre aux bornes du dispositif concerné pour limiter les effets néfastes du.

Pour garantir un fonctionnement optimal du système de sécurité, utilisez uniquement des alimentations secourues, tant pour la domotique que pour les dispositifs de verrouillage.

Exemples d'installations

Clavier intérieur pour alarme

Illustration installation 1 xwiegand.png

Le module peut être discrètement installé derrière le clavier. Il est alimenté par la X-PSU, tout comme le clavier Wiegand.

Schema 1 installation wiegand.png

Clavier extérieur avec pilotage d'une gâche

Installation sur porte d'entrée

Le module ne doit pas être accessible de l'extérieur, pour des raisons évidentes de sécurité.

Sur une porte d'entrée, montez le module à l'intérieur.


Illustration 2 installation wiegand.png

Installation déportée à l'extérieur

Si vous devez déporter le module à l'extérieur (au niveau d'un portail, portillon), il est impératif d'utiliser un coffret étanche.

Pour la sécurité de votre installation, ne le placez pas à un endroit accessible ou non sécurisé.

Des armoires ou coffrets électriques renforcés peuvent être utilisés.

L'illustration ci-dessous montre simplement la possibilité de déporter le module. Assurez-vous de placer le coffret renforcé et étanche dans un endroit plus sécurisé.

Illustration 3 installation wiegand.png

Schéma de branchements

Pour les alimentations, utilisez une section de câble adaptée à la distance et à la consommation maximale.

Utilisez toujours du câble blindé pour la liaison du bus EBX entre votre tableau domotique et le module.

Il est recommandé d'établir les liaisons Wiegand en câble blindé également, en particulier pour les fils D0 et D1. Le blindage aide à réduire les interférences électromagnétiques (EMI) et les bruits parasites, , ce qui est crucial pour maintenir l'intégrité des données transmises entre les lecteurs et le module.


Schema 2 installation wiegand.png

Mise en œuvre du module sur IPX800

Prérequis

Vous devez disposer d'un module correctement branché sur votre IPX800 V5. Pour plus d'informations, vous pouvez vous reporter à la documentation du matériel.

Vous devez également vous assurer que l'IPX800 V5 est en version 5.5.8 ou supérieure.

Ajoutez et configurez l'extension sur votre IPX800 V5.

Objet Extension X-Wiegand sur V5.png

L'objet Access Control

Sur la page Liens/Objets, créez un nouvel objet de type Access Control


puis liez le champ "Contenu Str" à la ressource strCurrentCode_id de l'extension Wiegand précédemment ajoutée.

Ce lien permet à l'objet Access Control de récupérer le code saisi au clavier wiegand ou la valeur du badge rfid.

Saisissez jusqu'à 6 codes valides dans l'objet Access Control.

Il est à noter que les 6 codes déclencheront les mêmes actions (par liens ou scénarios).


Config access control avec wiegand.png

Vous pourrez utiliser ou afficher la valeur du dernier code saisi via la ressource strCurrentCode_id.


Remarque :

si vous souhaitez effectuer plusieurs actions différentes via la saisie d'un code ou d'un badge, vous devrez créer un objet Access Control par action souhaitée, en prenant soin de différencier les codes autorisés. En effet, l'IPX800 active la sortie du module associé au code entré. Si ce code est commun à plusieurs objets Control, la sortie de tous ces objets est activée ce qui peut générer plusieurs actions simultanées

Exemples de programmation

Exemple 1 : Ouverture du portillon

Image portillon.png

Gâche à émission branchée sur X-Wiegand

Diagramme portillon wiegand.png

Gâche à rupture branchée sur X-Wiegand

Diagramme gache rupture wiegand.png

Exemple 2 : un clavier pour des actions multiples

Dans le cadre de la gestion d'accès sécurisée, un système utilisant un clavier Wiegand a été mis en place. Ce système permet l'ouverture du portillon via un code d'accès unique attribué à chaque membre de la famille Un code spécifique supplémentaire est attribué au jardinier, lui permettant non seulement d'ouvrir le portillon, mais aussi d'accéder au cabanon pour utiliser les outils nécessaires. De plus, ce code active une prise pilotée par la domotique.

Le cabanon est verrouillé par une ventouse électromagnétique à rupture (déverrouillée lorsque le courant disparait).

Illustration portillon + cabanon.png

Schéma multiple wiegand.png

code jardinier : 00002 / ouvre portillon, cabanon et bascule prise ON pour 1 heure.


Sur IPX800 ou X-8R classique qui disposent de sorties relais inverseur, nous pouvons connecter les ventouses à ruptures sur les broches NC. La programmation se fera alors avec des liens classiques. Le passage à ON du relais coupe l'alimentation de la gache et déverrouR connect, nous ne disposons pas de la broche NC. Il faut donc ineverser la logique de programmation avec un lien inverseur "NOT" dezrrière la tempo. Ainsi, tempo off, le relais est on. Dès que la tempo s'active, le relais passe off ce qui déverrouille la porte..

Sur la X-

Diagramme exemple 2 wiegand.png

Exemple 3 : Casiers sécurisés

Image casiers wiegand.png


Dans le cadre de la distribution de produits artisanaux, un point de collecte innovant a été mis en place. Ce système comprend des casiers sécurisés par un code unique, garantissant ainsi la sécurité et la confidentialité des produits stockés. L'artisan dispose d'un code général qui lui permet d'ouvrir tous les casiers et de les remplir avec ses produits, assurant une gestion efficace et sécurisée des livraisons.


Lorsque le client saisit le code qui lui a été attribué, le casier correspondant est déverrouillé pendant 3 minutes, il peut alors récupérer ses produits.

Le lendemain, l'artisan affecte des nouveaux codes à ses casiers avant de procéder à la mise en place de produits pour les prochaines livraisons..

Schéma de connexion:

Les casiers sont sécurisés par des ventouses électromagnétiques à émission.

Pour déverrouiller la plaque polaire, un courant est émis momentanément dans la ventouse, ce qui neutralise l'aimantation permanente et permet l'ouverture du casier.

Chaque ventouse est branchée sur un relais d'une X-8R.


Schema casiers wiegand.png


Diagramme des liens

Code général : 00000

code client : 00001 à 00004

Diagramme casiers wiegand.png

Widget HTML pour modification des codes

Widget modif access code.png


Reprenons l'exemple des casiers sécurisés. Pour modifier les codes ce chaque casier sans avoir à éditer la configuration, il est possible de créer un widget de type HTML sur un dashboard qui ne sera autorisé qu'aux utilisateurs Root ou Admin par exemple.

En effet, chacun des 6 codes de l'objet Access Control est représenté par une variable de type String 32 nommée "strPoolCode_id x" avec x de 1 à 6.

Avec l'API Widget HTML (doc disponible en téléchargement), nous pouvons donc récupérer et modifier la valeur de ces variables.

Dans notre exemple de casiers sécurisés, le code attribué au client est en 2ème position, le premier code étant le code réservé au producteur. Nous récupèrerons l'id de la variable "strPoolCode 2" de l'objet "Access control" (nous pouvons le récupérer dans la page collection des variables string32. Dans mon exemple l'id sera 524322.

Id strPoolCode2.png

Le widget pourra alors effectuer la modification du second code valide du contrôle.

Diagramme modif code access control.png


Créez un widget HTML puis injectez ce code :


<script>
var idStr32=524322;//id de la variable Str32
window.GCE_Refresh.push(function(data) { //IMPORTANT: biding refresh function to the WebSocket
switch (data['_id'])
{
case idStr32:
document.getElementById('CodeA').value=data.value;
break;
}
})

function init() {
GCE_API.get("/api/core/str/" + idStr32.toString()).then((ret) => {
document.getElementById("CodeA").value=ret.value;
})
}

function MajSTR() {
let v=document.getElementById('CodeA').value;
GCE_API.put("/api/core/str/" + idStr32.toString(),{value: v});
}

init()

</script>
<style>
.input1 {
  width: 80%;
  padding: 5px;
  margin-bottom: 5px;
  border: 1px solid #ddd;
  border-radius: 4px;
  font-size: 16px;
}
.label1 {
  font-size: 14px;
  margin-bottom: 5px;
  display: block;
}    
.button1 {
  padding: 10px 20px;
  font-size: 14px;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  background-color: #007bff;
  color: #fff;
}

button:hover {
  background-color: #0056b3;
}
</style>
<label for="CodeA" class="label1">Code client :</label>

<input class="input1" type="text" id="Code1" name="Code1">

<button class="button1" onclick="MajSTR()">Envoi</button>


Remplacez 524322 par l'id de votre variable Str32.


Widget pour modification des 6 codes

Widget modif 6 codes.png


Collez ce code et remplacez l'id de la première variable (correspond au strPoolCode_id 1)

<script>
var idStr32 = 524321; // id de la 1ère variable Str32

window.GCE_Refresh.push(function(data) { //IMPORTANT: binding refresh function to the WebSocket
  switch (data['_id']) {
    case idStr32 :
      document.getElementById('Code1').value = data.value;
      break;
    case idStr32 + 1:
      document.getElementById('Code2').value = data.value;
      break;
    case idStr32 + 2:
      document.getElementById('Code3').value = data.value;
      break;
    case idStr32 + 3:
      document.getElementById('Code4').value = data.value;
      break;
    case idStr32 + 4:
      document.getElementById('Code5').value = data.value;
      break;
    case idStr32 + 5:
      document.getElementById('Code6').value = data.value;
      break;
  }
});

function init2() {
  GCE_API.get("/api/core/str/" + (idStr32 + 0).toString()).then((ret) => {
    document.getElementById("Code1").value = ret.value;
  });
  GCE_API.get("/api/core/str/" + (idStr32 + 1).toString()).then((ret) => {
    document.getElementById("Code2").value = ret.value;
  });
  GCE_API.get("/api/core/str/" + (idStr32 + 2).toString()).then((ret) => {
    document.getElementById("Code3").value = ret.value;
  });
  GCE_API.get("/api/core/str/" + (idStr32 + 3).toString()).then((ret) => {
    document.getElementById("Code4").value = ret.value;
  });
  GCE_API.get("/api/core/str/" + (idStr32 + 4).toString()).then((ret) => {
    document.getElementById("Code5").value = ret.value;
  });
  GCE_API.get("/api/core/str/" + (idStr32 + 5).toString()).then((ret) => {
    document.getElementById("Code6").value = ret.value;
  });
}

function MajSTR() {
  let v = document.getElementById('Code1').value;
  GCE_API.put("/api/core/str/" + (idStr32).toString(), { value: v });
  v = document.getElementById('Code2').value;
  GCE_API.put("/api/core/str/" + (idStr32 + 1).toString(), { value: v });
  v = document.getElementById('Code3').value;
  GCE_API.put("/api/core/str/" + (idStr32 + 2).toString(), { value: v });
  v = document.getElementById('Code4').value;
  GCE_API.put("/api/core/str/" + (idStr32 + 3).toString(), { value: v });
  v = document.getElementById('Code5').value;
  GCE_API.put("/api/core/str/" + (idStr32 + 4).toString(), { value: v });
  v = document.getElementById('Code6').value;
  GCE_API.put("/api/core/str/" + (idStr32 + 5).toString(), { value: v });
}

init2();
</script>

<style>

.container2 {
  background-color: #fff;
  padding: 3px;
  text-align: center;
  width: 100%;
}

.label2 {
  font-size: 12px;
  margin-top: 3px;
  display: inline-block;
  width: 25%;
  text-align: left;
  color: #000;
}

.input2 {
  width: 50%;
  padding: 1px;
  margin-top: 1px;
  border: 1px solid #ddd;
  border-radius: 4px;
  font-size: 14px;
  display: inline-block;
  color: #333;
}

.button2 {
  padding: 5px 10px;
  font-size: 14px;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  background-color: #007bff;
  color: #fff;

}

.button2:hover {
  background-color: #0056b3;
}
</style>

<div class="container2">
  <div>
    <label for="Code1" class="label2">Code 1 :</label>
    <input class="input2" type="text" id="Code1" name="Code1">
  </div>
  <div>
    <label for="Code2" class="label2">Code 2 :</label>
    <input class="input2" type="text" id="Code2" name="Code2">
  </div>
  <div>
    <label for="Code3" class="label2">Code 3 :</label>
    <input class="input2" type="text" id="Code3" name="Code3">
  </div>
  <div>
    <label for="Code4" class="label2">Code 4 :</label>
    <input class="input2" type="text" id="Code4" name="Code4">
  </div>
  <div>
    <label for="Code5" class="label2">Code 5 :</label>
    <input class="input2" type="text" id="Code5" name="Code5">
  </div>
  <div>
    <label for="Code6" class="label2">Code 6 :</label>
    <input class="input2" type="text" id="Code6" name="Code6">
  </div>
  <button class="button2" onclick="MajSTR()">Envoi</button>
</div>

Widget clavier virtuel

Avec ce widget vous pourrez lancer tout type d’action par lien ou scénario.

Si au clavier vous entrez un code valide, la sortie de l’objet Access Control s’active momentanément (impulsion 1 seconde environ).

Sur IPX800 V5, il suffit de créer une variable type STR32 et la sélectionner dans la définition de l’objet « Access Control » (champ ContenuStr).

Définissez ensuite les 6 codes valides dans la configuration de l’objet « Access Control »


Voici le Widget :

Keyboard widget.gif


Pour l'utiliser il suffit d'utiliser les sorties de l'objet Access control, par liens ou scénarios :


Diagramme widget clavier access control.png

Dans le code HTML ci-dessous, remplacez les 3 id par les id de vos variables :

<script>
var iddoor = 65792; // à remplacer par l'id Door State
var idalarm = 65793; // à remplacer par l'id de Alarm State
var idstr32 = 524327; // à remplacer par l'id de la string32 qui reçoit le code

window.GCE_Refresh.push(function(data) { //IMPORTANT: binding refresh function to the WebSocket
  switch (data['_id']) {
    case iddoor:  //id door state
      document.getElementById('led1').style.backgroundColor = data.on ? '#1fdb49' : '#999';
      break;
    case idalarm:  // id alarm state
      document.getElementById('led2').style.backgroundColor = data.on ? 'red' : '#999';
      break;
  }
});

function init1() {
  GCE_API.getIO(iddoor).then((ret) => { // ask for the actual value
    document.getElementById('led1').style.backgroundColor = ret.on ? '#1fdb49' : '#999';
  });
  GCE_API.getIO(idalarm).then((ret) => { // ask for the actual value
    document.getElementById('led2').style.backgroundColor = ret.on ? 'red' : '#999';
  });
}

function appendNumber(number) {
  const input = document.getElementById('codeInput');
  input.value += number;
}

function deleteLast() {
  const input = document.getElementById('codeInput');
  input.value = input.value.slice(0, -1);
}

function submitCode() {
  const code = document.getElementById('codeInput').value;
  GCE_API.put("/api/core/str/" + idstr32.toString(), { value: code });
  document.getElementById('codeInput').value = "";
}

init1();
</script>

<style>
.container {
  background-color: #586a80;
  padding: 3px;
  border-radius: 2px;
  width: 100%;
  height: 100%;
  text-align: center;
  position: relative;
  top: 12px;
}
.led {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background-color: #999;
  position: absolute;
  top: -8px;
}
#led1 {
  right: 30px;
}
#led2 {
  right: 10px;
}

.button {
  width: 60px;
  height: 40px;
  margin: 3px;
  font-size: 18px;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  background-color: #586a80;
  border: 1px solid #394b60;
  color: #fff;
}
.button:hover {
  background-color: #394b60;
}
</style>

<div class="container">
  <div id="led1" class="led"></div>
  <div id="led2" class="led"></div>
  <input type="hidden" id="codeInput" readonly>
  <div>
    <button class="button" onclick="appendNumber(1)">1</button>
    <button class="button" onclick="appendNumber(2)">2</button>
    <button class="button" onclick="appendNumber(3)">3</button>
  </div>
  <div>
    <button class="button" onclick="appendNumber(4)">4</button>
    <button class="button" onclick="appendNumber(5)">5</button>
    <button class="button" onclick="appendNumber(6)">6</button>
  </div>
  <div>
    <button class="button" onclick="appendNumber(7)">7</button>
    <button class="button" onclick="appendNumber(8)">8</button>
    <button class="button" onclick="appendNumber(9)">9</button>
  </div>
  <div>
    <button class="button" onclick="deleteLast()">Suppr</button>
    <button class="button" onclick="appendNumber(0)">0</button>
    <button class="button" onclick="submitCode()">Entrée</button>
  </div>
</div>