Câest un tableau secondaire, nous nâavons pas passĂ© le consuel. Le tableau Primaire avait Ă©tĂ© acceptĂ© Ă la construction. Nous nâavons pas encore fait les dĂ©marches pour le secondaire, nous verrons avec lâassureur si un certificat de conformitĂ© Ă©lectrique est suffisant.
Bonjour fgtoul,
te connaissant, aucun doute que le tableau secondaire passe le Consuel sans problĂšme, si il devait y en avoir un.
Bonne journée
Bonjour Grocrabe,
il pourrait peut-ĂȘtre trouver Ă redire sur lâentrĂ©e des gaines dans le tableau, mais comme cette partie de GTL ne peut pas ĂȘtre ouverte sans outil (placo vissĂ©) , il ne devrait pas y avoir de pb. Les cĂąbles et gaines ne peuvent pas subir de frictions, ils sont bloquĂ©s dans la planche perforĂ©e.
Chez moi les conducteurs nus sont simplement dans la GTL goulotte alors que le couvercle nâest que clipsĂ© (dĂ©montage sans outil)
Ok merci. Je pose toutes ses questions car je suis dans un projet de construction et jâhĂ©sites tjrs entre faire une GTL « fait maison » ou une prendre une goulotte. Le consuel me fait peur ![]()
Bonjour widc4rd,
je vous rassure, jâai chez moi une GTL maison en mĂ©laminĂ© blanc ouvrable sans outil et câest passĂ©.
Voici ce que dit Promotelec : La GTL peut ĂȘtre rĂ©alisĂ©e dans les matĂ©riaux autorisĂ©s pour les locaux dâhabitation (en bois, en PVC, maçonnĂ©eâŠ), lâĂ©paisseur des parois de la GTL doit ĂȘtre suffisante pour permettre la fixation de tout le matĂ©riel. Les parois internes doivent ĂȘtre planes, sans dĂ©crochement, sans obstacles et sans aspĂ©ritĂ© importante.
Bonne journée
pour les risques de feu électriques et aussi pour sa dureté accrue, en fait le proprio a utilisé des plaques de gypse durci, classé M1. Les 2 tableaux pÚsent trÚs lourd, sans oublier la baie réseau suspendue elle aussi, avec son grand porte-à -faux.
je laisse ça aux geek qui ont envie de mettre les mains dans le cambouis. ![]()
Bonjour,
Un immense merci pour ce code qui mâa enfin offert une vrai solution de visualisation des camĂ©ras sur le liveview de lâAlarme.
Jâai un peu trifouillĂ© pour coller au besoin et vous propose une version âamĂ©liorĂ©eâ du code :
- Gestion de la taille des bouttons en width : X% pour ĂȘtre adaptatif PC/smartphone
- Ajout dâun paramĂštre âchannelâ pour ceux qui comme moi ont une camĂ©ra Ă 2 canaux
- Ajout dâune fenĂȘtre modale et des fonctions overlay show/hide pour garder le principe de la miniature qui sâagrandit mais en supprimant le problĂšme de rafraichissement (on conserve un rafraichissement toute les 2s mĂȘme en image plein Ă©cran)
NâhĂ©sitez pas Ă me faire vos retours.
<style>
.buttons { margin: auto; }
button {
background: #444;
color: #fff;
border: none;
width: 23%;
margin: auto;
font-size: auto;
border-radius: auto;
}
button:hover { background: #666; }
/* Overlay plein écran pour image agrandie */
.overlay {
position: fixed !important;
z-index: 2147483647 !important; /* max int, pour ĂȘtre sĂ»r */
top: 0; left: 0;
width: 100vw; height: 100vh;
background: rgba(0,0,0,0.85);
display: none;
justify-content: center;
align-items: center;
}
.overlay img {
max-width: 95%;
max-height: 95%;
border-radius: 10px;
box-shadow: 0 0 20px #000;
}
</style>
<div class="buttons">
<button onclick="loadCam('IP','PORT','0','USER','PASSWORD')">AtelierG</button>
<button onclick="loadCam('IP','PORT','1','USER','PASSWORD')">AtelierD</button>
<button onclick="loadCam('IP','PORT','0','USER','PASSWORD')">Nord</button>
<button onclick="loadCam('IP','PORT','0','USER','PASSWORD')">Sud</button>
</div>
<img src="" id="snapImg" width="100%" alt="snapshot en cours" onclick="showOverlay()">
<!-- FenĂȘtre modale -->
<div class="overlay" id="overlay" onclick="hideOverlay()">
<img src="" id="overlayImg" alt="snapshot HD">
</div>
<script>
let baseLowRes = "";
let baseHighRes = "";
let overlayInterval = null;
function loadCam(camip, camport, channel, user, pwd) {
baseLowRes = `http://${camip}:${camport}/api.cgi?cmd=Snap&channel=${channel}&user=${user}&password=${pwd}&width=640&height=480`;
baseHighRes = `http://${camip}:${camport}/api.cgi?cmd=Snap&channel=${channel}&user=${user}&password=${pwd}&width=2560&height=1920`;
refreshImg();
}
function refreshImg() {
const img = document.getElementById("snapImg");
if (baseLowRes) img.src = baseLowRes + `&t=${Date.now()}`;
}
function showOverlay() {
const overlay = document.getElementById("overlay");
const overlayImg = document.getElementById("overlayImg");
overlay.style.display = "flex";
overlayImg.src = baseHighRes + `&t=${Date.now()}`;
overlayInterval = setInterval(() => {
overlayImg.src = baseHighRes + `&t=${Date.now()}`;
}, 2000);
}
function hideOverlay() {
document.getElementById("overlay").style.display = "none";
clearInterval(overlayInterval);
}
setInterval(refreshImg, 2000);
</script>
Afin de faciliter les connexions sur le NVR, conception dâun boitier avec modules Keystone qui permet de dĂ©porter la connectique principale situĂ©e sur la face arriĂšre.
-
HDMI pour console,
-
Alim USB C pour alim écran,
-
USB 3.0 pour souris,
-
Bananes 2mm pour bornier entrées alarme (pour tester un capteur par exemple),
-
Bananes 2mm pour bornier sortie alarme (pour tester un dispositif IOT),
-
RCA Audio Out,
-
RCA Audio In,
-
POE pour 1 caméra en cas de test.
Les modules avec fiches bananes ont Ă©tĂ© rĂ©alisĂ©es avec un obturateur que jâai percĂ© pour y coller 2 prises 2mm.
Ce boitier servira tant pour les tests que pour le branchement dâun Ă©cran console de temps en temps en cas dâintervention sur la configuration du NVR.
Bonjour Mistoukwak,
ton widget fonctionne trĂšs bien.
Jâavais effectivement Ă©crit un widget avec channel en paramĂštre, mais oubliĂ© de partager.
Lorsque le Liveview est consultĂ© hors rĂ©seau local, il faut que les IP soient publiques (sauf VPN). Au lieu dâexposer toutes les camĂ©ras et ouvrir un port spĂ©cifique pour chacune dâelles, il est possible de crĂ©er une redirection vers le NVR. Dans ce cas le paramĂštre channel est alors utile pour sĂ©lectionner la camĂ©ra.
Merci pour ce partage.
Bonne journée
Voici un exemple de code complet pour un un widget caméra sur DASHBOARD
Le positionnement nâest pas le mĂȘme que sur Liveview, lâoverlay modal est alors créé dynamiquement par le script pour contourner le problĂšme de rattachement Ă Body.
<style>
#snapImg {
max-width: 100%;
border: 1px solid #ddd;
margin: 10px;
background: #000;
}
.overlay {
position: fixed ;
z-index: 2147483647 ;
top: 0; left: 0;
width: 100vw; height: 100vh;
background: rgba(0,0,0,0.85);
display: flex;
justify-content: center;
align-items: center;
}
.overlay img {
max-width: 95%;
max-height: 95%;
border-radius: 10px;
box-shadow: 0 0 20px #000;
}
</style>
<img src="" id="snapImg" width="100%" alt="snapshot en cours" onclick="showOverlay()">
<script>
// Configuration
var camIp = 'IP_CAM';
var camPort='IP_PORT'
var myAdmin = 'admin';
var myPass = 'password';
var refreshInterval = 2800;
var snapImg;
var url;
let overlayInterval = null;
function createOverlay() {
if (document.getElementById("overlay")) return;
const overlay = document.createElement("div");
overlay.className = "overlay";
overlay.id = "overlay";
overlay.onclick = hideOverlay;
const img = document.createElement("img");
img.id = "overlayImg";
img.alt = "snapshot HD";
overlay.appendChild(img);
document.body.appendChild(overlay);
}
function showOverlay() {
createOverlay();
url = `http://${camIp}:${camPort}/cgi-bin/api.cgi?cmd=Snap&channel=1&${getCacheBuster()}&user=${myAdmin}&password=${myPass}`;
const overlay = document.getElementById("overlay");
const overlayImg = document.getElementById("overlayImg");
overlay.style.display = "flex";
overlayImg.src = url + '&width=1920&height=1080';
overlayInterval = setInterval(() => {
overlayImg.src = url + '&width=1920&height=1080';
}, refreshInterval);
}
function hideOverlay() {
const overlay = document.getElementById("overlay");
if (overlay) overlay.style.display = "none";
clearInterval(overlayInterval);
}
function getCacheBuster() {
return 'rs=' + Date.now().toString(36) + Math.random().toString(36).substr(2, 8);
}
function fetchNewImage() {
snapImg = document.getElementById('snapImg');
url = `http://${camIp}:${camPort}/cgi-bin/api.cgi?cmd=Snap&channel=1&${getCacheBuster()}&user=${myAdmin}&password=${myPass}`;
fetch(url, { mode: 'no-cors' })
.then(() => {
snapImg.src = url + '&width=640&height=480';
})
.catch(e => console.log('Erreur de chargement:', e));
}
setInterval(fetchNewImage, refreshInterval);
setTimeout(fetchNewImage, 500);
</script>
Bonjour Ă tous,
jâai dĂ©jĂ prĂ©sentĂ© plusieurs mĂ©thodes pour crĂ©er un simulateur de prĂ©sence sur IPX800.
Voici la méthode optée pour cette installation:
Le simulateur dĂ©marre automatiquement Ă partir du lever du soleil (variable [Weather]Day/Night). Il repose sur deux Faders cycliques, lâun oscillant entre 0 et 3000 sur 27 secondes, lâautre entre 0 et 3500 sur 31 secondes. Ces deux rampes tournent en continu. Un objet Fonction calcule la somme de leur valeur. Cette somme est dynamique et imprĂ©visible Ă chaque instant.
Un clignotant dĂ©synchronisĂ©, avec une pĂ©riode totale de 57 secondes (TA = 28 s, TB = 29 s), sert de dĂ©clencheur. Ă chaque front montant du clignotant, une rĂšgle est activĂ©e. Elle injecte le rĂ©sultat de la fonction Somme dans lâentrĂ©e analogique TA dâun objet impulsion selon la formule :
Délai = FaderA + FaderB + 7200 secondes
7200s sont ajoutées pour faire la grùce mat
. Cette valeur est réglable sur dashboard avec un objet slider.
La variable TA est affectĂ©e en fonction dâun compteur incrĂ©mentĂ© Ă chaque front montant.
exemple simplifié de rÚgles pour 10 actions:
clignotantETIO_Simulateuroncpt.inc
CPT.value==valeur 1SetVAL[Fct somme faders]Result[PulseVR1]TAON[PulseVR1]start
CPT.value==valeur 2SetVAL[Fct somme faders]Result[PulseVR2]TAON[PulseVR2]start
âŠautres actions
CPT.value==valeur 11ONCPT.Reset
Ce délai est utilisé pour démarrer une action spécifique (VR ou éclairage). Chaque action possÚde son propre objet impulsion. Si le systÚme pilote 5 volets roulants et 5 éclairages, alors 10 objets impulsion sont créés, chacun avec son propre déclenchement différé.
par exemple :
pulse 1 pour VR1
pulse2 pour VR2
pulse3 pour eclairage1
pulse4 pour eclairage2
Pour les VR, lâimpulsion est remise Ă OFF par le moteur de scĂšnarios dĂšs que lâaction est exĂ©cutĂ©e.
Pour lâĂ©clairage, la durĂ©e de lâimpulsion est calculĂ©e avec TB=somme FaderA+FaderB, elle repasse Off automatiquement.
Ce mĂ©canisme garantit que les actions ne se produisent jamais dans le mĂȘme ordre ni Ă la mĂȘme heure. Le chaos est contrĂŽlĂ© par la dĂ©synchronisation des cycles, assurant une simulation rĂ©aliste et non rĂ©pĂ©titive de la prĂ©sence..
Exemple : imaginons que les 2 faders ont Ă©tĂ© dĂ©marrĂ©s aujourdâhui Ă minuit. Voici un tableau prĂ©sentant 2 jours de relevĂ©s sur front montant du clignotant, avec lâheure de relevĂ© et les valeurs de Faders Ă ce moment. On observe que les actions se produiront Ă horaires diffĂ©rents et jamais dans le mĂȘme ordre. La sĂ©quence dâĂ©vĂ©nements demeure alĂ©atoire et non reproductible sur plusieurs centaines de jours, autant dire que câest invisible Ă lâoeil mĂȘme pour un observateur exercĂ©.
| Relevé | Date | Heure front montant | Fader A | Fader B | Délai (s) A+B+7200 |
Heure dâaction |
|---|---|---|---|---|---|---|
| 1 | 26/08/2025 | 06:00:00 | 1200 | 2100 | 10500 | 08:55:00 |
| 2 | 26/08/2025 | 06:00:57 | 3000 | 3500 | 13700 | 09:49:17 |
| 3 | 26/08/2025 | 06:01:54 | 1800 | 500 | 9500 | 08:37:34 |
| 4 | 26/08/2025 | 06:02:51 | 2700 | 3200 | 12900 | 09:38:51 |
| 5 | 26/08/2025 | 06:03:48 | 600 | 1500 | 9300 | 08:59:48 |
| 6 | 26/08/2025 | 06:04:45 | 2400 | 2900 | 12500 | 09:52:05 |
| 7 | 27/08/2025 | 06:00:00 | 3100 | 800 | 11100 | 09:05:00 |
| 8 | 27/08/2025 | 06:00:57 | 1500 | 2700 | 11400 | 09:10:57 |
| 9 | 27/08/2025 | 06:01:54 | 900 | 3300 | 11400 | 09:15:54 |
| 10 | 27/08/2025 | 06:02:51 | 2000 | 2500 | 11700 | 09:21:51 |
| 11 | 27/08/2025 | 06:03:48 | 2800 | 1000 | 11000 | 09:16:48 |
| 12 | 27/08/2025 | 06:04:45 | 3500 | 3500 | 14200 | 10:01:05 |
Les diffĂ©rentes actions sont conditionnĂ©es par des IO modifiables sur le dashboard. Cela permet de retoucher Ă volontĂ© la configuration du simulateur. Il est possible dâexclure ou ajouter un volet roulant, un point lumineux, ..
Un widget pour chaque piĂšce permet de conditionner les actions sur VR ou Ă©clairage. Un toggle « VR 100% » permet dâautoriser ou interdire lâouverture complĂšte en journĂ©e ( par exemple, un VR au RDC ne sâouvrira jamais complĂštement mais suffisamment pour laisser passer la lumiĂšre intĂ©rieure Ă lâaube ou au crĂ©puscule de maniĂšre Ă ĂȘtre observable de lâextĂ©rieur). Cette valeur dâouverture partielle est fixĂ©e par une analogique liĂ©e au widget Dimmer.
Le simulateur est conditionnĂ© par lâarmement de lâalarme.
NB : les pĂ©riodes 27s, 31s et 57s sont des nombres premiers, non diviseurs de 60 ou 1440, elles ont Ă©tĂ© dĂ©terminĂ©es pour engendrer un chaos complexe afin de simuler des prĂ©sences variĂ©es, non linĂ©aires, et jamais identiques, en exploitant les propriĂ©tĂ©s mathĂ©matiques de cycles non multiples. Les amplitudes 3000 et 3500 ont Ă©tĂ© dĂ©terminĂ©es pour permettre dâobtenir une somme variable comprise entre 0 et 6500s soit prĂšs de 2 heures.
Les actions se dĂ©roulent alĂ©atoirement pendant les 2 heures qui suivent lâhoraire dĂ©terminĂ© (lever + 7200), ou pendant 2 heures aprĂšs le coucher de soleil (dĂ©calĂ© de 7200s Ă©galement).
Bonne journée
Bonjour fgtoul,
encore une belle implémentation, merci pour le partage.
Une remarque sur le fait de lier le simulateur au lever et coucher de soleil, il faut bien choisir (et/ou conditionner) lâaction faite.
Un exemple : en hiver, coucher de soleil à 18h30, on pourrait se retrouver avec un VR qui se ferme un peu tÎt par rapport à une heure logique de coucher du propriétaire.
Il peut ĂȘtre vraiment utile de jouer sur la pĂ©riode de 7200s, soit par le DashBoard, soit grĂące Ă un calendrier.
Bonne journée
Hello
lâoffset 7200 sert Ă©galement aux dĂ©calages saisonniers. Il est rĂ©glable sur dashboard de 0 Ă 14400.
Il est clair quâil faut coller au plus prĂšs des habitudes.
dans ce cas jâai prĂ©vu :
-
vr entrouverts (ou ouverts) le matin (selon consigne programmée), éclairages aléatoires.
-
ouverture complÚte des vr autorisés progressivement dans la matinée
-
fermeture partielle des vr le soir
-
Ă©clairages alĂ©atoires jusquâĂ fermeture complĂšte.
-
la nuit, quelques rares éclairages aléatoires dans les piÚces sans VR autorisées (sdb, wc, cellier).
Ces événements nocturnes sont enclenchés par le croisement du clignotant de 57s avec un autre de période 143s (3 à 4 croisements pendant la nuit). Les valeurs TA et TB sont alors calculées sur les Faders A et B en divisant leur somme par 3 (ce qui génÚre des durées ou retards entre 0 et 36 minutes)
bonne journée
Bonjour fgtoulâ
Est-il possible de bancher plusieurs détecteurs sur 1 meme entrée digitale ?
Bonjour,
- Entrées opto-isolées
il est effectivement possible de connecter plusieurs capteurs en parallĂšle sur une entrĂ©e opto-isolĂ©e, mais il y a des conditions.- Les capteurs doivent avoir une sortie Ă contact sec. Sâils ont une sortie active et quâils gĂ©nĂšrent eux-mĂȘmes la tension de sortie, il faut vĂ©rifier sâils peuvent ĂȘtre mis en parallĂšle.
- Ils doivent ĂȘtre alimentĂ©s par la mĂȘme alim, ou bien par 2 alim similaires avec gnd en commun.
- Entrées digitales
Pour les entrées digitales, les capteurs doivent impérativement avoir des sorties à contact sec (pas de tension). Aucune contrainte pour les installer en parallÚle.
NB : si vous mettez vos capteurs en //, il ne sera plus possible de savoir lequel est en détection.
Bonne journée
Bonjour wildcard,
attention pour les entrĂ©s opto, lâutilisation de 2 alims demande quelques prĂ©cautions. La solution avec une seule alimentation est Ă privilĂ©gier.
Bonne journée
Bonjour et merci pour votre retour,
Effectivement ils ont une sortie en 24v. je vais relire le manuel pour trouver lâinfo. Je pense que câest sur ce point que ma config pourrait ne pas etre possible.
Oui on est dâaccord. Pour moi lâimportant câest de signaler lâeffraction.
Toutes les dĂ©tecteurs sont branchĂ©s sur la mĂȘme alimentation





