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 %>">&#xF011;</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>