bonsoir,
voila je ne sais pas si vous connaissez sarah de jp encausse pour de la domotique avec reconnaissance vocale, mais j ai un souci avec un script, j ai une interface web avec la page controls.ejs que j appel par monip:8080/controls et dedans se trouve un script dont je ne comprend pas tout vu que je n y connais pas grand chose et surtout que je ne l'ai pas ecrit vu que je n'en serait pas capable;
la seule chose que je "sais" c est que j appuie sur un bouton pour allumer ou eteindre un objet ce meme bouton change d'etat apres son execution mais ne se met pas a jour sur une autre page internet identique sauf si je recharge la page manuellement. j ai reussi a faire un refresh de la page toutes x secondes mais ce n est vraiement pas estetique.
donc comme un refresh de la page donne le resultat escompté c est que le script à l interieur se reexecute : ca envoi les requetes
http://192.168.1.11:8080/sarah/lumie...le_ventilateur
http://192.168.1.11:8080/sarah/lumie...t%C3%A9l%C3%A9
et modifie l'eat des bouton en consequence
, j ai essayer d inserer un setInterval/setTimout d une centaine de manieres differentes ainsi que d'autre option mais impossible de reexecute le scipt en entier sans recharger la page alors je fais appel a vous en esperant que vous puissiez m'aider.
Le GET fait appel de l'etat et le SET fait l action sur mon materiel (on/off).
Merci d'avance de toute l'aide que vous pouvez m'apporter car ça fait plusieurs jour que j'essai en vain.
je vous met le lien du github de cette webapp/views/controls.ejs : https://github.com/armandkd/WSRNodeJS
et ici ce controls.ejs avec le <script>:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 <% layout('layouts/layout') %> <% var modes = { 'standard': { 'name': 'Standard', 'icon': 'home', 'rule': [true, false], 'data': [] }, 'travail': { 'name': 'Travail', 'icon': 'briefcase', 'rule': [false, false], 'data': [['le ventilateur', 1],['la télé', 1]] }, 'nuit': { 'name': 'Nuit', 'icon': 'dashboard', 'rule': [true, true], 'data': [['all', 0]] }, 'film': { 'name': 'Film', 'icon': 'film', 'rule': [false, false], 'data': [['all', 0]] }, 'manuel': { 'name': 'Manuel', 'icon': 'wrench', 'rule': [false, false], 'data': [] }, 'off': { 'name': 'OFF', 'icon': 'off', 'rule': [false, false], 'data': [['all', 0]] } } var acteurs = { 'eclairage': { 'name': 'Eclairage', 'data': { 'le_ventilateur': ['ventilateur', 'Contrôle du ventilateur du salon'], 'la_télé': ['Télé', 'Contrôle de la Télévision'] } }, 'equipements': { 'name': 'Equipements', 'data': { 'chauffage': ['Chauffage', 'Contrôle du chauffage'], 'entree': ['Porte d\'entrée', 'Contrôle de l\'ouverture de la porte'] } } } %> <div class="stretch col-md-8 content" id="controls" style="padding-left: 50px"> <h1>Panneau de contrôle</h1> <ul class="square-buttons"> <% for (id in modes) { %> <li><div class="depth"><div class="mode" id="<%= id %>"><span class="glyphicon glyphicon-<%= modes[id]['icon'] %>"></span><br><%= modes[id]['name'] %></div></div></li> <% } %> </ul> <% for (cat in acteurs) { %> <h2><%= acteurs[cat]['name'] %></h2> <table width="80%" class="table table-striped <%= cat %>"> <tr> <th>Nom</th> <th width="100px"></th> </tr> <% for (id in acteurs[cat]['data']) { %> <tr> <td><%= acteurs[cat]['data'][id][0] %><p class="description"><%= acteurs[cat]['data'][id][1] %></p></td> <td><div class="toggler" id="<%= id %>"></div></td> </tr> <% } %> </table> <% } %> </div> <form method="POST" id="rules" action="/rules"> <input type="hidden" name="if" value="before"> <input type="hidden" name="script" value=" "> <input type="hidden" name="then" value=""> <input type="hidden" name="disabled" value="true"> <input type="hidden" name="if" value="after"> <input type="hidden" name="script" value=" "> <input type="hidden" name="then" value=""> <input type="hidden" name="disabled" value="true"> <input type="hidden" name="if" value="detecteurs"> <input type="hidden" id="script" name="script" value=""> <input type="hidden" name="then" value="lumieres"> <input type="hidden" id="state" name="disabled" value=""> </form> <script>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 $(document).ready(function() { $('.eclairage .toggler').each(function(index, element) { $.ajax({ type: 'GET', url: '/sarah/lumieres', data: {action: 'get', id: $(element).attr('id')}, success: function(msg){ if (msg=='1') { $(element).addClass('on'); } else if (msg!='0') { $.notify('Etat incorrect', 'error'); } }, error: function(){ $.notify('Erreur', 'error'); } }); }); }); $('.mode').click(function() { $('.active').removeClass('active'); $(this).parent().addClass('active'); switch($(this).attr('id')) { <% for (id in modes) { %> case '<%= id %>': rule(<%= modes[id]['rule'][0] %>, <%= modes[id]['rule'][1] %>); <% for (acteur in modes[id]['data']) { %> <% if (modes[id]['data'][acteur][0]=='all') { %> $('.eclairage .toggler').each(function(index, element) { toggle($(element).attr('id'),<%= modes[id]['data'][acteur][1] %>); }); <% } else { %> toggle('<%= modes[id]['data'][acteur][0] %>', <%= modes[id]['data'][acteur][1] %>); <% } %> <% } %> break; <% } %> } }); $('.toggler').click(function () { toggle($(this).attr('id'),$(this).hasClass('on') ? '0':'1'); }); function toggle(name, state){ var start=new Date().getTime(); while((new Date().getTime()- start) < 250) {} $.ajax({ type: 'GET', url: '/sarah/lumieres', data: {action: 'set', id: name, etat: state}, success: function(msg){ if(msg=='') { $.notify('Pas de réponse', 'warn'); } else { if (state=='1') { $('#'+name).addClass('on'); } else { $('#'+name).removeClass('on'); } $.notify(msg, 'success'); } }, error: function(){ $.notify('Erreur', 'error'); } }); } function rule(state, tmp){ $('#script').val('var date = new Date();\noptions.action="set";\noptions.id="0";\noptions.declencheur="1";\noptions.tmp=' + tmp + '\nif (date.getHours() > 18 || date.getHours() < 8) {\n if (options.code=="5139785") {\n options.id="le ventilateur";\n options.etat="1";\n }\n}'); $('#state').val(!state); $.post('/rules', $('#rules').serialize(), function(msg){ if(msg=='') { $.notify('Pas de réponse', 'warn'); } else { $.notify('Succès', 'success'); }}); } </script>
Partager