Files
Sietse Jonker 072ff99624 Merge branch 'main' into '44-als-gebruiker-wil-ik-dat-de-website-automatisch-het-aantal-nodes-dat-ik-heb-aangesloten-op-de'
# Conflicts:
#   arduino/node-code/node-code-final/node-code-final.ino
#   arduino/node-code/node-code-final/nodeCodeFinal.ino
#   arduino/node-code/node-code-final/nodeCodeHeader.h
2024-03-14 12:02:13 +01:00

2.6 KiB

Websockets

Introduction

Why are we going to use websockets?

With websockets you can establish a connection between the client and the server, and both can send data fast to each other. This is useful for real-time applications like for our project to plot live graphs of the data we are collecting from the sensors.

How to use websockets

There are different languages to serve websockets with, but we are going to use Python with the library websockets. This library is easy to use and has a lot of documentation.

Issues

Not all ports are open so we need to make a reverse proxy to use websockets.

Ports

We can only use certain ports like 113, 80, 443. These are common ports and are not blocked by firewalls. Something in the network is blocking all other ports which makes it hard to use websockets.

A solution for this is to use a reverse proxy. (See Reverse Proxy)

Classes

For the websockets we are going to use 2 classes. One for the nodes and one for the websites. The nodes are going to send data to the website and have multiple variables like temperature, humidity, eCO2, TVOC and sound. The website is going to send data to the nodes like names and settings. For this they have to use a userName and password.

classDiagram

client --> User : website client
client --> Node : esp32 client

namespace raspberry pi clients {
    class client {
        +MacAdress
        sendData()
    }

    class Node {
        +eCO2
        +Temperature
        +Humidity
        +TVOC
        +Sound
        +Settings
        changeNodeName(name)
        updateData(data)
    }

    class User {
        +userName
        +password
        changeNodeName(data)
    }
}

Code of the classes:

class client:
   def __init__(self, macAdress):
      self.macAdress = macAdress

class node(client):
   def __init__(self, name, node, temperature, humidity, eCO2, TVOC, sound):
      super().__init__(macAdress)
      self.nodeNumber = node
      self.temperature = temperature 
      self.humidity = humidity
      self.eCO2 = eCO2
      self.TVOC = TVOC
      self.sound = sound
      self.name = name

   def updateData(self, temperature, humidity, eCO2, TVOC, sound):
      self.temperature = temperature
      self.humidity = humidity
      self.eCO2 = eCO2
      self.TVOC = TVOC
      self.sound = sound

class Website(client):
   def __init__(self, macAdress, user, password):
      super().__init__(macAdress)
      self.passWord = passWord
      self.userName = userName

Sources:

Written by Sam & Sietse