[RESOLU] Pb websocket include

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Pb websocket include

Re: Pb websocket include

par Anto75019 » 07 sept. 2016, 11:10

Merci pour toutes ses infos...
Je test tout de suite ;)

Re: Pb websocket include

par moogli » 07 sept. 2016, 09:35

salut,

rien que structurellement tu ne peux pas faire cela. Regarde le code source généré dans ton navigateur tu y trouvera deux html, deux body deux head etc

les page inclues doivent être des "fragments" de html (comme le menu je suppose ? ).

- déplace le code js dans un fichier .js a part (plus clair à lire.
- tu as jQuery utilise le pour que ton code soit exécuté au onLoad (très simple avec jQuery).
- garde juste le code html d'affichage dans les pages inclues

lien1.html
<div class="container">
      <div class="panel panel-success" margin: 15px;>
  					<div class="btn btn-info btn-lg"><h3>All Mouvements</h3></div>
       					 <div class="panel-body" id="messages">
       					 <ul class="list-item" id="messages">
       					 </ul>
       					 
       					 </div>
        		 <div class="panel-footer" id="status"><small>déconnectés</small></div>
      </div>  	
     </div>
lien1.js
var server = window.location.hostname;
        var topics = {};
        var wsMouv = "ws://localhost/ws/lien1";
        function wsConnectallmouv() {
            console.log("connect",wsMouv);
            var ws = new WebSocket(wsMouv);
            ws.onmessage = function(msg) {
               
                var allmouvObj = JSON.parse(msg.data);
                console.log(allmouvObj);
        var output = "";
          for (var property in allmouvObj) {
  						output += '<li class="list-group-item"><strong>' +property + '</strong>' + ': ' + allmouvObj[property]+'</li>';
            }
                document.getElementById('messages').innerHTML = output;                                     
              
            }
            ws.onopen = function() {
                document.getElementById('status').innerHTML = "<small>connexion établie</small>";
                console.log("connected");
            }
            ws.onclose = function() {
                document.getElementById('status').innerHTML = "pas de connection";
                setTimeout(wsConnectallmouv,1000);
            }
        }

$( document ).ready(function() {
        wsConnectallmouv()
    });
idem pour le fichier 2 et pense au unload, ils sont en train de virer des choses, ils sont sympa de le dire mais ne disent pas ce qui remplace ou pas ...

@+

Pb websocket include

par Anto75019 » 06 sept. 2016, 16:19

Bonjour à tous,
Je suis nouveau sur les forum donc veuillez m'excuser si il manque des infos où si mon sujet est mal placé...

Pour résumer (je ne suis pas ds le web, je bidouille) :
Pour mon projet de Domotique, j'ai un Raspberrry qui reçois toutes les infos de mon arduino.
Via node-red sur le pi, je transmet les infos (format Json) a des pages web (sur pi aussi) via des websocket.

J'arrive a envoyer différentes infos via différents lien websocket (ws://localhost/ws/lien1, ws://localhost/ws/lien2, etc...) et j'ai différentes pages HTML (lien1.html lien2.html) qui affichent proprement les infos de chaque socket.

Jusque là, ça marche très bien.

Voulant faire une sorte de page avec des widgets, j'ai utilisé la fonction php include pour insérer mes résultats dans ma page principale (php).
Mon problème est que je ne peux pas avoir afficher le résultat de plusieurs websocket sur la même page car il n'y en a qu'un qui marche.
Mais sur différentes pages en simultané ca marche. Le problème vient donc du fait d'inclure mes pages dans une autre (enfin je pense)...

J'espère être compréhensible et que quelqu'un peu m'aider...
Merci d'avance.

Voici mon code de mon "widget" (widget/lien1.html)
<!DOCTYPE HTML>
<html>
    <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Temp</title>

    <!-- Bootstrap -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    
    </head>
    <script type="text/javascript">
        var server = window.location.hostname;
        var topics = {};
        var wsMouv = "ws://localhost/ws/lien1";
        function wsConnectallmouv() {
            console.log("connect",wsMouv);
            var ws = new WebSocket(wsMouv);
            ws.onmessage = function(msg) {
               
                var allmouvObj = JSON.parse(msg.data);
                console.log(allmouvObj);
				var output = "";
					for (var property in allmouvObj) {
  						output += '<li class="list-group-item"><strong>' +property + '</strong>' + ': ' + allmouvObj[property]+'</li>';
						}
                document.getElementById('messages').innerHTML = output;                                     
              
            }
            ws.onopen = function() {
                document.getElementById('status').innerHTML = "<small>connexion établie</small>";
                console.log("connected");
            }
            ws.onclose = function() {
                document.getElementById('status').innerHTML = "pas de connection";
                setTimeout(wsConnectallmouv,1000);
            }
        }
    </script>
    <body onload="wsConnectallmouv();" onunload="ws.disconnect;">
    <div class="container">
      <div class="panel panel-success" margin: 15px;>
  					<div class="btn btn-info btn-lg"><h3>All Mouvements</h3></div>
       					 <div class="panel-body" id="messages">
       					 <ul class="list-item" id="messages">
       					 </ul>
       					 
       					 </div>
        		 <div class="panel-footer" id="status"><small>déconnectés</small></div>
      </div>  	
     </div> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>  
    
    </body>
</html>
Voici le code de ma page principal :
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>Ma domotik</title>

    <!-- Bootstrap -->
    <link href="css/bootstrap.css" rel="stylesheet">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <?php include("include/menu.php"); ?>
  
<h1>Ma maison</h1>

<div class="row">
  <div class="col-xs-6 col-sm-3"><?php include("widget/lien1.html"); ?></div>
    <div class="clearfix visible-xs-block"></div>
      <div class="col-xs-6 col-sm-3"><?php include("widget/lien2.html"); ?></div>
    <div class="clearfix visible-xs-block"></div>
</div>
    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.min.js"></script>
	
  </body>
</html>