Commit f6f4c928 authored by luz's avatar luz

EnOcean: added SimpleBlinds devices, which are classic EnOcean blind actuators...

EnOcean: added SimpleBlinds devices, which are classic EnOcean blind actuators which can be controlled by RPS telegrams. Works, but configuration/assigning of base IDs is missing
parent 4544b92d
......@@ -450,6 +450,16 @@ void Esp3Packet::setRadioSender(EnoceanAddress aEnoceanAddress)
}
void Esp3Packet::setRadioStatus(uint8_t aStatus)
{
size_t l = radioUserDataLength(); // returns 0 for non-radio packets
if (l>0) {
uint8_t *d = data()+1+l+4; // skip RORG, userdata and sender address to reach status
d[0] = aStatus;
}
}
void Esp3Packet::initForRorg(RadioOrg aRadioOrg, size_t aVLDsize)
......@@ -975,6 +985,7 @@ void EnoceanComm::versionReceived(StatusCB aCompletedCB, Esp3PacketPtr aEsp3Pack
else {
// early abort due to error querying version
if (aCompletedCB) aCompletedCB(aError);
return; // done
}
// query base ID
sendCommand(Esp3Packet::newCommonCommand(CO_RD_IDBASE), boost::bind(&EnoceanComm::idbaseReceived, this, aCompletedCB, _1, _2));
......
......@@ -306,9 +306,12 @@ namespace p44 {
/// @return sender's address
EnoceanAddress radioSender();
/// @param aStatus radio status to set
void setRadioStatus(uint8_t aStatus);
/// @param radio sender's address to set
/// @note EnOcean modules will normally insert their native address here,
/// so usually there's no point in setting this
/// @note EnOcean modules will insert their native address here,
/// unless one of the IDs derived from the module's ID base is used
void setRadioSender(EnoceanAddress aEnoceanAddress);
/// @return the number of radio user data bytes
......@@ -346,6 +349,7 @@ namespace p44 {
/// @}
/// @name 4BS four byte data packet communication
/// @{
......
......@@ -31,6 +31,7 @@
#include "enocean1bs.hpp"
#include "enocean4bs.hpp"
//#include "enoceanVld.hpp"
#include "enoceanremotecontrol.hpp"
using namespace p44;
......@@ -222,6 +223,10 @@ void EnoceanDevice::sendOutgoingUpdate()
// collect data from all channels to compose an outgoing message
Esp3PacketPtr outgoingEsp3Packet;
for (EnoceanChannelHandlerVector::iterator pos = channels.begin(); pos!=channels.end(); ++pos) {
// channels may...
// - issue actions directly to the hardware (separate outgoing messages or sequences of messages
(*pos)->issueDirectChannelActions();
// - and/or collect data for a single outgoing packet carrying data for more than one channel
(*pos)->collectOutgoingMessageData(outgoingEsp3Packet);
}
if (outgoingEsp3Packet) {
......@@ -490,7 +495,7 @@ EnoceanDevicePtr EnoceanDevice::newDevice(
EnoceanDevicePtr newDev;
RadioOrg rorg = EEP_RORG(aEEProfile);
// dispatch to factory according to RORG
switch (rorg) {
switch ((int)rorg) {
case rorg_RPS:
newDev = EnoceanRpsHandler::newDevice(aClassContainerP, aAddress, aSubDeviceIndex, aEEProfile, aEEManufacturer, aSendTeachInResponse);
break;
......@@ -503,6 +508,9 @@ EnoceanDevicePtr EnoceanDevice::newDevice(
// case rorg_VLD:
// newDev = EnoceanVldHandler::newDevice(aClassContainerP, aAddress, aSubDeviceIndex, aEEProfile, aEEManufacturer, aSendTeachInResponse);
// break;
// pseudo RORGs (internal encoding of non-standard devices)
case PSEUDO_RORG_REMOTECONTROL:
newDev = EnoceanRemoteControlHandler::newDevice(aClassContainerP, aAddress, aSubDeviceIndex, aEEProfile, aEEManufacturer, aSendTeachInResponse);
default:
LOG(LOG_WARNING,"EnoceanDevice::newDevice: unknown RORG = 0x%02X\n", rorg);
break;
......
......@@ -71,9 +71,14 @@ namespace p44 {
/// collect data for outgoing message from this channel
/// @param aEsp3PacketPtr must be set to a suitable packet if it is empty, or packet data must be augmented with
/// channel's data when packet already exists
/// @note non-outputs will do nothing in this method
/// @note non-outputs and outputs that directly send actions via issueDirectChannelActions() will usually do nothing in this method
virtual void collectOutgoingMessageData(Esp3PacketPtr &aEsp3PacketPtr) { /* NOP */ };
/// send out actions directly needed to propagate channel value to this device.
/// This is for devices which need a specific telegram or sequence of telegrams to update the channel value
/// @note non-outputs and outputs that collect data with collectOutgoingMessageData() will usually do nothing in this method
virtual void issueDirectChannelActions() { /* NOP */ };
/// check if channel is alive (for regularily sending sensors: has received life sign within timeout window)
virtual bool isAlive() { return true; } // assume alive by default
......@@ -210,6 +215,7 @@ namespace p44 {
/// get the enocean address identifying the hardware that contains this logical device
/// @return EnOcean device ID/address
/// Note: for some actors, this might also be the sender address (in id base range of the modem module)
EnoceanAddress getAddress();
/// get the enocean subdevice number that identifies this logical device among other logical devices in the same
......@@ -256,6 +262,11 @@ namespace p44 {
/// @note will be called from newDevice() when created device needs a teach-in response
virtual void sendTeachInResponse() { /* NOP in base class */ };
/// device specific teach in beacon
/// @note will be called via UI for devices that need to be learned into remote actors
virtual void sendTeachInBeacon() { /* NOP in base class */ };
/// description of object, mainly for debug and logging
/// @return textual description of object
virtual string description();
......
//
// Copyright (c) 2013-2015 plan44.ch / Lukas Zeller, Zurich, Switzerland
//
// Author: Lukas Zeller <luz@plan44.ch>
//
// This file is part of vdcd.
//
// vdcd is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// vdcd is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with vdcd. If not, see <http://www.gnu.org/licenses/>.
//
// File scope debugging options
// - Set ALWAYS_DEBUG to 1 to enable DBGLOG output even in non-DEBUG builds of this file
#define ALWAYS_DEBUG 0
// - set FOCUSLOGLEVEL to non-zero log level (usually, 5,6, or 7==LOG_DEBUG) to get focus (extensive logging) for this file
// Note: must be before including "logger.hpp" (or anything that includes "logger.hpp")
#define FOCUSLOGLEVEL 0
#include "enoceanremotecontrol.hpp"
#include "outputbehaviour.hpp"
#include "enoceandevicecontainer.hpp"
using namespace p44;
#pragma mark - EnoceanRemoteControlDevice
EnoceanRemoteControlDevice::EnoceanRemoteControlDevice(EnoceanDeviceContainer *aClassContainerP, uint8_t aDsuidIndexStep) :
inherited(aClassContainerP)
{
}
bool EnoceanRemoteControlDevice::sendTeachInSignal()
{
if (EEP_FUNC(getEEProfile())==PSEUDO_FUNC_SWITCHCONTROL) {
// issue simulated left up switch press
Esp3PacketPtr packet = Esp3PacketPtr(new Esp3Packet());
packet->initForRorg(rorg_RPS);
packet->setRadioDestination(EnoceanBroadcast);
packet->radioUserData()[0] = 0x30; // pressing left button, up
packet->setRadioStatus(status_NU|status_T21); // pressed
packet->setRadioSender(getAddress()); // my own ID base derived address that is learned into this actor
getEnoceanDeviceContainer().enoceanComm.sendPacket(packet);
MainLoop::currentMainLoop().executeOnce(boost::bind(&EnoceanRemoteControlDevice::sendSwitchBeaconRelease, this), 300*MilliSecond);
return true;
}
return inherited::sendTeachInSignal();
}
void EnoceanRemoteControlDevice::sendSwitchBeaconRelease()
{
Esp3PacketPtr packet = Esp3PacketPtr(new Esp3Packet());
packet->initForRorg(rorg_RPS);
packet->setRadioDestination(EnoceanBroadcast);
packet->radioUserData()[0] = 0x00; // release
packet->setRadioStatus(status_T21); // released
packet->setRadioSender(getAddress()); // my own ID base derived address that is learned into this actor
getEnoceanDeviceContainer().enoceanComm.sendPacket(packet);
}
// insert into knowndevices (enoceanAddress, subdevice, eeProfile, eeManufacturer) values (0xFFDC0D00, 0, 0xFFF6FF, 0xFFFF);
// insert into knowndevices (enoceanAddress, subdevice, eeProfile, eeManufacturer) values (4292611328, 0, 16774911, 65535);
#pragma mark - EnoceanRemoteControlHandler
EnoceanRemoteControlHandler::EnoceanRemoteControlHandler(EnoceanDevice &aDevice) :
inherited(aDevice)
{
}
EnoceanDevicePtr EnoceanRemoteControlHandler::newDevice(
EnoceanDeviceContainer *aClassContainerP,
EnoceanAddress aAddress,
EnoceanSubDevice aSubDeviceIndex,
EnoceanProfile aEEProfile, EnoceanManufacturer aEEManufacturer,
bool aNeedsTeachInResponse
) {
EnoceanDevicePtr newDev; // none so far
if (EEP_RORG(aEEProfile)==PSEUDO_RORG_REMOTECONTROL) {
// is a remote control device
if (EEP_FUNC(aEEProfile)==PSEUDO_FUNC_SWITCHCONTROL && aSubDeviceIndex<1) {
// device using F6 RPS messages to control actors
if (EEP_TYPE(aEEProfile)==PSEUDO_TYPE_SIMPLEBLIND) {
// simple blind controller
newDev = EnoceanDevicePtr(new EnoceanRemoteControlDevice(aClassContainerP));
// standard single-value scene table (SimpleScene)
newDev->installSettings(DeviceSettingsPtr(new SceneDeviceSettings(*newDev)));
// assign channel and address
newDev->setAddressingInfo(aAddress, aSubDeviceIndex);
// assign EPP information
newDev->setEEPInfo(aEEProfile, aEEManufacturer);
// is shadow
newDev->setPrimaryGroup(group_grey_shadow);
// function
newDev->setFunctionDesc("blind remote control");
// is always updateable (no need to wait for incoming data)
newDev->setAlwaysUpdateable();
// - add generic output behaviour
OutputBehaviourPtr ob = OutputBehaviourPtr(new OutputBehaviour(*newDev.get()));
ob->setHardwareOutputConfig(outputFunction_switch, usage_undefined, false, -1);
ob->setHardwareName("blind");
ob->setGroupMembership(group_grey_shadow, true); // put into shadow group by default
ob->addChannel(ChannelBehaviourPtr(new DigitalChannel(*ob)));
// - create PSEUDO_TYPE_SIMPLEBLIND specific handler for output
EnoceanSimpleBlindHandlerPtr newHandler = EnoceanSimpleBlindHandlerPtr(new EnoceanSimpleBlindHandler(*newDev.get()));
newHandler->behaviour = ob;
newDev->addChannelHandler(newHandler);
}
}
}
// remote control devices never need a teach-in response
// return device (or empty if none created)
return newDev;
}
#pragma mark - simple all-up/all-down blind controller
EnoceanSimpleBlindHandler::EnoceanSimpleBlindHandler(EnoceanDevice &aDevice) :
inherited(aDevice)
{
}
string EnoceanSimpleBlindHandler::shortDesc()
{
return "Simple Blind";
}
void EnoceanSimpleBlindHandler::issueDirectChannelActions()
{
// veeery simplistic behaviour: value>0.5 means: blind down, otherwise: blind up
OutputBehaviourPtr ob = boost::dynamic_pointer_cast<OutputBehaviour>(behaviour);
if (ob) {
// get the right channel
ChannelBehaviourPtr ch = ob->getChannelByIndex(dsChannelIndex);
// get value
bool blindUp = ch->getChannelValue()<0.5;
// simulate long press of my button
Esp3PacketPtr packet = Esp3PacketPtr(new Esp3Packet());
packet->initForRorg(rorg_RPS);
packet->setRadioDestination(EnoceanBroadcast);
packet->radioUserData()[0] = blindUp ? 0x30 : 0x10; // pressing left button, up or down
packet->setRadioStatus(status_NU|status_T21); // pressed
packet->setRadioSender(device.getAddress()); // my own ID base derived address that is learned into this actor
device.getEnoceanDeviceContainer().enoceanComm.sendPacket(packet);
MainLoop::currentMainLoop().executeOnce(boost::bind(&EnoceanSimpleBlindHandler::sendReleaseTelegram, this), 1*Second);
}
}
void EnoceanSimpleBlindHandler::sendReleaseTelegram()
{
Esp3PacketPtr packet = Esp3PacketPtr(new Esp3Packet());
packet->initForRorg(rorg_RPS);
packet->setRadioDestination(EnoceanBroadcast);
packet->radioUserData()[0] = 0x00; // release
packet->setRadioStatus(status_T21); // released
packet->setRadioSender(device.getAddress()); // my own ID base derived address that is learned into this actor
device.getEnoceanDeviceContainer().enoceanComm.sendPacket(packet);
}
//
// Copyright (c) 2013-2015 plan44.ch / Lukas Zeller, Zurich, Switzerland
//
// Author: Lukas Zeller <luz@plan44.ch>
//
// This file is part of vdcd.
//
// vdcd is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// vdcd is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with vdcd. If not, see <http://www.gnu.org/licenses/>.
//
#ifndef __vdcd__enoceanremotecontrol__
#define __vdcd__enoceanremotecontrol__
#include "vdcd_common.hpp"
#include "enoceandevice.hpp"
using namespace std;
namespace p44 {
// pseudo-RORG used in this implementation to identify "remote control" devices, i.e. those that use local baseID to send out actions
#define PSEUDO_RORG_REMOTECONTROL 0xFF
#define PSEUDO_FUNC_SWITCHCONTROL 0xF6
#define PSEUDO_TYPE_SIMPLEBLIND 0xFF // simplistic Fully-Up/Fully-Down blind controller
/// remote control type device (using base id to communicate with actor)
class EnoceanRemoteControlHandler : public EnoceanChannelHandler
{
typedef EnoceanChannelHandler inherited;
protected:
/// private constructor, create new channels using factory static method
EnoceanRemoteControlHandler(EnoceanDevice &aDevice);
public:
/// factory: (re-)create logical device from address|channel|profile|manufacturer tuple
/// @param aClassContainerP the class container
/// @param aSubDeviceIndex subdevice number to create (multiple logical EnoceanDevices might exists for the same EnoceanAddress)
/// @param aEEProfile VARIANT/RORG/FUNC/TYPE EEP profile number
/// @param aEEManufacturer manufacturer number (or manufacturer_unknown)
/// @param aSendTeachInResponse enable sending teach-in response for this device
/// @return returns NULL if no device can be created for the given aSubDeviceIndex, new device otherwise
static EnoceanDevicePtr newDevice(
EnoceanDeviceContainer *aClassContainerP,
EnoceanAddress aAddress,
EnoceanSubDevice aSubDeviceIndex,
EnoceanProfile aEEProfile, EnoceanManufacturer aEEManufacturer,
bool aNeedsTeachInResponse
);
/// handle radio packet related to this channel
/// @param aEsp3PacketPtr the radio packet to analyze and extract channel related information
virtual void handleRadioPacket(Esp3PacketPtr aEsp3PacketPtr) { /* no responses by default */ };
};
typedef boost::intrusive_ptr<EnoceanRemoteControlHandler> EnoceanRemoteControlHandlerPtr;
/// simple all-up/all-down blind controller
class EnoceanSimpleBlindHandler : public EnoceanRemoteControlHandler
{
typedef EnoceanRemoteControlHandler inherited;
friend class EnoceanRemoteControlHandler;
/// send out actions directly needed to propagate channel value to this device.
/// This is for devices which need a specific telegram or sequence of telegrams to update the channel value
virtual void issueDirectChannelActions();
protected:
/// private constructor, create new channels using factory static method
EnoceanSimpleBlindHandler(EnoceanDevice &aDevice);
public:
/// short (text without LFs!) description of object, mainly for referencing it in log messages
/// @return textual description of object
virtual string shortDesc();
private:
void sendReleaseTelegram();
};
typedef boost::intrusive_ptr<EnoceanSimpleBlindHandler> EnoceanSimpleBlindHandlerPtr;
class EnoceanRemoteControlDevice : public EnoceanDevice
{
typedef EnoceanDevice inherited;
public:
/// constructor
/// @param aDsuidIndexStep step between dSUID subdevice indices (default is 1, historically 2 for dual 2-way rocker switches)
EnoceanRemoteControlDevice(EnoceanDeviceContainer *aClassContainerP, uint8_t aDsuidIndexStep = 1);
/// device type identifier
/// @return constant identifier for this type of device (one container might contain more than one type)
virtual const char *deviceTypeIdentifier() { return "enocean_remotecontrol"; };
/// device specific teach in signal
/// @note will be called via UI for devices that need to be learned into remote actors
virtual bool sendTeachInSignal();
/// mark base offsets in use by this device
/// @param aUsedOffsetsMap must be passed a string with 128 chars of '0' or '1'.
virtual void markUsedBaseOffsets(string &aUsedOffsetsMap);
private:
void sendSwitchBeaconRelease();
};
}
#endif /* defined(__vdcd__enoceanremotecontrol__) */
......@@ -376,6 +376,15 @@ ErrorPtr Device::handleMethod(VdcApiRequestPtr aRequest, const string &aMethod,
respErr = ErrorPtr(new WebError(403, "device cannot be removed with this method"));
}
}
else if (aMethod=="x-p44-teachInSignal") {
if (sendTeachInSignal()) {
// confirm first, because device will get deleted in the process
aRequest->sendResult(ApiValuePtr());
}
else {
respErr = ErrorPtr(new WebError(400, "device cannot send teach in signals"));
}
}
else {
respErr = inherited::handleMethod(aRequest, aMethod, aParams);
}
......
......@@ -293,6 +293,11 @@ namespace p44 {
/// @note base class delegates this to the output behaviour (if any)
virtual void identifyToUser();
/// send a signal needed for some devices to get learned into other devices
/// @return true if device can send a teach-in signal
virtual bool sendTeachInSignal() { return false; /* base class does not have this */ };
/// check if device can be disconnected by software (i.e. Web-UI)
/// @return true if device might be disconnectable by the user via software (i.e. web UI)
/// @note devices returning true here might still refuse disconnection on a case by case basis when
......
......@@ -83,6 +83,7 @@
ED55760D174CC03B00CCC4DD /* socketcomm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED55760B174CC03A00CCC4DD /* socketcomm.cpp */; };
ED557612174CFB3100CCC4DD /* jsoncomm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED557610174CFB3000CCC4DD /* jsoncomm.cpp */; };
ED5576151750B15F00CCC4DD /* jsonobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED5576131750B15E00CCC4DD /* jsonobject.cpp */; };
ED5827261B02378F00B92C74 /* enoceanremotecontrol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED5827241B02378F00B92C74 /* enoceanremotecontrol.cpp */; };
ED5AF915174182E700689E4B /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = ED5AF914174182E700689E4B /* libsqlite3.dylib */; };
ED5B2907173935B000334C71 /* enoceandevicecontainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED5B2905173935AF00334C71 /* enoceandevicecontainer.cpp */; };
ED5B290A17393A0800334C71 /* enoceandevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED5B290817393A0700334C71 /* enoceandevice.cpp */; };
......@@ -271,7 +272,7 @@
ED07E26517DB204200889CC3 /* huecomm.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = huecomm.hpp; sourceTree = "<group>"; };
ED0DE308184E385A001ADB5E /* messages.proto */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = messages.proto; sourceTree = "<group>"; };
ED0DE309184E385A001ADB5E /* vdcapi.proto */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = vdcapi.proto; sourceTree = "<group>"; };
ED0E441C1732FE4F00C4C283 /* application.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = application.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
ED0E441C1732FE4F00C4C283 /* application.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = application.cpp; sourceTree = "<group>"; };
ED0E441D1732FE4F00C4C283 /* application.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = application.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
ED10907917B3FD0A009F9FE2 /* jsonrpccomm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = jsonrpccomm.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
ED10907A17B3FD0A009F9FE2 /* jsonrpccomm.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = jsonrpccomm.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
......@@ -315,6 +316,8 @@
ED557611174CFB3100CCC4DD /* jsoncomm.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = jsoncomm.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
ED5576131750B15E00CCC4DD /* jsonobject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jsonobject.cpp; sourceTree = "<group>"; };
ED5576141750B15F00CCC4DD /* jsonobject.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = jsonobject.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
ED5827241B02378F00B92C74 /* enoceanremotecontrol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = enoceanremotecontrol.cpp; sourceTree = "<group>"; };
ED5827251B02378F00B92C74 /* enoceanremotecontrol.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = enoceanremotecontrol.hpp; sourceTree = "<group>"; };
ED5AF914174182E700689E4B /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
ED5B2905173935AF00334C71 /* enoceandevicecontainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = enoceandevicecontainer.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
ED5B2906173935AF00334C71 /* enoceandevicecontainer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = enoceandevicecontainer.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
......@@ -595,6 +598,8 @@
ED5B2906173935AF00334C71 /* enoceandevicecontainer.hpp */,
ED5B290817393A0700334C71 /* enoceandevice.cpp */,
ED5B290917393A0700334C71 /* enoceandevice.hpp */,
ED5827241B02378F00B92C74 /* enoceanremotecontrol.cpp */,
ED5827251B02378F00B92C74 /* enoceanremotecontrol.hpp */,
ED6FCC7B17CB493400267E43 /* enoceanrps.cpp */,
ED6FCC7C17CB493400267E43 /* enoceanrps.hpp */,
ED6FCC7E17CB495400267E43 /* enocean4bs.cpp */,
......@@ -1031,6 +1036,7 @@
ED026CFF171E8EC200AD5FD6 /* deviceclasscontainer.cpp in Sources */,
ED026D02171E91EB00AD5FD6 /* dalidevicecontainer.cpp in Sources */,
EDB5BC1B17B50E79004DB38D /* fdcomm.cpp in Sources */,
ED5827261B02378F00B92C74 /* enoceanremotecontrol.cpp in Sources */,
ED81337C17C72F45003982CC /* outputbehaviour.cpp in Sources */,
EDDDD5531A125FBC007D2ABE /* oladevicecontainer.cpp in Sources */,
ED5BDAB117BCE52100DBC19A /* propertycontainer.cpp in Sources */,
......
......@@ -100,7 +100,7 @@
isEnabled = "YES">
</CommandLineArgument>
<CommandLineArgument
argument = "--dali 192.168.59.233 --dalitxadj 16"
argument = "--dali 192.168.59.233 --daliportidle 10 --dalitxadj 16"
isEnabled = "NO">
</CommandLineArgument>
<CommandLineArgument
......@@ -108,7 +108,7 @@
isEnabled = "NO">
</CommandLineArgument>
<CommandLineArgument
argument = "--dali localhost:2101 --dalitxadj 16"
argument = "--dali localhost:2101 --dalitxadj 0"
isEnabled = "NO">
</CommandLineArgument>
<CommandLineArgument
......@@ -117,7 +117,7 @@
</CommandLineArgument>
<CommandLineArgument
argument = "--enocean /dev/cu.usbserial-FTVEQ3US"
isEnabled = "NO">
isEnabled = "YES">
</CommandLineArgument>
<CommandLineArgument
argument = "--enoceanreset gpioNS9XXXX.enoceanreset"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment