wemo plugin: switch finished.
This commit is contained in:
parent
b549b013b4
commit
7f26df1662
@ -140,9 +140,10 @@ QPair<DeviceManager::DeviceSetupStatus, QString> DevicePluginWemo::setupDevice(D
|
|||||||
wemoSwitch->setDeviceType(device->paramValue("device type").toString());
|
wemoSwitch->setDeviceType(device->paramValue("device type").toString());
|
||||||
|
|
||||||
connect(wemoSwitch,SIGNAL(stateChanged()),this,SLOT(wemoSwitchStateChanged()));
|
connect(wemoSwitch,SIGNAL(stateChanged()),this,SLOT(wemoSwitchStateChanged()));
|
||||||
|
connect(wemoSwitch,SIGNAL(setPowerFinished(bool,ActionId)),this,SLOT(setPowerFinished(bool,ActionId)));
|
||||||
|
|
||||||
m_wemoSwitches.insert(wemoSwitch,device);
|
m_wemoSwitches.insert(wemoSwitch,device);
|
||||||
|
wemoSwitch->refresh();
|
||||||
return reportDeviceSetup();
|
return reportDeviceSetup();
|
||||||
}
|
}
|
||||||
return reportDeviceSetup(DeviceManager::DeviceSetupStatusSuccess);
|
return reportDeviceSetup(DeviceManager::DeviceSetupStatusSuccess);
|
||||||
@ -155,7 +156,18 @@ DeviceManager::HardwareResources DevicePluginWemo::requiredHardware() const
|
|||||||
|
|
||||||
QPair<DeviceManager::DeviceError, QString> DevicePluginWemo::executeAction(Device *device, const Action &action)
|
QPair<DeviceManager::DeviceError, QString> DevicePluginWemo::executeAction(Device *device, const Action &action)
|
||||||
{
|
{
|
||||||
return report();
|
if(device->deviceClassId() == wemoSwitchDeviceClassId){
|
||||||
|
if(action.actionTypeId() == powerActionTypeId){
|
||||||
|
WemoSwitch *wemoSwitch = m_wemoSwitches.key(device);
|
||||||
|
wemoSwitch->setPower(action.param("power").value().toBool(),action.id());
|
||||||
|
|
||||||
|
return report(DeviceManager::DeviceErrorAsync);
|
||||||
|
}else{
|
||||||
|
return report(DeviceManager::DeviceErrorActionTypeNotFound);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return report(DeviceManager::DeviceErrorDeviceClassNotFound);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DevicePluginWemo::deviceRemoved(Device *device)
|
void DevicePluginWemo::deviceRemoved(Device *device)
|
||||||
@ -181,8 +193,8 @@ PluginId DevicePluginWemo::pluginId() const
|
|||||||
|
|
||||||
void DevicePluginWemo::guhTimer()
|
void DevicePluginWemo::guhTimer()
|
||||||
{
|
{
|
||||||
foreach (WemoSwitch* device, m_wemoSwitches.keys()) {
|
foreach (WemoSwitch* wemoSwitch, m_wemoSwitches.keys()) {
|
||||||
device->refresh();
|
wemoSwitch->refresh();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,9 +222,21 @@ void DevicePluginWemo::discoveryDone(QList<WemoSwitch *> deviceList)
|
|||||||
|
|
||||||
void DevicePluginWemo::wemoSwitchStateChanged()
|
void DevicePluginWemo::wemoSwitchStateChanged()
|
||||||
{
|
{
|
||||||
|
WemoSwitch *wemoSwitch = static_cast<WemoSwitch*>(sender());
|
||||||
|
|
||||||
|
if(m_wemoSwitches.contains(wemoSwitch)){
|
||||||
|
Device * device = m_wemoSwitches.value(wemoSwitch);
|
||||||
|
device->setStateValue(powerStateTypeId, wemoSwitch->powerState());
|
||||||
|
device->setStateValue(reachableStateTypeId, wemoSwitch->reachabel());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DevicePluginWemo::setPowerFinished(const bool &succeeded, const ActionId &actionId)
|
||||||
|
{
|
||||||
|
if(succeeded){
|
||||||
|
emit actionExecutionFinished(actionId,DeviceManager::DeviceErrorNoError,QString());
|
||||||
|
}else{
|
||||||
|
emit actionExecutionFinished(actionId,DeviceManager::DeviceErrorDeviceNotFound,QString("Action could not be executed."));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -53,6 +53,9 @@ public:
|
|||||||
private slots:
|
private slots:
|
||||||
void discoveryDone(QList<WemoSwitch *> deviceList);
|
void discoveryDone(QList<WemoSwitch *> deviceList);
|
||||||
void wemoSwitchStateChanged();
|
void wemoSwitchStateChanged();
|
||||||
|
void setPowerFinished(const bool &succeeded, const ActionId &actionId);
|
||||||
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -131,6 +131,11 @@ bool WemoSwitch::powerState()
|
|||||||
return m_powerState;
|
return m_powerState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool WemoSwitch::reachabel()
|
||||||
|
{
|
||||||
|
return m_reachabel;
|
||||||
|
}
|
||||||
|
|
||||||
void WemoSwitch::replyFinished(QNetworkReply *reply)
|
void WemoSwitch::replyFinished(QNetworkReply *reply)
|
||||||
{
|
{
|
||||||
if(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() != 200){
|
if(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() != 200){
|
||||||
@ -141,17 +146,27 @@ void WemoSwitch::replyFinished(QNetworkReply *reply)
|
|||||||
m_reachabel = true;
|
m_reachabel = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if this is the answerer to a refresh request
|
||||||
if(reply == m_refrashReplay){
|
if(reply == m_refrashReplay){
|
||||||
QByteArray data = reply->readAll();
|
QByteArray data = reply->readAll();
|
||||||
if(data.contains("<BinaryState>0</BinaryState>")){
|
if(data.contains("<BinaryState>0</BinaryState>")){
|
||||||
qDebug() << "switch is off";
|
|
||||||
m_powerState = false;
|
m_powerState = false;
|
||||||
}
|
}
|
||||||
if(data.contains("<BinaryState>1</BinaryState>")){
|
if(data.contains("<BinaryState>1</BinaryState>")){
|
||||||
qDebug() << "switch is on";
|
|
||||||
m_powerState = true;
|
m_powerState = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// if this is the answerer to a "set power" request
|
||||||
|
if(reply == m_setPowerReplay){
|
||||||
|
QByteArray data = reply->readAll();
|
||||||
|
if(data.contains("<BinaryState>1</BinaryState>") || data.contains("<BinaryState>0</BinaryState>")){
|
||||||
|
emit setPowerFinished(true,m_actionId);
|
||||||
|
}else{
|
||||||
|
emit setPowerFinished(false,m_actionId);
|
||||||
|
}
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
|
||||||
emit stateChanged();
|
emit stateChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,13 +187,17 @@ void WemoSwitch::setPower(const bool &power, const ActionId &actionId)
|
|||||||
{
|
{
|
||||||
m_actionId = actionId;
|
m_actionId = actionId;
|
||||||
|
|
||||||
|
if(m_powerState == power){
|
||||||
|
emit setPowerFinished(true,actionId);
|
||||||
|
}
|
||||||
|
|
||||||
QByteArray setPowerMessage("<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:SetBinaryState xmlns:u=\"urn:Belkin:service:basicevent:1\"><BinaryState>" + QByteArray::number((int)power) + "</BinaryState></u:SetBinaryState></s:Body></s:Envelope>");
|
QByteArray setPowerMessage("<?xml version=\"1.0\" encoding=\"utf-8\"?><s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><s:Body><u:SetBinaryState xmlns:u=\"urn:Belkin:service:basicevent:1\"><BinaryState>" + QByteArray::number((int)power) + "</BinaryState></u:SetBinaryState></s:Body></s:Envelope>");
|
||||||
|
|
||||||
QNetworkRequest request;
|
QNetworkRequest request;
|
||||||
request.setUrl(QUrl("http://" + m_hostAddress.toString() + ":" + QString::number(m_port) + "/upnp/control/basicevent1"));
|
request.setUrl(QUrl("http://" + m_hostAddress.toString() + ":" + QString::number(m_port) + "/upnp/control/basicevent1"));
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("text/xml; charset=\"utf-8\""));
|
request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("text/xml; charset=\"utf-8\""));
|
||||||
request.setHeader(QNetworkRequest::UserAgentHeader,QVariant("guh"));
|
request.setHeader(QNetworkRequest::UserAgentHeader,QVariant("guh"));
|
||||||
request.setRawHeader("SOAPACTION", "\"urn:Belkin:service:basicevent:1#GetBinaryState\"");
|
request.setRawHeader("SOAPACTION", "\"urn:Belkin:service:basicevent:1#SetBinaryState\"");
|
||||||
|
|
||||||
m_refrashReplay = m_manager->post(request,setPowerMessage);
|
m_setPowerReplay = m_manager->post(request,setPowerMessage);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user