19#ifndef SRC_SUPLA_CONTROL_ROLLER_SHUTTER_INTERFACE_H_
20#define SRC_SUPLA_CONTROL_ROLLER_SHUTTER_INTERFACE_H_
22#include "../action_handler.h"
23#include "../channel_element.h"
25#define UNKNOWN_POSITION -1
26#define STOP_POSITION -2
27#define MOVE_UP_POSITION -3
28#define MOVE_DOWN_POSITION -4
29#define STOP_REQUEST -5
30#define RS_DEFAULT_OPERATION_TIMEOUT_MS 60000
31#define RS_MAX_OPERATION_TIME_MS 600000
39enum class Directions : uint8_t { STOP_DIR = 0, DOWN_DIR = 1, UP_DIR = 2 };
43 uint8_t motorUpsideDown = 1;
44 uint8_t buttonsUpsideDown = 1;
45 int8_t timeMargin = -1;
49 uint8_t visualizationType = 0;
54 uint32_t tiltingTime = 0;
55 uint16_t tilt0Angle = 0;
56 uint16_t tilt100Angle = 0;
57 uint8_t tiltControlType =
58 SUPLA_TILT_CONTROL_TYPE_UNKNOWN;
134 void handleAction(
int event,
int action)
override;
137 bool local =
false)
override;
138 void fillChannelConfig(
void *channelConfig,
140 uint8_t configType)
override;
147 virtual void close();
150 virtual void moveUp();
152 virtual void moveDown();
155 virtual void setTargetPosition(
int newPosition,
156 int newTilt = UNKNOWN_POSITION);
165 void setNotCalibrated();
169 void setCalibrationOngoing(
int calibrationTime = 1);
170 void setCalibrationFinished();
210 void configComfortUpValue(uint8_t position);
211 void configComfortDownValue(uint8_t position);
212 void configComfortUpTiltValue(uint8_t position);
213 void configComfortDownTiltValue(uint8_t position);
223 uint32_t getClosingTimeMs()
const;
224 uint32_t getOpeningTimeMs()
const;
225 uint32_t getTiltingTimeMs()
const;
226 uint32_t getTiltControlType()
const;
231 virtual void triggerCalibration();
232 void setCalibrationNeeded();
233 bool isCalibrationRequested()
const;
234 bool isCalibrated()
const;
289 uint8_t getMotorUpsideDown()
const;
290 uint8_t getButtonsUpsideDown()
const;
291 int8_t getTimeMargin()
const;
293 static void setRsStorageSaveDelay(
int delayMs);
295 virtual bool inMove();
296 virtual bool isCalibrationInProgress()
const;
297 void startCalibration(uint32_t timeMs);
298 void stopCalibration();
299 bool isCalibrationFailed()
const;
300 bool isCalibrationLost()
const;
301 bool isMotorProblem()
const;
303 bool isFunctionSupported(int32_t channelFunction)
const;
304 bool isAutoCalibrationSupported()
const;
306 void setOpenCloseTime(uint32_t newClosingTimeMs, uint32_t newOpeningTimeMs);
307 void setTiltingTime(uint32_t newTiltingTimeMs,
bool local =
true);
308 void setTiltControlType(uint8_t newTiltControlType,
bool local =
true);
310 void setCalibrationFailed(
bool value);
311 void setCalibrationLost(
bool value);
312 void setMotorProblem(
bool value);
317 bool asInternal =
true;
318 bool upButton =
true;
331 bool upButton,
bool asInternal);
334 bool lastDirectionWasOpen()
const;
335 bool lastDirectionWasClose()
const;
338 bool isTimeSettingAvailable()
const;
339 bool getCalibrate()
const;
340 void setCalibrate(
bool value);
342 void printConfig()
const;
343 uint32_t getTimeMarginValue(uint32_t fullTime)
const;
347 uint8_t comfortDownValue = 20;
348 uint8_t comfortUpValue = 80;
349 uint8_t comfortUpTiltValue = 0;
350 uint8_t comfortDownTiltValue = 100;
352 Directions currentDirection = Directions::STOP_DIR;
353 Directions lastDirection = Directions::STOP_DIR;
355 int16_t currentPosition =
357 int16_t currentTilt =
360 int8_t targetPosition = STOP_POSITION;
361 int8_t targetTilt = UNKNOWN_POSITION;
362 int16_t lastPositionBeforeMovement = UNKNOWN_POSITION;
363 int16_t lastTiltBeforeMovement = UNKNOWN_POSITION;
364 bool newTargetPositionAvailable =
false;
366 RollerShutterConfig rsConfig;
367 TiltConfig tiltConfig;
371 uint32_t closingTimeMs = 0;
372 uint32_t openingTimeMs = 0;
376 uint32_t calibrationTime = 0;
377 uint32_t lastUpdateTime = 0;
379 static int16_t rsStorageSaveDelay;
RollerShutterInterface(bool tiltFunctionsEnabled=false)
Constructor.
Definition roller_shutter_interface.cpp:78
Definition SuplaDevice.h:162
bool isTiltFunctionsSupported() const
Check if tilt functions are supported.
Definition roller_shutter_interface.cpp:1371
void onLoadState() override
Second method called on element in SuplaDevice.begin().
Definition roller_shutter_interface.cpp:660
int getTargetTilt() const
Get target tilt position.
Definition roller_shutter_interface.cpp:741
int getCurrentPosition() const
Get current roller shutter position.
Definition roller_shutter_interface.cpp:723
void setRsConfigTimeMarginEnabled(bool enable)
Enable/disable time margin configuration option.
Definition roller_shutter_interface.cpp:1172
void setRsConfigButtonsUpsideDownValue(uint8_t value)
Set buttons upside down value.
Definition roller_shutter_interface.cpp:1234
void setupButtonActions(Supla::Control::Button *button, bool upButton, bool asInternal)
Configure additional buttons for roller shutter.
Definition roller_shutter_interface.cpp:1301
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override
Handles "new value" request from server.
Definition roller_shutter_interface.cpp:158
void purgeConfig() override
Removes all configration data related to the element from Storage::Config.
Definition roller_shutter_interface.cpp:1248
int getCurrentDirection() const
Get current roller shutter movement direction.
Definition roller_shutter_interface.cpp:748
void setRsConfigTimeMarginValue(int8_t value)
Set time margin value.
Definition roller_shutter_interface.cpp:1241
bool isTiltFunctionEnabled() const
Check if tilt function is currently enabled.
Definition roller_shutter_interface.cpp:1376
void onInit() override
Third method called on element in SuplaDevice.begin().
Definition roller_shutter_interface.cpp:138
RollerShutterInterface(bool tiltFunctionsEnabled=false)
Constructor.
Definition roller_shutter_interface.cpp:78
bool isBottomReached() const
Check if bottom position (and tilt if applicable) is reached.
Definition roller_shutter_interface.cpp:1403
bool isTopReached() const
Check if top position (and tilt if applicable) is reached.
Definition roller_shutter_interface.cpp:1394
void onSaveState() override
Method called periodically during SuplaDevice iteration.
Definition roller_shutter_interface.cpp:705
void setCurrentPosition(int newPosition, int newTilt=UNKNOWN_POSITION)
Set current roller shutter/facade blind position (and tilt) (0 = open; 100 = closed).
Definition roller_shutter_interface.cpp:462
void setRsConfigMotorUpsideDownValue(uint8_t value)
Set motor upside down value.
Definition roller_shutter_interface.cpp:1227
void fillSuplaChannelNewValue(TSD_SuplaChannelNewValue *value) override
Fills TSD_SuplaChannelNewValue based on current state.
Definition roller_shutter_interface.cpp:1200
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition roller_shutter_interface.cpp:604
void onLoadConfig(SuplaDeviceClass *sdc) override
First method called on element in SuplaDevice.begin().
Definition roller_shutter_interface.cpp:978
int getCurrentTilt() const
Get current tilt position.
Definition roller_shutter_interface.cpp:730
void setRsConfigButtonsUpsideDownEnabled(bool enable)
Enable/disable buttons upside down configuration option.
Definition roller_shutter_interface.cpp:1162
void setRsConfigMotorUpsideDownEnabled(bool enable)
Enable/disable motor upside down configuration option.
Definition roller_shutter_interface.cpp:1152
int getTargetPosition() const
Get target roller shutter position.
Definition roller_shutter_interface.cpp:737
void addTiltFunctions()
Add tilt functions (facade blinds, vertical blinds) Changing of tilt functions will breake state stor...
Definition roller_shutter_interface.cpp:1365
virtual ~RollerShutterInterface()
Destructor.
Definition roller_shutter_interface.cpp:93
int handleCalcfgFromServer(TSD_DeviceCalCfgRequest *request) override
Handles CALCFG requests from server.
Definition roller_shutter_interface.cpp:807
bool isTiltConfigured() const
Check if tilting is configured (time and control modes are set and isTiltFunctionEnabled is true).
Definition roller_shutter_interface.cpp:1389
Definition roller_shutter_interface.h:42
Definition roller_shutter_interface.h:53