Advertisement
jjjv

consumers.py

Sep 27th, 2023
366
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.13 KB | None | 0 0
  1. import json
  2. import traceback
  3. from channels.consumer import AsyncConsumer
  4. from asgiref.sync import sync_to_async
  5. from channels.exceptions import StopConsumer
  6. from iotsite.models import Device
  7. from random import randint
  8. from time import sleep
  9.  
  10. """
  11.   Upload Channel
  12.   Used by clients to update sensor data
  13. """
  14. class UploadConsumer(AsyncConsumer):
  15.    
  16.     """
  17.        Method called when websocket connects
  18.    """
  19.     async def websocket_connect(self,event):
  20.         print("connected ", event)
  21.         data = {
  22.             "type": "websocket.accept",
  23.             "text": "successfully connected client"
  24.         }
  25.  
  26.         #sleep(1)
  27.         try:
  28.             await self.send(data)
  29.             print("sent data")
  30.         except Exception as e:
  31.             print("didnt send data " + str(e))
  32.  
  33.     """
  34.        Update sensor data
  35.    """
  36.     @sync_to_async
  37.     def saveToObject(self, val_list):
  38.         device = Device.objects.get(pk=val_list[0])
  39.         device.machine.sensor_data_one = float(val_list[1])
  40.         device.machine.sensor_data_one = float(val_list[2])
  41.         device.machine.save()
  42.         device.save()
  43.  
  44.     """
  45.        Method called when server receives messsage from websocket
  46.    """
  47.     async def websocket_receive(self,event):
  48.         print("received ", event)
  49.         val_list = event['text'].split(",")
  50.        
  51.         sleep(1)
  52.         print(val_list)
  53.         await self.saveToObject(val_list)
  54.         data = {
  55.             "type": "websocket.accept",
  56.             "text": "successfully added sensor data"
  57.         }
  58.  
  59.         try:
  60.             await self.send(data) #error here
  61.             print("sent the data from recieved")
  62.             sleep(1)
  63.         except Exception as e:
  64.             print("didnt send the data " + str(e))
  65.             #print(traceback.format_exc())
  66.  
  67.     """
  68.        Method called when websocket disconnected
  69.    """
  70.     async def websocket_disconnect(self, event):
  71.         print("disconnected " + str(event) + "\n\n")
  72.  
  73.  
  74. """
  75.    Working Example of Device Channel
  76.    Clients can get device data thourgh this Channel
  77. """
  78. class DeviceConsumer(AsyncConsumer):
  79.  
  80.     """
  81.        Method called when websocket connects
  82.    """
  83.     async def websocket_connect(self,event):
  84.         print("connected ", event)
  85.         data = {
  86.             "type": "websocket.accept",
  87.         }
  88.         await self.send(data)
  89.  
  90.     """
  91.        Helper method to get Device data
  92.    """
  93.     @sync_to_async
  94.     def getDeviceData(self, dev_id):
  95.         dev = Device.objects.get(pk=dev_id)
  96.         self.sensor_data = dev.machine.sensor_data_one
  97.  
  98.     """
  99.        Method called when server receives messsage from websocket
  100.        Sends back current sensor data
  101.    """
  102.     async def websocket_receive(self,event):
  103.         print("received ", event)
  104.         await self.getDeviceData(event['text'])
  105.  
  106.         data = {
  107.             "type": "websocket.send",
  108.             "text": str(self.sensor_data)
  109.         }
  110.  
  111.         await self.send(data)  
  112.  
  113.     """
  114.        Method called when websocket disconnected
  115.    """
  116.     async def websocket_disconnect(self, event):
  117.         print("disconnected", event)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement