[RESOLU] Problème de serveur Websocket ou de redirection de port

Bonjour
Je débute dans le monde du Raspberry et de la programmation. En suivant les indications de plusieurs tutoriels, j’ai réalisé le projet suivant:

  • Un script python qui enregistre toutes les 5 secondes la température du raspberry dans une base MySql.Le script crée aussi un serveur Websocket qui diffuse la température toutes les 5s.
  • Un Javascript pour récupérer les données de la base et les afficher dans un graphe HighCharts. Le script est aussi client Websocket pour mettre à jour un élément de ma page html et le graphe.
  • Une page html pour diffuser sur serveur web l’historique de la température.

Tout fonctionne …en local seulement

Quand le passe par le Web, seule le graphe est affiché. Le websocket n’est pas connecté au serveur.

J’ai redirigé les IP et ports dans la config freebox mais rien n’y fait.

Avait vous une idée pour résoudre le pb?
[Edit : ça marchait en fait, je n’ai pas assez attendu la connexion du websocket sur mon smartphone…]

Voici le code python ; l’adresse IP est l’IP fixe du raspberry, le port est 5678.

Citation
import asyncio
import datetime
from time import sleep
import random
import websockets
import mysql.connector
from mysql.connector import MySQLConnection, Error
from threading import Thread

Citation
def insert_data(val):
query = « INSERT INTO temperatures(Valeur) VALUES( » + str(val) + « ) »
print(‹ requete: ›,query)
try:
conn = mysql.connector.connect(host=« localhost »,user=« root »,password="****", database=« mesures »)
cursor = conn.cursor()
cursor.execute(query)

    if cursor.lastrowid:
        print('last insert id', cursor.lastrowid)
    else:
        print('last insert id not found')

    conn.commit()
except Error as error:
    print(error)

finally:
    cursor.close()
    conn.close()

Citation
class Acquisition(Thread):

def __init__(self,frequence):
    Thread.__init__(self)
    self.frequence = frequence

def run(self):
    global tempC
    """Code à exécuter pendant l'exécution du thread."""
    while True:
            tFile = open('/sys/class/thermal/thermal_zone0/temp')
            temp = float(tFile.read())
            tempC = temp/1000
            insert_data(tempC)
            sleep(self.frequence)

Citation
tempC=0
tache=Acquisition(5)
tache.start()

Citation
@asyncio.coroutine
def time(websocket, path):
global tempC
while True:
yield from websocket.send(str(tempC))
yield from asyncio.sleep(5)
Citation
start_server = websockets.serve(time, ‹ 192.168.0.11 ›, 5678)

Citation
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

et voici le script d’affichage graphe avec le client Websocket

Citation
$(function() {

$.get('Recup_Donnees.php', function(data) {
	console.log(data);
    $('#chart').highcharts({
        chart: {
			zoomType: 'x',
			events: {
                load: function() {
                          var seri = this.series[0];
                          var socket = new WebSocket('ws://IPWebfreebox:5678/ws');
                          socket.onmessage = function(ev){
										var z,x,y;
										document.getElementById('cpu_temp').innerHTML=ev.data;  
										 z=(new Date());
                                         x = z.getTime();
                                         x=x-z.getTimezoneOffset()*60*1000;
                                         y = parseFloat(ev.data);
                                         
										seri.addPoint([x,y], true, false);
											
                                        }
                                   }
                 }
		},
		title: {
			text: 'Historique de la température'
		},
		subtitle : {
			text: document.ontouchstart === undefined ?
                'Cliquer tirer pour zoomer sur la partie sélectionnée':'Cliquer tirer pour zoomer sur la partie sélectionnée'
		},
		xAxis: {
			type: 'datetime'
		},
		yAxis: {
			title: {
				text: 'Température'
			}
		},
		plotOptions:{
			area: {
				fillColor: {
					linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1},
					stops: [
						[0, Highcharts.getOptions().colors[0]],
						[1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]
					]
				
				},
				marker: {
					radius: 2
				},
				lineWidth: 1,
				states: {
					hover: {
					lineWidth: 1
					}
				},
				threshold: null,
				turboTreshold: 1000
			
			},
			
			series: {
				turboTreshold:1000
			}
		
		},
	
	
		series: [{
			boosTreshold:1,
			turboTreshold: 1000,
			type: 'area',
			name: 'température raspberry',
			data: JSON.parse(data)		
		}]
    });
});

});

Merci d’avance pour votre aide