{"id":45,"date":"2026-07-22T13:04:18","date_gmt":"2026-07-22T11:04:18","guid":{"rendered":"https:\/\/fankepa.com\/?p=45"},"modified":"2026-07-22T13:04:18","modified_gmt":"2026-07-22T11:04:18","slug":"module-iot-odoo-19-via-les-serrures-acces-unifi","status":"publish","type":"post","link":"https:\/\/fankepa.com\/?p=45","title":{"rendered":"Module IoT Odoo 19 Via les serrures Acces UniFi"},"content":{"rendered":"<p><!-- Introduction --><\/p>\n<div style=\"background: linear-gradient(135deg, #1a1a2e 0%, #1e1b4b 100%); padding: 40px; border-radius: 20px; margin-bottom: 40px; border: 1px solid rgba(99,102,241,0.2);\">\n<p style=\"font-size: 19px; color: #a5b4fc; line-height: 1.8; margin: 0; font-style: italic;\">\n    \ud83c\udfe2 D\u00e9veloppement d&rsquo;un module IoT pour Odoo 19 permettant le contr\u00f4le de portes intelligentes via UniFi Access. R\u00e9alis\u00e9 durant mon stage chez MandaBar \u00e0 Marche-en-Famenne.\n  <\/p>\n<\/div>\n<p><!-- Vid\u00e9o YouTube Shorts --><\/p>\n<div style=\"margin: 40px 0;\">\n<h2 style=\"font-size: 26px; color: #a5b4fc; margin-bottom: 20px; padding-bottom: 15px; border-bottom: 2px solid rgba(99,102,241,0.4);\">\n    \ud83c\udfa5 D\u00e9monstration vid\u00e9o<br \/>\n  <\/h2>\n<div style=\"display: flex; justify-content: center;\">\n<div style=\"position: relative; width: 100%; max-width: 400px; padding-bottom: 56.25%; height: 0; overflow: hidden; border-radius: 15px; border: 1px solid rgba(99,102,241,0.2);\">\n      <iframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\"\n        src=\"https:\/\/www.youtube.com\/embed\/eV3vmP_1Wtc\"\n        frameborder=\"0\"\n        allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n        allowfullscreen><br \/>\n      <\/iframe>\n    <\/div>\n<\/p><\/div>\n<\/div>\n<p><!-- Contexte stage --><\/p>\n<div style=\"background: linear-gradient(135deg, #1e1b4b 0%, #1a1a2e 100%); padding: 35px; border-radius: 15px; margin: 40px 0; border: 1px solid rgba(99,102,241,0.2);\">\n<h2 style=\"font-size: 26px; color: #a5b4fc; margin: 0 0 20px 0; padding-bottom: 15px; border-bottom: 2px solid rgba(99,102,241,0.4);\">\n    \ud83c\udfe2 Contexte du stage<br \/>\n  <\/h2>\n<p style=\"font-size: 16px; color: #cbd5e1; line-height: 1.8; margin-bottom: 15px;\">\n    Dans le cadre de mon stage de fin d&rsquo;\u00e9tudes \u00e0 <strong style=\"color: #a5b4fc;\">MandaBar (Marche-en-Famenne)<\/strong>, j&rsquo;ai \u00e9t\u00e9 charg\u00e9 de d\u00e9velopper un module IoT innovant pour int\u00e9grer le contr\u00f4le d&rsquo;acc\u00e8s physique directement dans leur syst\u00e8me ERP Odoo 19.\n  <\/p>\n<p style=\"font-size: 16px; color: #cbd5e1; line-height: 1.8;\">\n    L&rsquo;objectif \u00e9tait de permettre aux gestionnaires de <strong style=\"color: #a5b4fc;\">contr\u00f4ler les acc\u00e8s aux chambres<\/strong> directement depuis l&rsquo;interface Odoo, en synchronisant avec le syst\u00e8me UniFi Access de Ubiquiti.\n  <\/p>\n<\/div>\n<p><!-- Objectifs --><\/p>\n<div style=\"margin: 40px 0;\">\n<h2 style=\"font-size: 26px; color: #a5b4fc; margin-bottom: 25px; padding-bottom: 15px; border-bottom: 2px solid rgba(99,102,241,0.4);\">\n    \ud83c\udfaf Objectifs du projet<br \/>\n  <\/h2>\n<div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 20px;\">\n<div style=\"background: linear-gradient(135deg, #1e1b4b, #1a1a2e); padding: 25px; border-radius: 12px; border: 1px solid rgba(99,102,241,0.2);\">\n<div style=\"font-size: 36px; margin-bottom: 12px;\">\ud83d\udd17<\/div>\n<h3 style=\"color: #a5b4fc; font-size: 18px; margin: 0 0 10px 0;\">Int\u00e9gration Odoo<\/h3>\n<p style=\"color: #94a3b8; font-size: 14px; line-height: 1.6; margin: 0;\">D\u00e9veloppement d&rsquo;un module natif Odoo 19 en Python pour g\u00e9rer les acc\u00e8s depuis l&rsquo;ERP.<\/p>\n<\/p><\/div>\n<div style=\"background: linear-gradient(135deg, #1e1b4b, #1a1a2e); padding: 25px; border-radius: 12px; border: 1px solid rgba(99,102,241,0.2);\">\n<div style=\"font-size: 36px; margin-bottom: 12px;\">\ud83d\udeaa<\/div>\n<h3 style=\"color: #a5b4fc; font-size: 18px; margin: 0 0 10px 0;\">Contr\u00f4le d&rsquo;acc\u00e8s<\/h3>\n<p style=\"color: #94a3b8; font-size: 14px; line-height: 1.6; margin: 0;\">Contr\u00f4le des portes intelligentes via l&rsquo;API UniFi Access de Ubiquiti Networks.<\/p>\n<\/p><\/div>\n<div style=\"background: linear-gradient(135deg, #1e1b4b, #1a1a2e); padding: 25px; border-radius: 12px; border: 1px solid rgba(99,102,241,0.2);\">\n<div style=\"font-size: 36px; margin-bottom: 12px;\">\u26a1<\/div>\n<h3 style=\"color: #a5b4fc; font-size: 18px; margin: 0 0 10px 0;\">Automatisation<\/h3>\n<p style=\"color: #94a3b8; font-size: 14px; line-height: 1.6; margin: 0;\">Ouverture\/fermeture automatique des portes selon les r\u00e9servations dans Odoo.<\/p>\n<\/p><\/div>\n<div style=\"background: linear-gradient(135deg, #1e1b4b, #1a1a2e); padding: 25px; border-radius: 12px; border: 1px solid rgba(99,102,241,0.2);\">\n<div style=\"font-size: 36px; margin-bottom: 12px;\">\ud83d\udcca<\/div>\n<h3 style=\"color: #a5b4fc; font-size: 18px; margin: 0 0 10px 0;\">Historique<\/h3>\n<p style=\"color: #94a3b8; font-size: 14px; line-height: 1.6; margin: 0;\">Logs complets des acc\u00e8s directement dans l&rsquo;interface Odoo pour le suivi.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p><!-- Stack technique --><\/p>\n<div style=\"margin: 40px 0;\">\n<h2 style=\"font-size: 26px; color: #a5b4fc; margin-bottom: 25px; padding-bottom: 15px; border-bottom: 2px solid rgba(99,102,241,0.4);\">\n    \ud83d\udcbb Stack technique<br \/>\n  <\/h2>\n<div style=\"display: flex; flex-wrap: wrap; gap: 12px;\">\n    <span style=\"background: rgba(99,102,241,0.2); color: #a5b4fc; padding: 10px 20px; border-radius: 25px; font-size: 14px; font-weight: 600; border: 1px solid rgba(99,102,241,0.3);\">\ud83d\udd27 Odoo 19<\/span><br \/>\n    <span style=\"background: rgba(139,92,246,0.2); color: #c4b5fd; padding: 10px 20px; border-radius: 25px; font-size: 14px; font-weight: 600; border: 1px solid rgba(139,92,246,0.3);\">\ud83d\udc0d Python<\/span><br \/>\n    <span style=\"background: rgba(99,102,241,0.2); color: #a5b4fc; padding: 10px 20px; border-radius: 25px; font-size: 14px; font-weight: 600; border: 1px solid rgba(99,102,241,0.3);\">\ud83d\udd11 UniFi Access<\/span><br \/>\n    <span style=\"background: rgba(139,92,246,0.2); color: #c4b5fd; padding: 10px 20px; border-radius: 25px; font-size: 14px; font-weight: 600; border: 1px solid rgba(139,92,246,0.3);\">\ud83c\udf10 REST API<\/span><br \/>\n    <span style=\"background: rgba(99,102,241,0.2); color: #a5b4fc; padding: 10px 20px; border-radius: 25px; font-size: 14px; font-weight: 600; border: 1px solid rgba(99,102,241,0.3);\">\ud83d\udc33 Docker<\/span><br \/>\n    <span style=\"background: rgba(139,92,246,0.2); color: #c4b5fd; padding: 10px 20px; border-radius: 25px; font-size: 14px; font-weight: 600; border: 1px solid rgba(139,92,246,0.3);\">\ud83d\udc27 Linux<\/span><br \/>\n    <span style=\"background: rgba(99,102,241,0.2); color: #a5b4fc; padding: 10px 20px; border-radius: 25px; font-size: 14px; font-weight: 600; border: 1px solid rgba(99,102,241,0.3);\">\ud83d\udce1 IoT<\/span>\n  <\/div>\n<\/div>\n<p><!-- Ce que j'ai appris --><\/p>\n<div style=\"background: linear-gradient(135deg, #1e1b4b 0%, #1a1a2e 100%); padding: 35px; border-radius: 15px; margin: 40px 0; border: 1px solid rgba(99,102,241,0.2);\">\n<h2 style=\"font-size: 26px; color: #a5b4fc; margin: 0 0 20px 0; padding-bottom: 15px; border-bottom: 2px solid rgba(99,102,241,0.4);\">\n    \ud83d\udcda Ce que j&rsquo;ai appris<br \/>\n  <\/h2>\n<div style=\"display: flex; flex-direction: column; gap: 12px;\">\n<div style=\"display: flex; align-items: center; gap: 12px; background: rgba(99,102,241,0.1); padding: 15px; border-radius: 10px; border-left: 3px solid #6366f1;\">\n      <span style=\"color: #a5b4fc; font-size: 18px;\">\u2705<\/span><br \/>\n      <span style=\"color: #cbd5e1; font-size: 15px;\">D\u00e9veloppement de modules Odoo 19 en Python<\/span>\n    <\/div>\n<div style=\"display: flex; align-items: center; gap: 12px; background: rgba(99,102,241,0.1); padding: 15px; border-radius: 10px; border-left: 3px solid #8b5cf6;\">\n      <span style=\"color: #a5b4fc; font-size: 18px;\">\u2705<\/span><br \/>\n      <span style=\"color: #cbd5e1; font-size: 15px;\">Int\u00e9gration d&rsquo;APIs REST (UniFi Access)<\/span>\n    <\/div>\n<div style=\"display: flex; align-items: center; gap: 12px; background: rgba(99,102,241,0.1); padding: 15px; border-radius: 10px; border-left: 3px solid #6366f1;\">\n      <span style=\"color: #a5b4fc; font-size: 18px;\">\u2705<\/span><br \/>\n      <span style=\"color: #cbd5e1; font-size: 15px;\">Travail en \u00e9quipe en environnement professionnel<\/span>\n    <\/div>\n<div style=\"display: flex; align-items: center; gap: 12px; background: rgba(99,102,241,0.1); padding: 15px; border-radius: 10px; border-left: 3px solid #8b5cf6;\">\n      <span style=\"color: #a5b4fc; font-size: 18px;\">\u2705<\/span><br \/>\n      <span style=\"color: #cbd5e1; font-size: 15px;\">Gestion de projet IoT de A \u00e0 Z<\/span>\n    <\/div>\n<div style=\"display: flex; align-items: center; gap: 12px; background: rgba(99,102,241,0.1); padding: 15px; border-radius: 10px; border-left: 3px solid #6366f1;\">\n      <span style=\"color: #a5b4fc; font-size: 18px;\">\u2705<\/span><br \/>\n      <span style=\"color: #cbd5e1; font-size: 15px;\">D\u00e9ploiement Docker en environnement de production<\/span>\n    <\/div>\n<\/p><\/div>\n<\/div>\n<p><!-- CTA --><\/p>\n<div style=\"background: linear-gradient(135deg, #1e1b4b 0%, #0f3460 100%); padding: 50px 30px; border-radius: 20px; text-align: center; margin: 40px 0; border: 1px solid rgba(99,102,241,0.3);\">\n<h2 style=\"font-size: 32px; margin: 0 0 15px 0; color: #a5b4fc;\">\ud83c\udfa5 Voir la d\u00e9monstration<\/h2>\n<p style=\"font-size: 17px; color: #94a3b8; margin: 0 0 30px 0;\">\n    Regardez la vid\u00e9o de d\u00e9monstration du syst\u00e8me en action !\n  <\/p>\n<div style=\"display: flex; gap: 15px; justify-content: center; flex-wrap: wrap;\">\n    <a href=\"https:\/\/www.youtube.com\/shorts\/eV3vmP_1Wtc\" target=\"_blank\" style=\"background: #ff0000; color: white; padding: 15px 35px; border-radius: 30px; text-decoration: none; font-weight: 700; font-size: 16px;\"><br \/>\n      \ud83c\udfa5 Voir la vid\u00e9o<br \/>\n    <\/a><br \/>\n    <a href=\"https:\/\/github.com\/FILSTOGNO\" target=\"_blank\" style=\"background: linear-gradient(135deg, #6366f1, #8b5cf6); color: white; padding: 15px 35px; border-radius: 30px; text-decoration: none; font-weight: 700; font-size: 16px;\"><br \/>\n      \ud83d\udce6 GitHub<br \/>\n    <\/a><br \/>\n    <a href=\"https:\/\/fankepa.com\/?page_id=16\" style=\"background: rgba(99,102,241,0.2); color: #a5b4fc; padding: 15px 35px; border-radius: 30px; text-decoration: none; font-weight: 700; font-size: 16px; border: 2px solid rgba(99,102,241,0.4);\"><br \/>\n      \u2709\ufe0f Me contacter<br \/>\n    <\/a>\n  <\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\ud83c\udfe2 D\u00e9veloppement d&rsquo;un module IoT pour Odoo 19 permettant le contr\u00f4le de portes intelligentes via UniFi Access. R\u00e9alis\u00e9 durant mon [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-45","post","type-post","status-publish","format-standard","hentry","category-non-classe"],"_links":{"self":[{"href":"https:\/\/fankepa.com\/index.php?rest_route=\/wp\/v2\/posts\/45","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fankepa.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fankepa.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fankepa.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fankepa.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=45"}],"version-history":[{"count":1,"href":"https:\/\/fankepa.com\/index.php?rest_route=\/wp\/v2\/posts\/45\/revisions"}],"predecessor-version":[{"id":46,"href":"https:\/\/fankepa.com\/index.php?rest_route=\/wp\/v2\/posts\/45\/revisions\/46"}],"wp:attachment":[{"href":"https:\/\/fankepa.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=45"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fankepa.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=45"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fankepa.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=45"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}