ldleman / yana-server

Interface PHP de domotique Y.A.N.A (You Are Not Alone)
http://projet.idleman.fr/yana
107 stars 59 forks source link

rafraichissement widget sans actualisation de la page web #191

Open moebius911 opened 8 years ago

moebius911 commented 8 years ago

Bonjour Actuellement quand on se connecte sur la page web de yana, les widgets s’actualisent au chargement. Est-ce possible de faire une mise à jour interactive des widgets sans recharger totalement la page ?

J’ai essayé de modifier ton code mais malheureusement ça dépasse de loin mes compétences

Merci d’avance

theos10 commented 8 years ago

Bonjour, J'ai remarqué la même chose, et une solution m'interresse pour le plugin door v2, et d'autre plugin en cours de dev.

ldleman commented 8 years ago

Pour un seul widget ou pour l'ensemble ? Depuis php ça sera tendu, mais je vais voir si je peux proposer une solution simple via js type Widget.refresh("uid-du-widget"); ça vous irai ?

theos10 commented 8 years ago

L idée c'est pour un widget. J'ai chercher côté jquery mais ca ne marche pas. J'ai aussi chercher pour faire un refresh div. Sans succès.

-----Message d'origine----- De : "Idleman" notifications@github.com Envoyé : ‎11/‎03/‎2016 07:55 À : "ldleman/yana-server" yana-server@noreply.github.com Cc : "FOURNIER Ghislain" fournier-g2@wanadoo.fr Objet : Re: [yana-server] rafraichissement widget sans actualisation de lapage web (#191)

Pour un seul widget ou pour l'ensemble ? Depuis php ça sera tendu, mais je vais voir si je peux proposer une solution simple via js type Widget.refresh("uid-du-widget"); ça vous irai ? — Reply to this email directly or view it on GitHub.

moebius911 commented 8 years ago

Si ce n'est pas trop compliqué, un rafraîchissement de l’ensemble des widgets affichés sera pour moi la meilleure solution.

Merci

theos10 commented 8 years ago

Il ne faut pas non plus que ça alourdisse l' interface. Mais c'est sur qu une Dashboard dynamique serai top

-----Message d'origine----- De : "moebius911" notifications@github.com Envoyé : ‎11/‎03/‎2016 14:30 À : "ldleman/yana-server" yana-server@noreply.github.com Cc : "FOURNIER Ghislain" fournier-g2@wanadoo.fr Objet : Re: [yana-server] rafraichissement widget sans actualisation de lapage web (#191)

Si ce n'est pas trop compliqué, un rafraîchissement de l’ensemble des widgets affichés sera pour moi la meilleure solution. Merci — Reply to this email directly or view it on GitHub.

theos10 commented 8 years ago

Bonjour, Je n'arrive pas a trouver une fonction qui refresh l’état du widget automatiquement. j'ai deja une approche qui indique le changement d'etat, et qui affiche l'etat au chargement de la page. `$content = '

                    <!-- CSS -->
                    <style>

                        .door_pane {
                            background: none repeat scroll 0 0 #50597b;
                            list-style-type: none;
                            margin: 0;
                            cursor:default;
                            width: 100%;
                        }
                        .door_pane li {
                            background: none repeat scroll 0 0 #50597b;
                            display: inline-block;
                            margin: 0 1px 0 0;
                            padding: 10px;
                            cursor:default;
                            vertical-align: top;
                        }
                        .door_pane li h2 {
                            color: #ffffff;
                            font-size: 16px;
                            margin: 0 0 5px;
                            padding: 0;
                            cursor:default;
                        }
                        .door_pane li h1 {
                            color: #B6BED9;
                            font-size: 14px;
                            margin: 0 0 1px;
                            padding: 0;
                            cursor:default;
                        }

                        .door_pane li.door-case{
                            background-color:  #373f59;
                            cursor:pointer;
                            width: 55px;
                        }
                        .door-case i{
                            color:#8b95b8;
                            font-size:50px;
                            transition: all 0.2s ease-in-out;
                        }
                        .door-case.active i{
                            color:#ffffff;
                            text-shadow: 0 0 10px #ffffff;
                        }

                        .door-case.active i.fa-lightbulb-o{
                            color:#FFED00;
                            text-shadow: 0 0 10px #ffdc00;
                        }
                        .door-case.active i.fa-power-off{
                            color:#BDFF00;
                            text-shadow: 0 0 10px #4fff00;
                        }

                        .door-case.active i.fa-flash{
                            color:#FFFFFF;
                            text-shadow: 0 0 10px #00FFD9;
                        }

                        .door-case.active i.fa-gears{
                            color:#FFFFFF;
                            text-shadow: 0 0 10px #FF00E4;
                        }

                    </style>

                    <!-- CSS -->

                    <ul class="door_pane">
                            <li class="door-case '.($door->getState_io($door->pinCaptor)?'active':'inactive').'" data-id="'.$door->id.'" onclick="plugin_door_change(this);" style="text-align:center;">
                                <i title="On/Off" class="'.$door->icon.'"></i>
                            </li>
                            <li>
                                <h2>'.$door->description.($door->pulse!=0?' - Pulse '.$door->pulse.'µs':'').'</h2>

                                <h1><div id="'.etat.$door->id.'">Etat : <?php plugin_door_change(this) ?></div></h1>

                                <h1>PIN Relais : '.$door->pinRelay.' - PIN Capteur : '.$door->pinCaptor.'</h1>
                            </li>

                        </ul>

                    <!-- JS -->
                    <script type="text/javascript">

                        function plugin_door_change(element){
                            var state = $(element).hasClass(\'active\') ? 0 : 1 ;

                            $("#'.etat.$door->id.'").text("Etat : "+ state);

                            $.action(
                                {
                                    action : \'door_manual_change_state\', 
                                    engine: $(element).data("id"),
                                    state: state
                                },
                                function(response){
                                    $(element).toggleClass("active");
                                }

                            );

                        }

                    </script>
                    ';
                }`
moebius911 commented 8 years ago

Normalement comme le changement d’état n’apparait pas toutes les secondes, est-ce que ça ne serai pas plus simple de rafraichir le Dashboard entier quand tu détecte un changement d’état ?

Ce n’est pas le top, mais ça serrai quand même une grande avancée ?

moebius911 commented 8 years ago

c'est pas le top mais tu peut ajouter cette modification à la fin du fichier index.php de yana (ligne 18)

<head> <META HTTP-EQUIV="Refresh" CONTENT="60; URL=<?php $_SERVER['SERVER_NAME'] ?> <?php $_SERVER['REQUEST_URI'] ?> "> </head>

Ça te rafraîchira le Dashboard toutes les minutes.

moebius911 commented 8 years ago

J’ai fait ça un peu trop rapidement Ça t’actualise tous les modules de yana.

Pour actualiser uniquement l’accueil voici le nouveau code

<?php if($_SERVER['REQUEST_URI'] == '/yana-server/index.php'){ ?> <head> <META HTTP-EQUIV="Refresh" CONTENT="60; URL=<?php $_SERVER['SERVER_NAME'] ?> <?php $_SERVER['REQUEST_URI'] ?> "> <head> <?php } ?>

if($_SERVER['REQUEST_URI'] == '/yana-server/index.php?init=1'){ ?> <head> <META HTTP-EQUIV="Refresh" CONTENT="60; URL=<?php $_SERVER['SERVER_NAME'] ?> <?php $_SERVER['REQUEST_URI'] ?> "> <head> <?php } ?>

theos10 commented 8 years ago

Je pense que la meilleur solution serait un polling sur chaque widget, avec la possibilité de choisir dans la configuration, la fréquence. et un innerHTML.replace pour modifier l'etat.