mirror of
https://github.com/rstrouse/ESPSomfy-RTS.git
synced 2025-12-12 18:42:10 +01:00
Add support for 1 button gates #388
This commit is contained in:
parent
c528fda55a
commit
2b59f330a9
10 changed files with 83 additions and 22 deletions
|
|
@ -3,7 +3,7 @@
|
||||||
#ifndef configsettings_h
|
#ifndef configsettings_h
|
||||||
#define configsettings_h
|
#define configsettings_h
|
||||||
#include "WResp.h"
|
#include "WResp.h"
|
||||||
#define FW_VERSION "v2.4.4"
|
#define FW_VERSION "v2.4.5"
|
||||||
enum class conn_types_t : byte {
|
enum class conn_types_t : byte {
|
||||||
unset = 0x00,
|
unset = 0x00,
|
||||||
wifi = 0x01,
|
wifi = 0x01,
|
||||||
|
|
|
||||||
43
Somfy.cpp
43
Somfy.cpp
|
|
@ -992,7 +992,7 @@ void SomfyShade::triggerGPIOs(somfy_frame_t &frame) {
|
||||||
int8_t dir = 0;
|
int8_t dir = 0;
|
||||||
switch(frame.cmd) {
|
switch(frame.cmd) {
|
||||||
case somfy_commands::My:
|
case somfy_commands::My:
|
||||||
if(this->shadeType != shade_types::drycontact && this->shadeType != shade_types::garage1) {
|
if(this->shadeType != shade_types::drycontact && !this->isToggle()) {
|
||||||
digitalWrite(this->gpioUp, p_off);
|
digitalWrite(this->gpioUp, p_off);
|
||||||
digitalWrite(this->gpioDown, p_off);
|
digitalWrite(this->gpioDown, p_off);
|
||||||
digitalWrite(this->gpioMy, p_on);
|
digitalWrite(this->gpioMy, p_on);
|
||||||
|
|
@ -1001,7 +1001,7 @@ void SomfyShade::triggerGPIOs(somfy_frame_t &frame) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case somfy_commands::Up:
|
case somfy_commands::Up:
|
||||||
if(this->shadeType != shade_types::drycontact && this->shadeType != shade_types::garage1 && this->shadeType != shade_types::drycontact2) {
|
if(this->shadeType != shade_types::drycontact && !this->isToggle() && this->shadeType != shade_types::drycontact2) {
|
||||||
digitalWrite(this->gpioMy, p_off);
|
digitalWrite(this->gpioMy, p_off);
|
||||||
digitalWrite(this->gpioDown, p_off);
|
digitalWrite(this->gpioDown, p_off);
|
||||||
digitalWrite(this->gpioUp, p_on);
|
digitalWrite(this->gpioUp, p_on);
|
||||||
|
|
@ -1011,7 +1011,7 @@ void SomfyShade::triggerGPIOs(somfy_frame_t &frame) {
|
||||||
break;
|
break;
|
||||||
case somfy_commands::Toggle:
|
case somfy_commands::Toggle:
|
||||||
case somfy_commands::Down:
|
case somfy_commands::Down:
|
||||||
if(this->shadeType != shade_types::drycontact && this->shadeType != shade_types::garage1 && this->shadeType != shade_types::drycontact2) {
|
if(this->shadeType != shade_types::drycontact && !this->isToggle() && this->shadeType != shade_types::drycontact2) {
|
||||||
digitalWrite(this->gpioMy, p_off);
|
digitalWrite(this->gpioMy, p_off);
|
||||||
digitalWrite(this->gpioUp, p_off);
|
digitalWrite(this->gpioUp, p_off);
|
||||||
}
|
}
|
||||||
|
|
@ -1020,7 +1020,7 @@ void SomfyShade::triggerGPIOs(somfy_frame_t &frame) {
|
||||||
Serial.printf("UP: false, DOWN: true, MY: false\n");
|
Serial.printf("UP: false, DOWN: true, MY: false\n");
|
||||||
break;
|
break;
|
||||||
case somfy_commands::MyUp:
|
case somfy_commands::MyUp:
|
||||||
if(this->shadeType != shade_types::drycontact && this->shadeType != shade_types::garage1 && this->shadeType != shade_types::drycontact2) {
|
if(this->shadeType != shade_types::drycontact && !this->isToggle() && this->shadeType != shade_types::drycontact2) {
|
||||||
digitalWrite(this->gpioDown, p_off);
|
digitalWrite(this->gpioDown, p_off);
|
||||||
digitalWrite(this->gpioMy, p_on);
|
digitalWrite(this->gpioMy, p_on);
|
||||||
digitalWrite(this->gpioUp, p_on);
|
digitalWrite(this->gpioUp, p_on);
|
||||||
|
|
@ -1028,7 +1028,7 @@ void SomfyShade::triggerGPIOs(somfy_frame_t &frame) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case somfy_commands::MyDown:
|
case somfy_commands::MyDown:
|
||||||
if(this->shadeType != shade_types::drycontact && this->shadeType != shade_types::garage1 && this->shadeType != shade_types::drycontact2) {
|
if(this->shadeType != shade_types::drycontact && !this->isToggle() && this->shadeType != shade_types::drycontact2) {
|
||||||
digitalWrite(this->gpioUp, p_off);
|
digitalWrite(this->gpioUp, p_off);
|
||||||
digitalWrite(this->gpioMy, p_on);
|
digitalWrite(this->gpioMy, p_on);
|
||||||
digitalWrite(this->gpioDown, p_on);
|
digitalWrite(this->gpioDown, p_on);
|
||||||
|
|
@ -1036,7 +1036,7 @@ void SomfyShade::triggerGPIOs(somfy_frame_t &frame) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case somfy_commands::MyUpDown:
|
case somfy_commands::MyUpDown:
|
||||||
if(this->shadeType != shade_types::drycontact && this->shadeType != shade_types::garage1 && this->shadeType != shade_types::drycontact2) {
|
if(this->shadeType != shade_types::drycontact && this->isToggle() && this->shadeType != shade_types::drycontact2) {
|
||||||
digitalWrite(this->gpioUp, p_on);
|
digitalWrite(this->gpioUp, p_on);
|
||||||
digitalWrite(this->gpioMy, p_on);
|
digitalWrite(this->gpioMy, p_on);
|
||||||
digitalWrite(this->gpioDown, p_on);
|
digitalWrite(this->gpioDown, p_on);
|
||||||
|
|
@ -1504,6 +1504,9 @@ void SomfyShade::publishDisco() {
|
||||||
case shade_types::lgate:
|
case shade_types::lgate:
|
||||||
case shade_types::cgate:
|
case shade_types::cgate:
|
||||||
case shade_types::rgate:
|
case shade_types::rgate:
|
||||||
|
case shade_types::lgate1:
|
||||||
|
case shade_types::cgate1:
|
||||||
|
case shade_types::rgate1:
|
||||||
case shade_types::ldrapery:
|
case shade_types::ldrapery:
|
||||||
case shade_types::rdrapery:
|
case shade_types::rdrapery:
|
||||||
case shade_types::cdrapery:
|
case shade_types::cdrapery:
|
||||||
|
|
@ -2392,7 +2395,7 @@ void SomfyShade::processFrame(somfy_frame_t &frame, bool internal) {
|
||||||
break;
|
break;
|
||||||
case somfy_commands::My:
|
case somfy_commands::My:
|
||||||
if(this->shadeType == shade_types::drycontact2) return;
|
if(this->shadeType == shade_types::drycontact2) return;
|
||||||
if(this->shadeType == shade_types::garage1) {
|
if(this->isToggle()) { // This is a one button device
|
||||||
if(this->lastFrame.processed) return;
|
if(this->lastFrame.processed) return;
|
||||||
this->lastFrame.processed = true;
|
this->lastFrame.processed = true;
|
||||||
if(!this->isIdle()) this->p_target(this->currentPos);
|
if(!this->isIdle()) this->p_target(this->currentPos);
|
||||||
|
|
@ -2925,7 +2928,7 @@ void SomfyShade::sendCommand(somfy_commands cmd, uint8_t repeat, uint8_t stepSiz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(cmd == somfy_commands::My) {
|
else if(cmd == somfy_commands::My) {
|
||||||
if(this->shadeType == shade_types::garage1 || this->shadeType == shade_types::drycontact)
|
if(this->isToggle() || this->shadeType == shade_types::drycontact)
|
||||||
SomfyRemote::sendCommand(cmd, repeat);
|
SomfyRemote::sendCommand(cmd, repeat);
|
||||||
else if(this->shadeType == shade_types::drycontact2) return;
|
else if(this->shadeType == shade_types::drycontact2) return;
|
||||||
else if(this->isIdle()) {
|
else if(this->isIdle()) {
|
||||||
|
|
@ -2942,7 +2945,7 @@ void SomfyShade::sendCommand(somfy_commands cmd, uint8_t repeat, uint8_t stepSiz
|
||||||
if(this->bitLength != 80) SomfyRemote::sendCommand(somfy_commands::My, repeat, stepSize);
|
if(this->bitLength != 80) SomfyRemote::sendCommand(somfy_commands::My, repeat, stepSize);
|
||||||
else SomfyRemote::sendCommand(somfy_commands::Toggle, repeat);
|
else SomfyRemote::sendCommand(somfy_commands::Toggle, repeat);
|
||||||
}
|
}
|
||||||
else if(this->shadeType == shade_types::garage1 && cmd == somfy_commands::Prog) {
|
else if(this->isToggle() && cmd == somfy_commands::Prog) {
|
||||||
SomfyRemote::sendCommand(somfy_commands::Toggle, repeat, stepSize);
|
SomfyRemote::sendCommand(somfy_commands::Toggle, repeat, stepSize);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -3024,8 +3027,8 @@ void SomfyShade::moveToTiltTarget(float target) {
|
||||||
}
|
}
|
||||||
void SomfyShade::moveToTarget(float pos, float tilt) {
|
void SomfyShade::moveToTarget(float pos, float tilt) {
|
||||||
somfy_commands cmd = somfy_commands::My;
|
somfy_commands cmd = somfy_commands::My;
|
||||||
if(this->shadeType == shade_types::garage1) {
|
if(this->isToggle()) {
|
||||||
// Overload this as we cannot seek a position on a garage door.
|
// Overload this as we cannot seek a position on a garage door or single button device.
|
||||||
this->p_target(pos);
|
this->p_target(pos);
|
||||||
this->p_currentPos(pos);
|
this->p_currentPos(pos);
|
||||||
this->emitState();
|
this->emitState();
|
||||||
|
|
@ -3107,12 +3110,24 @@ bool SomfyShade::save() {
|
||||||
}
|
}
|
||||||
bool SomfyRoom::save() { somfy.commit(); return true; }
|
bool SomfyRoom::save() { somfy.commit(); return true; }
|
||||||
bool SomfyGroup::save() { somfy.commit(); return true; }
|
bool SomfyGroup::save() { somfy.commit(); return true; }
|
||||||
|
bool SomfyShade::isToggle() {
|
||||||
|
switch(this->shadeType) {
|
||||||
|
case shade_types::garage1:
|
||||||
|
case shade_types::lgate1:
|
||||||
|
case shade_types::cgate1:
|
||||||
|
case shade_types::rgate1:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
bool SomfyShade::usesPin(uint8_t pin) {
|
bool SomfyShade::usesPin(uint8_t pin) {
|
||||||
if(this->proto != radio_proto::GP_Remote && this->proto != radio_proto::GP_Relay) return false;
|
if(this->proto != radio_proto::GP_Remote && this->proto != radio_proto::GP_Relay) return false;
|
||||||
if(this->gpioDown == pin) return true;
|
if(this->gpioDown == pin) return true;
|
||||||
else if(this->shadeType == shade_types::drycontact)
|
else if(this->shadeType == shade_types::drycontact)
|
||||||
return this->gpioDown == pin;
|
return this->gpioDown == pin;
|
||||||
else if(this->shadeType == shade_types::garage1) {
|
else if(this->isToggle()) {
|
||||||
if(this->proto == radio_proto::GP_Relay && this->gpioUp == pin) return true;
|
if(this->proto == radio_proto::GP_Relay && this->gpioUp == pin) return true;
|
||||||
}
|
}
|
||||||
else if(this->shadeType == shade_types::drycontact2) {
|
else if(this->shadeType == shade_types::drycontact2) {
|
||||||
|
|
@ -3164,7 +3179,9 @@ int8_t SomfyShade::validateJSON(JsonObject &obj) {
|
||||||
uint8_t upPin = obj.containsKey("gpioUp") ? obj["gpioUp"].as<uint8_t>() : this->gpioUp;
|
uint8_t upPin = obj.containsKey("gpioUp") ? obj["gpioUp"].as<uint8_t>() : this->gpioUp;
|
||||||
uint8_t downPin = obj.containsKey("gpioDown") ? obj["gpioDown"].as<uint8_t>() : this->gpioDown;
|
uint8_t downPin = obj.containsKey("gpioDown") ? obj["gpioDown"].as<uint8_t>() : this->gpioDown;
|
||||||
uint8_t myPin = obj.containsKey("gpioMy") ? obj["gpioMy"].as<uint8_t>() : this->gpioMy;
|
uint8_t myPin = obj.containsKey("gpioMy") ? obj["gpioMy"].as<uint8_t>() : this->gpioMy;
|
||||||
if(type == shade_types::drycontact || (type == shade_types::garage1 && proto == radio_proto::GP_Remote)) upPin = myPin = 255;
|
if(type == shade_types::drycontact ||
|
||||||
|
((type == shade_types::garage1 || type == shade_types::lgate1 || type == shade_types::cgate1 || type == shade_types::rgate1)
|
||||||
|
&& proto == radio_proto::GP_Remote)) upPin = myPin = 255;
|
||||||
else if(type == shade_types::drycontact2) myPin = 255;
|
else if(type == shade_types::drycontact2) myPin = 255;
|
||||||
if(proto == radio_proto::GP_Relay) myPin = 255;
|
if(proto == radio_proto::GP_Relay) myPin = 255;
|
||||||
if(somfy.transceiver.config.enabled) {
|
if(somfy.transceiver.config.enabled) {
|
||||||
|
|
|
||||||
6
Somfy.h
6
Somfy.h
|
|
@ -67,7 +67,10 @@ enum class shade_types : byte {
|
||||||
drycontact2 = 0x0A,
|
drycontact2 = 0x0A,
|
||||||
lgate = 0x0B,
|
lgate = 0x0B,
|
||||||
cgate = 0x0C,
|
cgate = 0x0C,
|
||||||
rgate = 0x0D
|
rgate = 0x0D,
|
||||||
|
lgate1 = 0x0E,
|
||||||
|
cgate1 = 0x0F,
|
||||||
|
rgate1 = 0x10
|
||||||
};
|
};
|
||||||
enum class tilt_types : byte {
|
enum class tilt_types : byte {
|
||||||
none = 0x00,
|
none = 0x00,
|
||||||
|
|
@ -322,6 +325,7 @@ class SomfyShade : public SomfyRemote {
|
||||||
void setMovement(int8_t dir);
|
void setMovement(int8_t dir);
|
||||||
void setTarget(float target);
|
void setTarget(float target);
|
||||||
bool isAtTarget();
|
bool isAtTarget();
|
||||||
|
bool isToggle();
|
||||||
void moveToTarget(float pos, float tilt = -1.0f);
|
void moveToTarget(float pos, float tilt = -1.0f);
|
||||||
void moveToTiltTarget(float target);
|
void moveToTiltTarget(float target);
|
||||||
void sendTiltCommand(somfy_commands cmd);
|
void sendTiltCommand(somfy_commands cmd);
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1 +1 @@
|
||||||
2.4.4
|
2.4.5
|
||||||
|
|
@ -8,9 +8,9 @@
|
||||||
<meta name="apple-mobile-web-app-title" content="ESPSomfy RTS App">
|
<meta name="apple-mobile-web-app-title" content="ESPSomfy RTS App">
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
|
|
||||||
<link rel="stylesheet" href="main.css?v=2.4.4c" type="text/css" />
|
<link rel="stylesheet" href="main.css?v=2.4.5c" type="text/css" />
|
||||||
<link rel="stylesheet" href="widgets.css?v=2.4.4c" type="text/css" />
|
<link rel="stylesheet" href="widgets.css?v=2.4.5c" type="text/css" />
|
||||||
<link rel="stylesheet" href="icons.css?v=2.4.4c" type="text/css" />
|
<link rel="stylesheet" href="icons.css?v=2.4.5c" type="text/css" />
|
||||||
<link rel="icon" type="image/png" href="favicon.png" />
|
<link rel="icon" type="image/png" href="favicon.png" />
|
||||||
|
|
||||||
<!-- iPad retina icon -->
|
<!-- iPad retina icon -->
|
||||||
|
|
@ -114,7 +114,7 @@
|
||||||
rel="apple-touch-startup-image">
|
rel="apple-touch-startup-image">
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript" src="index.js?v=2.4.4c"></script>
|
<script type="text/javascript" src="index.js?v=2.4.5c"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="divContainer" class="container main" data-auth="false">
|
<div id="divContainer" class="container main" data-auth="false">
|
||||||
|
|
@ -517,6 +517,10 @@
|
||||||
<option value="11">Gate (left)</option>
|
<option value="11">Gate (left)</option>
|
||||||
<option value="12">Gate (center)</option>
|
<option value="12">Gate (center)</option>
|
||||||
<option value="13">Gate (right)</option>
|
<option value="13">Gate (right)</option>
|
||||||
|
<option value="14">Gate (1-button left)</option>
|
||||||
|
<option value="15">Gate (1-button center)</option>
|
||||||
|
<option value="16">Gate (1-button right)</option>
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
<label for="selShadeType">Type</label>
|
<label for="selShadeType">Type</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1270,7 +1270,7 @@ var security = new Security();
|
||||||
|
|
||||||
class General {
|
class General {
|
||||||
initialized = false;
|
initialized = false;
|
||||||
appVersion = 'v2.4.4';
|
appVersion = 'v2.4.5';
|
||||||
reloadApp = false;
|
reloadApp = false;
|
||||||
init() {
|
init() {
|
||||||
if (this.initialized) return;
|
if (this.initialized) return;
|
||||||
|
|
@ -1926,6 +1926,9 @@ class Somfy {
|
||||||
{ type: 11, name: 'Gate (left)', ico: 'icss-lgate', lift: true, fcmd: true, fpos: true },
|
{ type: 11, name: 'Gate (left)', ico: 'icss-lgate', lift: true, fcmd: true, fpos: true },
|
||||||
{ type: 12, name: 'Gate (center)', ico: 'icss-cgate', lift: true, fcmd: true, fpos: true },
|
{ type: 12, name: 'Gate (center)', ico: 'icss-cgate', lift: true, fcmd: true, fpos: true },
|
||||||
{ type: 13, name: 'Gate (right)', ico: 'icss-rgate', lift: true, fcmd: true, fpos: true },
|
{ type: 13, name: 'Gate (right)', ico: 'icss-rgate', lift: true, fcmd: true, fpos: true },
|
||||||
|
{ type: 14, name: 'Gate (1-button left)', ico: 'icss-lgate', lift: true, fcmd: true, fpos: true },
|
||||||
|
{ type: 15, name: 'Gate (1-button center)', ico: 'icss-cgate', lift: true, fcmd: true, fpos: true },
|
||||||
|
{ type: 16, name: 'Gate (1-button right)', ico: 'icss-rgate', lift: true, fcmd: true, fpos: true },
|
||||||
];
|
];
|
||||||
init() {
|
init() {
|
||||||
if (this.initialized) return;
|
if (this.initialized) return;
|
||||||
|
|
@ -3246,6 +3249,9 @@ class Somfy {
|
||||||
if (obj.proto === 8 || obj.proto === 9) {
|
if (obj.proto === 8 || obj.proto === 9) {
|
||||||
switch (obj.shadeType) {
|
switch (obj.shadeType) {
|
||||||
case 5: // Garage 1-button
|
case 5: // Garage 1-button
|
||||||
|
case 14: // Gate left 1-button
|
||||||
|
case 15: // Gate center 1-button
|
||||||
|
case 16: // Gate right 1-button
|
||||||
case 10: // Two button dry contact
|
case 10: // Two button dry contact
|
||||||
if (obj.proto !== 9 && obj.gpioUp === obj.gpioDown) {
|
if (obj.proto !== 9 && obj.gpioUp === obj.gpioDown) {
|
||||||
ui.errorMessage(document.getElementById('divSomfySettings'), 'For GPIO controlled motors the up and down GPIO selections must be unique.');
|
ui.errorMessage(document.getElementById('divSomfySettings'), 'For GPIO controlled motors the up and down GPIO selections must be unique.');
|
||||||
|
|
@ -4140,6 +4146,9 @@ class Somfy {
|
||||||
case 5:
|
case 5:
|
||||||
case 9:
|
case 9:
|
||||||
case 10:
|
case 10:
|
||||||
|
case 14:
|
||||||
|
case 15:
|
||||||
|
case 16:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let tiltType = parseInt(shade.getAttribute('data-tilt'), 10) || 0;
|
let tiltType = parseInt(shade.getAttribute('data-tilt'), 10) || 0;
|
||||||
|
|
|
||||||
|
|
@ -150,6 +150,9 @@
|
||||||
.shadectl-buttons div.button-outline {
|
.shadectl-buttons div.button-outline {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
.shadectl-buttons[data-shadetype="14"] > .cmd-button[data-cmd="sunflag"],
|
||||||
|
.shadectl-buttons[data-shadetype="15"] > .cmd-button[data-cmd="sunflag"],
|
||||||
|
.shadectl-buttons[data-shadetype="16"] > .cmd-button[data-cmd="sunflag"],
|
||||||
.shadectl-buttons[data-shadetype="6"] > .cmd-button[data-cmd="sunflag"],
|
.shadectl-buttons[data-shadetype="6"] > .cmd-button[data-cmd="sunflag"],
|
||||||
.shadectl-buttons[data-shadetype="5"] > .cmd-button[data-cmd="sunflag"],
|
.shadectl-buttons[data-shadetype="5"] > .cmd-button[data-cmd="sunflag"],
|
||||||
.shadectl-buttons[data-shadetype="9"] > .cmd-button[data-cmd="sunflag"],
|
.shadectl-buttons[data-shadetype="9"] > .cmd-button[data-cmd="sunflag"],
|
||||||
|
|
@ -159,6 +162,15 @@
|
||||||
.shadectl-buttons[data-shadetype="5"] > .button-outline[data-cmd="my"],
|
.shadectl-buttons[data-shadetype="5"] > .button-outline[data-cmd="my"],
|
||||||
.shadectl-buttons[data-shadetype="5"] > .button-outline[data-cmd="up"],
|
.shadectl-buttons[data-shadetype="5"] > .button-outline[data-cmd="up"],
|
||||||
.shadectl-buttons[data-shadetype="5"] > .button-outline[data-cmd="down"],
|
.shadectl-buttons[data-shadetype="5"] > .button-outline[data-cmd="down"],
|
||||||
|
.shadectl-buttons[data-shadetype="14"] > .button-outline[data-cmd="my"],
|
||||||
|
.shadectl-buttons[data-shadetype="14"] > .button-outline[data-cmd="up"],
|
||||||
|
.shadectl-buttons[data-shadetype="14"] > .button-outline[data-cmd="down"],
|
||||||
|
.shadectl-buttons[data-shadetype="15"] > .button-outline[data-cmd="my"],
|
||||||
|
.shadectl-buttons[data-shadetype="15"] > .button-outline[data-cmd="up"],
|
||||||
|
.shadectl-buttons[data-shadetype="15"] > .button-outline[data-cmd="down"],
|
||||||
|
.shadectl-buttons[data-shadetype="16"] > .button-outline[data-cmd="my"],
|
||||||
|
.shadectl-buttons[data-shadetype="16"] > .button-outline[data-cmd="up"],
|
||||||
|
.shadectl-buttons[data-shadetype="16"] > .button-outline[data-cmd="down"],
|
||||||
.shadectl-buttons[data-shadetype="10"] > .button-outline[data-cmd="my"] {
|
.shadectl-buttons[data-shadetype="10"] > .button-outline[data-cmd="my"] {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
@ -174,10 +186,13 @@
|
||||||
.shadectl-buttons[data-shadetype="10"] > .button-outline[data-cmd="down"] i {
|
.shadectl-buttons[data-shadetype="10"] > .button-outline[data-cmd="down"] i {
|
||||||
top:.3em;
|
top:.3em;
|
||||||
}
|
}
|
||||||
.shadectl-buttons:not([data-shadetype="5"]):not([data-shadetype="9"]) > .button-outline[data-cmd="toggle"] {
|
.shadectl-buttons:not([data-shadetype="5"]):not([data-shadetype="9"]):not([data-shadetype="14"]):not([data-shadetype="15"]):not([data-shadetype="16"]) > .button-outline[data-cmd="toggle"] {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.somfyShadeCtl[data-shadetype="5"] .shadectl-mypos,
|
.somfyShadeCtl[data-shadetype="5"] .shadectl-mypos,
|
||||||
|
.somfyShadeCtl[data-shadetype="14"] .shadectl-mypos,
|
||||||
|
.somfyShadeCtl[data-shadetype="15"] .shadectl-mypos,
|
||||||
|
.somfyShadeCtl[data-shadetype="16"] .shadectl-mypos,
|
||||||
.somfyShadeCtl[data-shadetype="9"] .shadectl-mypos,
|
.somfyShadeCtl[data-shadetype="9"] .shadectl-mypos,
|
||||||
.somfyShadeCtl[data-tilt="3"] .shadectl-mypos .my-pos,
|
.somfyShadeCtl[data-tilt="3"] .shadectl-mypos .my-pos,
|
||||||
.somfyShadeCtl:not([data-shadetype="1"]) .shadectl-mypos .my-pos-tilt,
|
.somfyShadeCtl:not([data-shadetype="1"]) .shadectl-mypos .my-pos-tilt,
|
||||||
|
|
@ -239,12 +254,24 @@
|
||||||
#somfyShade[data-proto="8"] #divGPIOMy,
|
#somfyShade[data-proto="8"] #divGPIOMy,
|
||||||
#somfyShade[data-bitlength="56"] #divStepSettings,
|
#somfyShade[data-bitlength="56"] #divStepSettings,
|
||||||
#somfyShade[data-shadetype="5"] #divStepSettings,
|
#somfyShade[data-shadetype="5"] #divStepSettings,
|
||||||
|
#somfyShade[data-shadetype="14"] #divStepSettings,
|
||||||
|
#somfyShade[data-shadetype="15"] #divStepSettings,
|
||||||
|
#somfyShade[data-shadetype="16"] #divStepSettings,
|
||||||
#somfyShade[data-shadetype="6"] #divStepSettings {
|
#somfyShade[data-shadetype="6"] #divStepSettings {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
#somfyShade[data-proto="9"][data-shadetype="5"] #divGPIOUp,
|
#somfyShade[data-proto="9"][data-shadetype="5"] #divGPIOUp,
|
||||||
#somfyShade[data-proto="9"][data-shadetype="5"] #divGPIOMy,
|
#somfyShade[data-proto="9"][data-shadetype="5"] #divGPIOMy,
|
||||||
#somfyShade[data-proto="8"][data-shadetype="5"] #divGPIOMy,
|
#somfyShade[data-proto="8"][data-shadetype="5"] #divGPIOMy,
|
||||||
|
#somfyShade[data-proto="9"][data-shadetype="14"] #divGPIOUp,
|
||||||
|
#somfyShade[data-proto="9"][data-shadetype="14"] #divGPIOMy,
|
||||||
|
#somfyShade[data-proto="8"][data-shadetype="14"] #divGPIOMy,
|
||||||
|
#somfyShade[data-proto="9"][data-shadetype="15"] #divGPIOUp,
|
||||||
|
#somfyShade[data-proto="9"][data-shadetype="15"] #divGPIOMy,
|
||||||
|
#somfyShade[data-proto="8"][data-shadetype="15"] #divGPIOMy,
|
||||||
|
#somfyShade[data-proto="9"][data-shadetype="16"] #divGPIOUp,
|
||||||
|
#somfyShade[data-proto="9"][data-shadetype="16"] #divGPIOMy,
|
||||||
|
#somfyShade[data-proto="8"][data-shadetype="16"] #divGPIOMy,
|
||||||
#somfyShade[data-proto="9"][data-shadetype="9"] #divGPIOUp,
|
#somfyShade[data-proto="9"][data-shadetype="9"] #divGPIOUp,
|
||||||
#somfyShade[data-proto="9"][data-shadetype="9"] #divGPIOMy,
|
#somfyShade[data-proto="9"][data-shadetype="9"] #divGPIOMy,
|
||||||
#somfyShade[data-proto="8"][data-shadetype="9"] #divGPIOUp {
|
#somfyShade[data-proto="8"][data-shadetype="9"] #divGPIOUp {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue