From b540314a7b54ebe06bc3427861793bac6883c9fa Mon Sep 17 00:00:00 2001 From: xianfx Date: Tue, 12 Mar 2024 23:54:13 +0800 Subject: [PATCH] feat: TODO mqtt pub/sub --- apps/counter/tests.py | 6 ++++-- apps/mosquito/api/urls.py | 3 ++- apps/mosquito/api/views.py | 11 ++++++++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/apps/counter/tests.py b/apps/counter/tests.py index 7ce503c..6a8989a 100644 --- a/apps/counter/tests.py +++ b/apps/counter/tests.py @@ -1,3 +1,5 @@ -from django.test import TestCase +import paho.mqtt.subscribe as subscribe -# Create your tests here. +topic = f'solarmosquitolamp/devices/861959064988699/state' +msg = subscribe.simple(topic, hostname='8.217.112.255', port=1883) +print("%s %s" % (msg.topic, msg.payload)) diff --git a/apps/mosquito/api/urls.py b/apps/mosquito/api/urls.py index 20341a3..0ba5f7c 100644 --- a/apps/mosquito/api/urls.py +++ b/apps/mosquito/api/urls.py @@ -18,5 +18,6 @@ urlpatterns = [ path('weather/', WeatherLogListAPIView.as_view(), name='weather-log'), path('deviceinfo/', DeviceInfoAPIView.as_view(), name='device-info'), path('weatherstationinfo/', WeatherStationInfoAPIView.as_view(), name='weather-station-info'), - path('device//remote/', DeviceRemoteViewSet.as_view({'post': 'remote'}), name='device-remote'), + path('device//mqtt/pub/', DeviceRemoteViewSet.as_view({'post': 'pub'}), name='device-mqtt-pub'), + path('device//mqtt/sub/', DeviceRemoteViewSet.as_view({'get': 'sub'}), name='device-mqtt-sub'), ] diff --git a/apps/mosquito/api/views.py b/apps/mosquito/api/views.py index 61200df..ffcd65d 100644 --- a/apps/mosquito/api/views.py +++ b/apps/mosquito/api/views.py @@ -2,6 +2,7 @@ import re import pytz import json import paho.mqtt.publish as publish +import paho.mqtt.subscribe as subscribe # import paho.mqtt.subscribe as subscribe from rest_framework import decorators, mixins @@ -225,7 +226,7 @@ class DeviceRemoteViewSet(mixins.ListModelMixin, filter_backends = [SearchFilter, OrderingFilter] @decorators.action(methods='POST', detail=True) - def remote(self, request, device_id=None): + def pub(self, request, device_id=None): command = request.data.get('command') speed = request.data.get('speed') @@ -244,3 +245,11 @@ class DeviceRemoteViewSet(mixins.ListModelMixin, publish.single(topic, payload=json.dumps(message), hostname='8.217.112.255', port=1883) return Response({'success': True}) + + @decorators.action(methods='POST', detail=True) + def sub(self, request, device_id=None): + topic = f'solarmosquitolamp/devices/{device_id}/state' + msg = subscribe.simple(topic, hostname='8.217.112.255', port=1883) + print("%s %s" % (msg.topic, msg.payload)) + + return Response({'code': 0, 'data': None, 'msg': 'success'})