fgtoul
1
Bonjour Ă tous,
avec lâarrivĂ©e des objets « Access Control » sur IPX800 V5, vous avez maintenant la possibilitĂ© dâutiliser un clavier digital sur X-Display, mais cela nĂ©cessite dâĂȘtre sur place.
Voici donc un widget HTML pour ceux qui veulent un clavier sur le dashboard.
Lâipx800 doit impĂ©rativement ĂȘtre en version 5.5.8
Avec ce widget vous pourrez donc 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 »
Dans le code HTML ci-dessous, remplacez lâid 524320 par lâid de votre variable :
Voici le code :
<style>
.container {
background-color: #fff;
padding: 3px;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
width: 100%;
height:100%;
text-align: center;
}
.button {
width: 60px;
height: 60px;
margin: 5px;
font-size: 18px;
border: none;
border-radius: 4px;
cursor: pointer;
background-color: #007bff;
color: #fff;
}
.button:hover {
background-color: #0056b3;
}
</style>
<html>
<div class="container">
<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>
<script>
window.GCE_Refresh.push(function(data) {
switch (data['_id'])
{
case 524320:
document.getElementById('codeInput').value=data.value;
break;
}
})
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/524320', { value: code });
document.getElementById('codeInput').value="";
}
</script>
</html>
Le fonctionnement du clavier est identique Ă celui qui est sur le X-Display.
La touche Suppr supprime le dernier chiffre entrĂ©, la touche EntrĂ©e valide la saisie et lâenvoie Ă lâIPX800 pour contrĂŽle.
Bonne journée
9 « J'aime »
Bonjour fgtoul,
merci pour ce partage
Avec les valeurs par dĂ©faut, jâobtiens ceci :
Pour un affichage correct jâai utilisĂ© pour les Button :
width: 45px;
height: 45px;
margin: 5px;
font-size: 15px;
et jâobtiens ceci :
et en allant un peu plus loin :
width: 60px;
height: 48px;
margin: 3px;
font-size: 15px;
ce qui donne :
Bonne journée
4 « J'aime »
fgtoul
3
il faut effectivement adapter à la résolution écran
Vous pouvez aussi personnaliser les couleurs
4 « J'aime »
fgtoul
4
Sur la bonne suggestion de @grocrabe, jâai ajoutĂ© deux voyants, chacun correspondant aux IO « Door State » et « Alarm State » de lâobjet Access Control.
Voici le code, vous devrez remplacer les 3 id :
<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'ed 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' : '#d3d3d3';
break;
case idalarm: // id alarm state
document.getElementById('led2').style.backgroundColor = data.on ? 'red' : '#d3d3d3';
break;
}
})
function init1() {
GCE_API.getIO(iddoor).then((ret) => { // ask for the actual value
document.getElementById('led1').style.backgroundColor = ret.on ? '1fdb49' : '#d3d3d3';
})
GCE_API.getIO(idalarm).then((ret) => { // ask for the actual value
document.getElementById('led2').style.backgroundColor = ret.on ? 'red' : '#d3d3d3';
})
}
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: #fff;
padding: 3px;
border-radius: 2px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
width: 100%;
height: 100%;
text-align: center;
position: relative;
top:12px;
}
.led {
width: 10px;
height: 10px;
border-radius: 50%;
background-color: #d3d3d3;
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: #007bff;
color: #fff;
}
.button:hover {
background-color: #0056b3;
}
</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>
en template 1 par défaut :
en template 2 par défaut :
3 « J'aime »
cce66
5
Bonjour @fgtoul
Ca donne mĂȘme la possibilitĂ© dâajouter un bouton connectĂ© Ă une io vituelle qui pourrait
déclencher un scénario normalement non ?
fgtoul
6
tu peux lier lâobjet access control Ă ce que tu veux, ça permet dâexĂ©cuter nâimporte quoi par lien ou scĂ©nario Ă chaque fois quâun code valide est entrĂ©.
Un wiki est en cours.
1 « J'aime »
fgtoul
8
voici le mĂȘme clavier avec une palette personnalisĂ©e pour le template 1 :
<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>
1 « J'aime »
Et le voici avec la palette pour le template 2 (mon préféré ).
Le bouton 5 est survolĂ© par la sourisâŠ
Bonne jornée
cce66
10
@fgtoul @grocrabe
Jâaime bien ces parties de ping-pong productivesâŠ
La prochaineâŠdeux boutons en dessous, un pour activer une IO virtuelle pour mettre ON un scĂ©nario et lâautre pour le mettre OFF
Câest Ă qui dâengager dĂ©jĂ ?
fgtoul
11
comme dit plus haut, il suffit de lier la sortie de lâobjet access control, par exemple Ă un objet tĂ©lĂ©rupteur. Ce dernier fera ce que tu veux en ON et OFF.
1 « J'aime »
cce66
12
jâavais pas pensĂ© au tĂ©lĂ©rupteur !
Bonjour cce66,
si tu utilises un TĂ©lĂ©rupteur, il peut ĂȘtre intĂ©ressant de lier la Led1 du clavier HTML Ă la sortie du TĂ©lĂ©rupteur plutĂŽt que Ă la sortie du Access Control.
Comme ça tu as un retour visuel de lâĂ©tat du TĂ©lĂ©rupteur.
Pong
Bonne journée
1 « J'aime »
fgtoul
A scindé ce sujet ()
14
Bonjour
Merci pour le travail.
Par contre jâai un problĂšme dâaffichage
fgtoul
16
Bonjour Francis
Le widget nâest pas fait pour le liveview.
LâAPI html ne fonctionnera pas.
Bonjour,
pour le Widget clavier virtuel, il suffit de crĂ©er une variable type STR32 et la sĂ©lectionner dans la dĂ©finition de lâobjet « Access Control » (champ ContenuStr).
Par contre il faut faire le choix entre wiegand et STR32 dans access .
Il faut créer un nouveau acces control ?
fgtoul
18
si le clavier virtuel exĂ©cute les mĂȘmes actions que le wiegand, avec les mĂȘmes codes, il est possible dâutiliser lâID de la variable str32 du wiegand dans le widget html.
1 « J'aime »