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);
318 void loadRollerShutterConfigOnly();
319 void purgeRollerShutterConfigOnly();
323 bool asInternal =
true;
324 bool upButton =
true;
337 bool upButton,
bool asInternal);
340 bool lastDirectionWasOpen()
const;
341 bool lastDirectionWasClose()
const;
344 bool isTimeSettingAvailable()
const;
345 bool getCalibrate()
const;
346 void setCalibrate(
bool value);
348 void printConfig()
const;
349 uint32_t getTimeMarginValue(uint32_t fullTime)
const;
353 uint8_t comfortDownValue = 20;
354 uint8_t comfortUpValue = 80;
355 uint8_t comfortUpTiltValue = 0;
356 uint8_t comfortDownTiltValue = 100;
358 Directions currentDirection = Directions::STOP_DIR;
359 Directions lastDirection = Directions::STOP_DIR;
361 int16_t currentPosition =
363 int16_t currentTilt =
366 int8_t targetPosition = STOP_POSITION;
367 int8_t targetTilt = UNKNOWN_POSITION;
368 int16_t lastPositionBeforeMovement = UNKNOWN_POSITION;
369 int16_t lastTiltBeforeMovement = UNKNOWN_POSITION;
370 bool newTargetPositionAvailable =
false;
372 RollerShutterConfig rsConfig;
373 TiltConfig tiltConfig;
377 uint32_t closingTimeMs = 0;
378 uint32_t openingTimeMs = 0;
382 uint32_t calibrationTime = 0;
383 uint32_t lastUpdateTime = 0;
385 static int16_t rsStorageSaveDelay;
RollerShutterInterface(bool tiltFunctionsEnabled=false)
Constructor.
Definition roller_shutter_interface.cpp:78
Definition SuplaDevice.h:177
bool isTiltFunctionsSupported() const
Check if tilt functions are supported.
Definition roller_shutter_interface.cpp:1400
void onLoadState() override
Second method called on element in SuplaDevice.begin().
Definition roller_shutter_interface.cpp:679
int getTargetTilt() const
Get target tilt position.
Definition roller_shutter_interface.cpp:760
int getCurrentPosition() const
Get current roller shutter position.
Definition roller_shutter_interface.cpp:742
void setRsConfigTimeMarginEnabled(bool enable)
Enable/disable time margin configuration option.
Definition roller_shutter_interface.cpp:1197
void setRsConfigButtonsUpsideDownValue(uint8_t value)
Set buttons upside down value.
Definition roller_shutter_interface.cpp:1259
void setupButtonActions(Supla::Control::Button *button, bool upButton, bool asInternal)
Configure additional buttons for roller shutter.
Definition roller_shutter_interface.cpp:1330
int32_t handleNewValueFromServer(TSD_SuplaChannelNewValue *newValue) override
Handles "new value" request from server.
Definition roller_shutter_interface.cpp:177
void purgeConfig() override
Removes all configration data related to the element from Storage::Config.
Definition roller_shutter_interface.cpp:1273
int getCurrentDirection() const
Get current roller shutter movement direction.
Definition roller_shutter_interface.cpp:767
void setRsConfigTimeMarginValue(int8_t value)
Set time margin value.
Definition roller_shutter_interface.cpp:1266
bool isTiltFunctionEnabled() const
Check if tilt function is currently enabled.
Definition roller_shutter_interface.cpp:1405
void onInit() override
Third method called on element in SuplaDevice.begin().
Definition roller_shutter_interface.cpp:157
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:1432
bool isTopReached() const
Check if top position (and tilt if applicable) is reached.
Definition roller_shutter_interface.cpp:1423
void onSaveState() override
Method called periodically during SuplaDevice iteration.
Definition roller_shutter_interface.cpp:724
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:481
void setRsConfigMotorUpsideDownValue(uint8_t value)
Set motor upside down value.
Definition roller_shutter_interface.cpp:1252
void fillSuplaChannelNewValue(TSD_SuplaChannelNewValue *value) override
Fills TSD_SuplaChannelNewValue based on current state.
Definition roller_shutter_interface.cpp:1225
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition roller_shutter_interface.cpp:623
void onLoadConfig(SuplaDeviceClass *sdc) override
First method called on element in SuplaDevice.begin().
Definition roller_shutter_interface.cpp:997
int getCurrentTilt() const
Get current tilt position.
Definition roller_shutter_interface.cpp:749
void setRsConfigButtonsUpsideDownEnabled(bool enable)
Enable/disable buttons upside down configuration option.
Definition roller_shutter_interface.cpp:1187
void setRsConfigMotorUpsideDownEnabled(bool enable)
Enable/disable motor upside down configuration option.
Definition roller_shutter_interface.cpp:1177
int getTargetPosition() const
Get target roller shutter position.
Definition roller_shutter_interface.cpp:756
void addTiltFunctions()
Add tilt functions (facade blinds, vertical blinds) Changing of tilt functions will breake state stor...
Definition roller_shutter_interface.cpp:1394
virtual ~RollerShutterInterface()
Destructor.
Definition roller_shutter_interface.cpp:112
int handleCalcfgFromServer(TSD_DeviceCalCfgRequest *request) override
Handles CALCFG requests from server.
Definition roller_shutter_interface.cpp:826
bool isTiltConfigured() const
Check if tilting is configured (time and control modes are set and isTiltFunctionEnabled is true).
Definition roller_shutter_interface.cpp:1418
Definition roller_shutter_interface.h:42
Definition roller_shutter_interface.h:53