mirror of
https://github.com/openhab/openhab-addons.git
synced 2025-01-10 15:11:59 +01:00
[enocean] Add support for eltako rollershutter frm60 (#10852)
* added eltako frm60, based on eltako fsb Signed-off-by: Andreas Hofinger <andreas.hofinger@gmx.net>
This commit is contained in:
parent
ac52f9bbe4
commit
48e13858a9
@ -213,9 +213,9 @@ If you change the SenderId of your thing, you have to pair again the thing with
|
||||
| | suppressRepeating | Suppress repeating of msg | true, false |
|
||||
| rollershutter | senderIdOffset | | 1-127 |
|
||||
| | enoceanId | | |
|
||||
| | sendingEEPId | | A5_3F_7F_EltakoFSB, A5_38_08_07, D2_05_00 |
|
||||
| | sendingEEPId | | A5_3F_7F_EltakoFSB, A5_3F_7F_EltakoFRM, A5_38_08_07, D2_05_00 |
|
||||
| | broadcastMessages | | true, false |
|
||||
| | receivingEEPId¹ | | A5_3F_7F_EltakoFSB, A5_11_03, D2_05_00 |
|
||||
| | receivingEEPId¹ | | A5_3F_7F_EltakoFSB, A5_3F_7F_EltakoFRM, A5_11_03, D2_05_00 |
|
||||
| | suppressRepeating | | true, false |
|
||||
| | pollingInterval | Refresh interval in seconds | Integer |
|
||||
| measurementSwitch | senderIdOffset | | 1-127 |
|
||||
|
@ -0,0 +1,85 @@
|
||||
/**
|
||||
* Copyright (c) 2010-2021 Contributors to the openHAB project
|
||||
*
|
||||
* See the NOTICE file(s) distributed with this work for additional
|
||||
* information.
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*/
|
||||
package org.openhab.binding.enocean.internal.eep.A5_3F;
|
||||
|
||||
import static org.openhab.binding.enocean.internal.EnOceanBindingConstants.ZERO;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.openhab.binding.enocean.internal.eep.Base._4BSMessage;
|
||||
import org.openhab.binding.enocean.internal.messages.ERP1Message;
|
||||
import org.openhab.core.config.core.Configuration;
|
||||
import org.openhab.core.library.types.PercentType;
|
||||
import org.openhab.core.library.types.StopMoveType;
|
||||
import org.openhab.core.library.types.UpDownType;
|
||||
import org.openhab.core.types.Command;
|
||||
import org.openhab.core.types.State;
|
||||
import org.openhab.core.types.UnDefType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Andreas Hofinger
|
||||
*/
|
||||
public class A5_3F_7F_EltakoFRM extends _4BSMessage {
|
||||
|
||||
static final byte Stop = 0x00;
|
||||
static final byte Move = 0x03;
|
||||
|
||||
static final int Top = 0xC8;
|
||||
static final int Bottom = 0x00;
|
||||
|
||||
public A5_3F_7F_EltakoFRM() {
|
||||
super();
|
||||
}
|
||||
|
||||
public A5_3F_7F_EltakoFRM(ERP1Message packet) {
|
||||
super(packet);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void convertFromCommandImpl(String channelId, String channelTypeId, Command command,
|
||||
Function<String, State> getCurrentStateFunc, Configuration config) {
|
||||
|
||||
if (command instanceof PercentType) {
|
||||
PercentType target = (PercentType) command;
|
||||
int rawPosition = Math.round(
|
||||
(PercentType.HUNDRED.floatValue() - target.floatValue()) * Top / PercentType.HUNDRED.floatValue());
|
||||
int position = Math.min(Top, Math.max(Bottom, rawPosition));
|
||||
setData((byte) position, ZERO, Move, TeachInBit);
|
||||
} else if (command instanceof UpDownType) {
|
||||
if ((UpDownType) command == UpDownType.UP) {
|
||||
setData((byte) Top, ZERO, Move, TeachInBit); // => 0 percent
|
||||
} else if ((UpDownType) command == UpDownType.DOWN) {
|
||||
setData((byte) Bottom, ZERO, Move, TeachInBit); // => 100 percent
|
||||
}
|
||||
} else if (command instanceof StopMoveType) {
|
||||
if ((StopMoveType) command == StopMoveType.STOP) {
|
||||
setData(ZERO, ZERO, Stop, TeachInBit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected State convertToStateImpl(String channelId, String channelTypeId,
|
||||
Function<String, State> getCurrentStateFunc, Configuration config) {
|
||||
|
||||
// 0x0A.. Move was locked for switch
|
||||
// 0x0E.. Move was not locked
|
||||
if (getDB_2() == ZERO && getDB_1() == Move && (getDB_0() == 0x0A || getDB_0() == 0x0E)) {
|
||||
int position = getDB_3Value();
|
||||
float percentage = 100.0f * (Top - position) / (float) (Top - Bottom);
|
||||
return new PercentType(Math.round(Math.min(100, (Math.max(0, percentage)))));
|
||||
}
|
||||
return UnDefType.UNDEF;
|
||||
}
|
||||
}
|
@ -108,6 +108,7 @@ import org.openhab.binding.enocean.internal.eep.A5_30.A5_30_03_ELTAKO;
|
||||
import org.openhab.binding.enocean.internal.eep.A5_38.A5_38_08_Blinds;
|
||||
import org.openhab.binding.enocean.internal.eep.A5_38.A5_38_08_Dimming;
|
||||
import org.openhab.binding.enocean.internal.eep.A5_38.A5_38_08_Switching;
|
||||
import org.openhab.binding.enocean.internal.eep.A5_3F.A5_3F_7F_EltakoFRM;
|
||||
import org.openhab.binding.enocean.internal.eep.A5_3F.A5_3F_7F_EltakoFSB;
|
||||
import org.openhab.binding.enocean.internal.eep.Base.PTM200Message;
|
||||
import org.openhab.binding.enocean.internal.eep.Base.UTEResponse;
|
||||
@ -399,6 +400,19 @@ public enum EEPType {
|
||||
}
|
||||
}),
|
||||
|
||||
EltakoFRM(RORG._4BS, 0x3f, 0x7f, false, false, "EltakoFRM", 0, A5_3F_7F_EltakoFRM.class, THING_TYPE_ROLLERSHUTTER,
|
||||
0, new Hashtable<String, Configuration>() {
|
||||
private static final long serialVersionUID = 1L;
|
||||
{
|
||||
put(CHANNEL_ROLLERSHUTTER, new Configuration());
|
||||
put(CHANNEL_TEACHINCMD, new Configuration() {
|
||||
{
|
||||
put(PARAMETER_CHANNEL_TeachInMSG, "fff80d80");
|
||||
}
|
||||
});
|
||||
}
|
||||
}),
|
||||
|
||||
Thermostat(RORG._4BS, 0x20, 0x04, false, true, A5_20_04.class, THING_TYPE_THERMOSTAT, CHANNEL_VALVE_POSITION,
|
||||
CHANNEL_BUTTON_LOCK, CHANNEL_DISPLAY_ORIENTATION, CHANNEL_TEMPERATURE_SETPOINT, CHANNEL_TEMPERATURE,
|
||||
CHANNEL_FEED_TEMPERATURE, CHANNEL_MEASUREMENT_CONTROL, CHANNEL_FAILURE_CODE, CHANNEL_WAKEUPCYCLE,
|
||||
|
@ -31,6 +31,7 @@
|
||||
<label>EEP for Sending Commands</label>
|
||||
<options>
|
||||
<option value="A5_3F_7F_EltakoFSB">Eltako FSB14/61/71</option>
|
||||
<option value="A5_3F_7F_EltakoFRM">Eltako FRM60</option>
|
||||
<option value="D2_05_00">D2-05-00 Rollershutter (like SIN-2-RS-01)</option>
|
||||
<option value="A5_38_08_07">Gateway command - blinds (A5_38_08 sub command 0x07)</option>
|
||||
</options>
|
||||
@ -45,6 +46,7 @@
|
||||
<label>EEP for Receiving States</label>
|
||||
<options>
|
||||
<option value="A5_3F_7F_EltakoFSB">Eltako FSB14/61/71</option>
|
||||
<option value="A5_3F_7F_EltakoFRM">Eltako FRM60</option>
|
||||
<option value="D2_05_00">D2-05-00 Rollershutter (like SIN-2-RS-01)</option>
|
||||
<option value="A5_11_03">A5-11-03 Rollershutter status</option>
|
||||
<option value="F6_00_00">PTM200 Rollershutter status</option>
|
||||
|
Loading…
Reference in New Issue
Block a user