add response for GetBinaryState
This commit is contained in:
parent
39e5f5fb89
commit
d3b8e23628
|
@ -201,6 +201,7 @@ class fauxmo(upnp_device):
|
|||
def __init__(self, name, listener, poller, ip_address, port, action_handler=None):
|
||||
self.serial = self.make_uuid(name)
|
||||
self.name = name
|
||||
self.state = 0
|
||||
self.ip_address = ip_address
|
||||
persistent_uuid = "Socket-1_0-" + self.serial
|
||||
other_headers = ['X-User-Agent: redsonic']
|
||||
|
@ -214,6 +215,12 @@ class fauxmo(upnp_device):
|
|||
def get_name(self):
|
||||
return self.name
|
||||
|
||||
def get_state(self):
|
||||
return self.state
|
||||
|
||||
def set_state(self, newstate):
|
||||
self.state = newstate
|
||||
|
||||
def handle_request(self, data, sender, socket):
|
||||
if data.find('GET /setup.xml HTTP/1.1') == 0:
|
||||
dbg("Responding to setup.xml for %s" % self.name)
|
||||
|
@ -237,6 +244,7 @@ class fauxmo(upnp_device):
|
|||
dbg("Responding to ON for %s" % self.name)
|
||||
try:
|
||||
success = self.action_handler.on()
|
||||
self.set_state(1)
|
||||
except Exception as e:
|
||||
dbg("WARNING: Failed to turn ON: %s" % str(e))
|
||||
elif data.find('<BinaryState>0</BinaryState>') != -1:
|
||||
|
@ -244,6 +252,7 @@ class fauxmo(upnp_device):
|
|||
dbg("Responding to OFF for %s" % self.name)
|
||||
try:
|
||||
success = self.action_handler.off()
|
||||
self.set_state(0)
|
||||
except Exception as e:
|
||||
dbg("WARNING: Failed to turn OFF: %s" % str(e))
|
||||
else:
|
||||
|
@ -265,6 +274,30 @@ class fauxmo(upnp_device):
|
|||
"\r\n"
|
||||
"%s" % (len(soap), date_str, soap))
|
||||
socket.send(message)
|
||||
elif data.find('SOAPACTION: "urn:Belkin:service:basicevent:1#GetBinaryState"') != -1:
|
||||
# The Alexa app will want a full soap message for this
|
||||
dbg("Responding to state request for %s. State is %s" % (self.name, str(self.get_state())))
|
||||
|
||||
soap = ('<s:Envelope "xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" ' +
|
||||
's:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body>' +
|
||||
'<u:GetBinaryStateResponse xmlns:u="urn:Belkin:service:basicevent:1">' +
|
||||
'<BinaryState>' + str(self.get_state()) + '</BinaryState>' +
|
||||
'<brightness>100</brightness>' +
|
||||
'<fader>300:-1:1:0:100</fader>' +
|
||||
'</u:GetBinaryStateResponse>' +
|
||||
'</s:Body> </s:Envelope>')
|
||||
date_str = email.utils.formatdate(timeval=None, localtime=False, usegmt=True)
|
||||
message = ("HTTP/1.1 200 OK\r\n"
|
||||
"CONTENT-LENGTH: %d\r\n"
|
||||
"CONTENT-TYPE: text/xml charset=\"utf-8\"\r\n"
|
||||
"DATE: %s\r\n"
|
||||
"EXT:\r\n"
|
||||
"SERVER: Unspecified, UPnP/1.0, Unspecified\r\n"
|
||||
"X-User-Agent: redsonic\r\n"
|
||||
"CONNECTION: close\r\n"
|
||||
"\r\n"
|
||||
"%s" % (len(soap), date_str, soap))
|
||||
socket.send(message)
|
||||
else:
|
||||
dbg(data)
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user