Skip to content

Commit

Permalink
- add doorlock open class
Browse files Browse the repository at this point in the history
  • Loading branch information
YOGYUI committed Mar 30, 2022
1 parent 5806132 commit 0f6cc1d
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 0 deletions.
71 changes: 71 additions & 0 deletions IPark-Gwanggyo/Include/Door.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import time
import json
import threading
from typing import Union
from Device import Device
import RPi.GPIO as GPIO
from Common import Callback, writeLog


class ThreadOpen(threading.Thread):
def __init__(self, gpio_port: int, repeat: int, interval_ms: int):
threading.Thread.__init__(self)
self.gpio_port = gpio_port
self.repeat = repeat
self.interval_ms = interval_ms
self.sig_terminated = Callback()

def run(self):
writeLog('Started', self)
for i in range(self.repeat):
GPIO.output(self.gpio_port, GPIO.HIGH)
time.sleep(self.interval_ms / 1000)
GPIO.output(self.gpio_port, GPIO.LOW)
time.sleep(self.interval_ms / 1000)
writeLog('Terminated', self)
self.sig_terminated.emit()


class Door(Device):
gpio_port: int
thread_open: Union[ThreadOpen, None] = None

def __init__(self, name: str = 'Door', **kwargs):
super().__init__(name, **kwargs)
# TODO: parameterize
self.gpio_port = 23
self.repeat = 2
self.interval_ms = 200
self.mqtt_publish_topic = 'home/ipark/door/state'
self.mqtt_subscribe_topics.append('home/ipark/door/command')

GPIO.setmode(GPIO.BCM)
GPIO.setup(self.gpio_port, GPIO.IN, GPIO.PUD_DOWN) # GPIO IN, Pull Down 설정

def startThreadOpen(self):
if self.thread_open is None:
GPIO.setup(self.gpio_port, GPIO.OUT)
GPIO.output(self.gpio_port, GPIO.LOW)
self.thread_open = ThreadOpen(self.gpio_port, self.repeat, self.interval_ms)
self.thread_open.sig_terminated.connect(self.onThreadOpenTerminated)
self.thread_open.start()
else:
writeLog('Thread is still working', self)

def onThreadOpenTerminated(self):
del self.thread_open
self.thread_open = None
self.publish_mqtt()
GPIO.setup(self.gpio_port, GPIO.IN, GPIO.PUD_DOWN) # GPIO IN, Pull Down 설정

def open(self):
self.startThreadOpen()

def publish_mqtt(self):
obj = {"state": int(self.state == 1)}
self.mqtt_client.publish(self.mqtt_publish_topic, json.dumps(obj), 1)

def __repr__(self):
repr_txt = f'<{self.name}({self.__class__.__name__} at {hex(id(self))})'
repr_txt += '>'
return repr_txt
7 changes: 7 additions & 0 deletions IPark-Gwanggyo/Include/Home.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class Home:
ventilator: Ventilator
elevator: Elevator
airquality: AirqualitySensor
door: Door

serial_baud: int = 9600
serial_485_energy_port: str = ''
Expand Down Expand Up @@ -124,6 +125,7 @@ def initialize(self, init_service: bool, serial_conn: bool):
self.elevator.sig_call_up.connect(self.callElevatorUp)
self.elevator.sig_call_down.connect(self.callElevatorDown)
self.airquality = AirqualitySensor(mqtt_client=self.mqtt_client)
self.door = Door(name='Door', mqtt_client=self.mqtt_client)

# append device list
for room in self.rooms:
Expand All @@ -132,6 +134,7 @@ def initialize(self, init_service: bool, serial_conn: bool):
self.device_list.append(self.ventilator)
self.device_list.append(self.elevator)
self.device_list.append(self.airquality)
self.device_list.append(self.door)

self.loadConfig(xml_path)

Expand Down Expand Up @@ -712,6 +715,10 @@ def onMqttClientMessage(self, _, userdata, message):
category='state',
target=msg_dict['state']
)
if 'door/command' in topic:
# do not use command queue becase door module handles only gpio
if msg_dict['state'] == 1:
self.door.open()

def onMqttClientLog(self, _, userdata, level, buf):
if self.enable_mqtt_console_log:
Expand Down
1 change: 1 addition & 0 deletions IPark-Gwanggyo/Include/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from Outlet import Outlet
from AirqualitySensor import AirqualitySensor
from Room import Room
from Door import Door
from ThreadCommand import ThreadCommand
from ThreadMonitoring import ThreadMonitoring
from Home import Home, get_home

0 comments on commit 0f6cc1d

Please sign in to comment.