如何在一个Python脚本中使用WebSocket和webserver

如何在一个Python脚本中使用WebSocket和webserver,python,websocket,webserver,Python,Websocket,Webserver,我想创建一个电动汽车充电器(电动车)服务器的原型,这样电动汽车充电桩就可以通过网站进行管理。因此,我创建了一个非常简单的Python脚本,充电桩可以通过WebSocket连接到服务器。同时,Web服务器应连接到同一服务器。因此,脚本应该能够通过WebSocket和http接受传入连接 我创建了下面的脚本,它可以正常工作。如果我使用netstat,我可以看到端口8000和9000正在侦听并接受连接。但是,问题是没有触发_connect上的功能。哪里出了什么问题,或者我错过了什么 为了记录在案,我是

我想创建一个电动汽车充电器(电动车)服务器的原型,这样电动汽车充电桩就可以通过网站进行管理。因此,我创建了一个非常简单的Python脚本,充电桩可以通过WebSocket连接到服务器。同时,Web服务器应连接到同一服务器。因此,脚本应该能够通过WebSocket和http接受传入连接

我创建了下面的脚本,它可以正常工作。如果我使用netstat,我可以看到端口8000和9000正在侦听并接受连接。但是,问题是没有触发_connect上的功能。哪里出了什么问题,或者我错过了什么

为了记录在案,我是Python的新手。非常感谢您的帮助

import asyncio
import websockets
import json
import requests
import http.server
import socketserver
from datetime import datetime

import mysql.connector
from mysql.connector import Error
from mysql.connector import errorcode

from ocpp.routing import on
from ocpp.v16 import ChargePoint as cp
from ocpp.v16.enums import Action, RegistrationStatus
from ocpp.v16 import call_result

connection = mysql.connector.connect(host='localhost',
                                            database='[name_database]',
                                            user='[username]',
                                            password='[password]')

PORT1 = 9000    # EV CHARGER SERVER
PORT2 = 8000    # WEB SERVER
SERVERADDRESS = '[server_address]'

def closeMySQL():
    if (connection.is_connected()):
                connection.close()
                print("MySQL connection closed")
                print("-----------------------------------------------------")

class ChargePoint(cp):
    @on(Action.BootNotification)
    def on_boot_notitication(self, charge_point_vendor, charge_point_model, **kwargs):
        return call_result.BootNotificationPayload(
            current_time=datetime.utcnow().isoformat(),
            interval=10,
            status=RegistrationStatus.accepted
        )

async def on_connect(websocket, path):

    charge_point_id = path.strip('/')
    cp = ChargePoint(charge_point_id, websocket)

    print("EV Charge point '"+charge_point_id+ "' has connected!")

    try:
        cursor = connection.cursor()
        mySql_query = """DO SOME SQL STUFF"""
        cursor.execute(mySql_query)
        connection.commit()
        cursor.close()

    except mysql.connector.Error as error:
        print("Something went wrong: {}".format(error))

    finally:
        closeMySQL()

    await cp.start()

async def main():
    server = await websockets.serve(
        on_connect,
        SERVERADDRESS,
        PORT1,
        subprotocols=['ocpp1.6']
    )
    with socketserver.TCPServer((SERVERADDRESS, PORT2), http.server.SimpleHTTPRequestHandler) as httpd:
        print("Websockets EV Server is serving at port", PORT1)
        print("Webserver is serving at port", PORT2)
        httpd.serve_forever()
    await server.wait_closed()

if __name__ == '__main__':
    asyncio.run(main())