Skip to content

Commit 277185c

Browse files
committed
Refactored mqtt toggle
1 parent b6a226a commit 277185c

File tree

4 files changed

+18
-5
lines changed

4 files changed

+18
-5
lines changed

iotserver/apps/device/admin.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88

99
def toggle_devices_on(modeladmin, request, queryset):
1010
for obj in queryset:
11-
obj.mqtt_toggle(1)
11+
obj.mqtt_toggle('on')
1212

1313
message = 'All selected device have been toggled on.'
1414
messages.add_message(request, level=messages.SUCCESS, message=message)
1515

1616

1717
def toggle_devices_off(modeladmin, request, queryset):
1818
for obj in queryset:
19-
obj.mqtt_toggle(0)
19+
obj.mqtt_toggle('off')
2020

2121
message = 'All selected device have been toggled off.'
2222
messages.add_message(request, level=messages.SUCCESS, message=message)

iotserver/apps/device/constants.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
DEVICE_TOGGLE_STATE = {
2+
'on': 1,
3+
'off': 0
4+
}

iotserver/apps/device/models.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from django.utils import timezone
1111
from django.utils.functional import cached_property
1212

13+
from iotserver.apps.device import constants
1314
from iotserver.apps.device.utils import mqtt, webrepl
1415

1516

@@ -86,8 +87,12 @@ def full_config(self):
8687
]
8788
return config
8889

89-
def mqtt_toggle(self, state: int):
90-
mqtt.toggle(self.id, str(state), settings.MQTT)
90+
@cached_property
91+
def last_status(self):
92+
return self.statuses.first()
93+
94+
def mqtt_toggle(self, state: str):
95+
mqtt.toggle(self.id, str(constants.DEVICE_TOGGLE_STATE[state]))
9196

9297

9398
class DevicePin(models.Model):

iotserver/apps/device/utils/mqtt.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
1+
from typing import Dict, Optional
2+
13
import paho.mqtt.subscribe as mqtt_subscribe
24
import paho.mqtt.publish as mqtt_publish
5+
from django.conf import settings
36

47

5-
def toggle(device_id, state, mqtt_settings):
8+
def toggle(device_id: str, state: int, mqtt_settings: Optional[Dict] = None) -> None:
69
"""
710
Toggle the device on/off via mqtt if the rule has been applied to one of it's
811
pins.
912
"""
1013
topic = f'iot-devices/{device_id}/toggle'
14+
mqtt_settings = mqtt_settings or settings.MQTT
1115

1216
# Switch to the new toggle state
1317
mqtt_publish.single(

0 commit comments

Comments
 (0)