Skip to content

Instantly share code, notes, and snippets.

@tylermenezes
Created September 25, 2017 06:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tylermenezes/344b21e77d4a23343c8c702616cbfc54 to your computer and use it in GitHub Desktop.
Save tylermenezes/344b21e77d4a23343c8c702616cbfc54 to your computer and use it in GitHub Desktop.
ESP8266 Curtain Controller for Home Assistant
import voluptuous as vol
from homeassistant.components.switch import (SwitchDevice, PLATFORM_SCHEMA)
from homeassistant.const import (
STATE_ON, STATE_OFF, STATE_UNKNOWN, CONF_NAME, CONF_FILENAME)
import homeassistant.helpers.config_validation as cv
import struct
import socket
DOMAIN = 'esp8266_curtains'
DEFAULT_NAME = 'Curtains'
ICON = 'mdi:switch'
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required('ip'): cv.string,
vol.Optional('port', default=7788): cv.positive_int
})
def setup_platform(hass, config, add_devices, discovery_info=None):
add_devices([Esp8266Curtain(config.get('ip'), config.get('port'))])
class Esp8266Curtain(SwitchDevice):
def __init__(self, ip, port):
self.ip = ip
self.port = port
self._state = False
@property
def available(self):
return True
@property
def name(self):
return "ESP8266 Curtains"
@property
def is_on(self):
return self._state
@property
def state_attributes(self):
return False
def _send(self, command):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(5)
s.connect((self.ip, self.port))
s.send(command.encode())
s.close()
def update(self):
pass
def turn_on(self):
if self._state == False:
self._send("open")
self._state = True
def turn_off(self):
if self._state == True:
self._send("close")
self._state = False
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment