//----------------------------------------------------------------------------- // <ManufacturerProprietary::RequestValue> // Request current value from the device //----------------------------------------------------------------------------- bool ManufacturerProprietary::RequestValue ( uint32 const _requestFlags, uint16 const _index, uint8 const _instance, Driver::MsgQueue const _queue ) { if ( IsGetSupported() ) { Msg* msg = new Msg( "ManufacturerProprietary_RequestValue", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); if (FibaroVenetianBlindsValueIds_Blinds == _index || FibaroVenetianBlindsValueIds_Tilt == _index){ msg->SetInstance( this, _instance ); msg->Append( GetNodeId() ); msg->Append( 1+sizeof(MANUFACTURER_ID_FIBARO)+sizeof(FIBARO_VENETIAN_BLINDS_GET_POSITION_TILT) ); // length of data msg->Append( GetCommandClassId() ); msg->AppendArray( MANUFACTURER_ID_FIBARO, sizeof(MANUFACTURER_ID_FIBARO) ); msg->AppendArray( FIBARO_VENETIAN_BLINDS_GET_POSITION_TILT, sizeof(FIBARO_VENETIAN_BLINDS_GET_POSITION_TILT) ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, _queue ); return true; } else { Log::Write( LogLevel_Info, GetNodeId(), "ManufacturerProprietary_RequestValue Not Supported for value index %d", _index); } } else { Log::Write( LogLevel_Info, GetNodeId(), "ManufacturerProprietary_RequestValue Not Supported on this node"); } return false; }
//----------------------------------------------------------------------------- // <ThermostatFanState::RequestValue> // Get the thermostat fan state details from the device //----------------------------------------------------------------------------- bool ThermostatFanState::RequestValue ( uint32 const _requestFlags, uint8 const _dummy1, // = 0 (not used) uint8 const _instance, Driver::MsgQueue const _queue ) { if ( IsGetSupported() ) { // Request the current state Msg* msg = new Msg( "ThermostatFanStateCmd_Get", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->SetInstance( this, _instance ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( ThermostatFanStateCmd_Get ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, _queue ); return true; } else { Log::Write( LogLevel_Info, GetNodeId(), "ThermostatFanStateCmd_Get Not Supported on this node"); } return false; }
//----------------------------------------------------------------------------- // <SensorMultilevel::RequestState> // Request current state from the device //----------------------------------------------------------------------------- bool SensorMultilevel::RequestState ( uint32 const _requestFlags, uint8 const _instance, Driver::MsgQueue const _queue ) { bool res = false; if( GetVersion() > 4 ) { if( _requestFlags & RequestFlag_Static ) { Msg* msg = new Msg( "SensorMultilevelCmd_SupportedGet", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->SetInstance( this, _instance ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( SensorMultilevelCmd_SupportedGet ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, _queue ); res = true; } } if( _requestFlags & RequestFlag_Dynamic ) { res |= RequestValue( _requestFlags, 0, _instance, _queue ); } return res; }
//----------------------------------------------------------------------------- // <SwitchMultilevel::RequestValue> // Request current value from the device //----------------------------------------------------------------------------- bool SwitchMultilevel::RequestValue ( uint32 const _requestFlags, uint8 const _index, uint8 const _instance, Driver::MsgQueue const _queue ) { if( _index == SwitchMultilevelIndex_Level ) { if ( IsGetSupported() ) { Msg* msg = new Msg( "SwitchMultilevelCmd_Get", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->SetInstance( this, _instance ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( SwitchMultilevelCmd_Get ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, _queue ); return true; } else { Log::Write( LogLevel_Info, GetNodeId(), "SwitchMultilevelCmd_Get Not Supported on this node"); } } return false; }
//----------------------------------------------------------------------------- // <ManufacturerSpecific::RequestValue> // Request current value from the device //----------------------------------------------------------------------------- bool ManufacturerSpecific::RequestValue ( uint32 const _requestFlags, uint8 const _dummy1, // = 0 (not used) uint8 const _instance, Driver::MsgQueue const _queue ) { if( _instance != 1 ) { // This command class doesn't work with multiple instances return false; } if ( IsGetSupported() ) { Msg* msg = new Msg( "ManufacturerSpecificCmd_Get", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( ManufacturerSpecificCmd_Get ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, _queue ); return true; } else { Log::Write( LogLevel_Info, GetNodeId(), "ManufacturerSpecificCmd_Get Not Supported on this node"); } return false; }
//----------------------------------------------------------------------------- // <AssociationCommandConfiguration::RequestValue> // Request current value from the device //----------------------------------------------------------------------------- void AssociationCommandConfiguration::RequestValue ( uint8 const _dummy1, // = 0 (not used) uint8 const _dummy2 // = 0 (not used) ) { Msg* msg = new Msg( "AssociationCommandConfigurationCmd_SupportedRecordsGet", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( AssociationCommandConfigurationCmd_SupportedRecordsGet ); msg->Append( TRANSMIT_OPTION_ACK | TRANSMIT_OPTION_AUTO_ROUTE ); GetDriver()->SendMsg( msg ); }
//----------------------------------------------------------------------------- // <SensorBinary::RequestValue> // Request current value from the device //----------------------------------------------------------------------------- void SensorBinary::RequestValue ( uint8 const _dummy1, // = 0 (not used) uint8 const _dummy2 // = 0 (not used) ) { Msg* msg = new Msg( "SensorBinaryCmd_Get", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( SensorBinaryCmd_Get ); msg->Append( TRANSMIT_OPTION_ACK | TRANSMIT_OPTION_AUTO_ROUTE ); GetDriver()->SendMsg( msg ); }
//----------------------------------------------------------------------------- // <ThermostatOperatingState::RequestValue> // Get a thermostat mode value from the device //----------------------------------------------------------------------------- void ThermostatOperatingState::RequestValue ( uint8 const _dummy1, // = 0 (not used) uint8 const _dummy2 // = 0 (not used) ) { Msg* msg = new Msg( "Request Current Thermostat Operating State", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( ThermostatOperatingStateCmd_Get ); msg->Append( TRANSMIT_OPTION_ACK | TRANSMIT_OPTION_AUTO_ROUTE ); GetDriver()->SendMsg( msg ); }
bool Security::Init ( ) { Msg* msg = new Msg( "SecurityCmd_SupportedGet", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( SecurityCmd_SupportedGet ); msg->Append( GetDriver()->GetTransmitOptions() ); msg->setEncrypted(); GetDriver()->SendMsg( msg, Driver::MsgQueue_Security); return true; }
//----------------------------------------------------------------------------- // <SwitchAll::On> // Send a command to switch all devices on //----------------------------------------------------------------------------- void SwitchAll::On ( Driver* _driver, uint8 const _nodeId ) { Log::Write( LogLevel_Info, _nodeId, "SwitchAll::On (Node=%d)", _nodeId ); Msg* msg = new Msg( "SwitchAllCmd_On", _nodeId, REQUEST, FUNC_ID_ZW_SEND_DATA, true ); msg->Append( _nodeId ); msg->Append( 2 ); msg->Append( StaticGetCommandClassId() ); msg->Append( SwitchAllCmd_On ); msg->Append( _driver->GetTransmitOptions() ); _driver->SendMsg( msg, Driver::MsgQueue_Send ); }
//----------------------------------------------------------------------------- // <SwitchToggleBinary::SetValue> // Toggle the state of the switch //----------------------------------------------------------------------------- bool SwitchToggleBinary::SetValue ( Value const& _value ) { Log::Write( "SwitchToggleBinary::Set - Toggling the state of node %d", GetNodeId() ); Msg* msg = new Msg( "SwitchToggleBinary Set", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( SwitchToggleBinaryCmd_Set ); msg->Append( TRANSMIT_OPTION_ACK | TRANSMIT_OPTION_AUTO_ROUTE ); GetDriver()->SendMsg( msg ); return true; }
//----------------------------------------------------------------------------- // <SwitchAll::On> // Send a command to switch all devices on //----------------------------------------------------------------------------- void SwitchAll::On ( Driver* _driver, uint8 const _nodeId ) { Log::Write( "SwitchAll::On (Node=%d)", _nodeId ); Msg* msg = new Msg( "SwitchAllCmd_On", _nodeId, REQUEST, FUNC_ID_ZW_SEND_DATA, true ); msg->Append( _nodeId ); msg->Append( 2 ); msg->Append( StaticGetCommandClassId() ); msg->Append( SwitchAllCmd_On ); msg->Append( TRANSMIT_OPTION_ACK | TRANSMIT_OPTION_AUTO_ROUTE ); _driver->SendMsg( msg ); }
//----------------------------------------------------------------------------- // <SwitchMultilevel::StopLevelChange> // Stop the level changing //----------------------------------------------------------------------------- bool SwitchMultilevel::StopLevelChange ( uint8 const _instance ) { Log::Write( LogLevel_Info, GetNodeId(), "SwitchMultilevel::StopLevelChange - Stopping the level change" ); Msg* msg = new Msg( "SwitchMultilevel StopLevelChange", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true ); msg->SetInstance( this, _instance ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( SwitchMultilevelCmd_StopLevelChange ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, Driver::MsgQueue_Send ); return true; }
//----------------------------------------------------------------------------- // <SwitchToggleBinary::SetValue> // Toggle the state of the switch //----------------------------------------------------------------------------- bool SwitchToggleBinary::SetValue ( Value const& _value ) { Log::Write( LogLevel_Info, GetNodeId(), "SwitchToggleBinary::Set - Toggling the state" ); Msg* msg = new Msg( "SwitchToggleBinary Set", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true ); msg->SetInstance( this, _value.GetID().GetInstance() ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( SwitchToggleBinaryCmd_Set ); msg->Append( TRANSMIT_OPTION_ACK | TRANSMIT_OPTION_AUTO_ROUTE ); GetDriver()->SendMsg( msg, Driver::MsgQueue_Send ); return true; }
//----------------------------------------------------------------------------- // <ManufacturerProprietary::SetValue> // Set the lock's state //----------------------------------------------------------------------------- bool ManufacturerProprietary::SetValue ( Value const& _value ) { uint64 value_id = _value.GetID().GetIndex(); Msg* msg = new Msg( "ManufacturerProprietary_SetValue", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); if (FibaroVenetianBlindsValueIds_Blinds == value_id || FibaroVenetianBlindsValueIds_Tilt == value_id){ ValueByte const* value = static_cast<ValueByte const*>(&_value); msg->SetInstance( this, _value.GetID().GetInstance() ); msg->Append( GetNodeId() ); msg->Append( 2 + // length of data sizeof(MANUFACTURER_ID_FIBARO) + sizeof(FIBARO_VENETIAN_BLINDS_GET_POSITION_TILT) ); msg->Append( GetCommandClassId() ); msg->AppendArray( MANUFACTURER_ID_FIBARO, sizeof(MANUFACTURER_ID_FIBARO) ); if (FibaroVenetianBlindsValueIds_Blinds == value_id) { msg->AppendArray( FIBARO_VENETIAN_BLINDS_SET_POSITION, sizeof(FIBARO_VENETIAN_BLINDS_SET_POSITION) ); msg->Append( value->GetValue() ); msg->Append( 0x00 ); } else if (FibaroVenetianBlindsValueIds_Tilt == value_id) { msg->AppendArray( FIBARO_VENETIAN_BLINDS_SET_TILT, sizeof(FIBARO_VENETIAN_BLINDS_SET_TILT) ); msg->Append( value->GetValue() ); } msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, Driver::MsgQueue_Send ); return true; } else { Log::Write( LogLevel_Info, GetNodeId(), "ManufacturerProprietary_SetValue %d not supported on node %d", value_id, GetNodeId()); return false; } }
//----------------------------------------------------------------------------- // <SwitchToggleBinary::RequestValue> // Request current value from the device //----------------------------------------------------------------------------- bool SwitchToggleBinary::RequestValue ( uint32 const _requestFlags, uint8 const _dummy1, // = 0 (not used) uint8 const _instance, Driver::MsgQueue const _queue ) { Msg* msg = new Msg( "SwitchToggleBinaryCmd_Get", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->SetInstance( this, _instance ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( SwitchToggleBinaryCmd_Get ); msg->Append( TRANSMIT_OPTION_ACK | TRANSMIT_OPTION_AUTO_ROUTE ); GetDriver()->SendMsg( msg, _queue ); return true; }
//----------------------------------------------------------------------------- // <SwitchAll::RequestValue> // Request current value from the device //----------------------------------------------------------------------------- bool SwitchAll::RequestValue ( uint32 const _requestFlags, uint8 const _dummy1, // = 0 (not used) uint8 const _instance, Driver::MsgQueue const _queue ) { Msg* msg = new Msg( "SwitchAllCmd_Get", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->SetInstance( this, _instance ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( SwitchAllCmd_Get ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, _queue ); return true; }
//----------------------------------------------------------------------------- // <ThermostatMode::RequestValue> // Get the static thermostat mode details from the device //----------------------------------------------------------------------------- bool ThermostatMode::RequestValue ( uint32 const _requestFlags, uint8 const _getTypeEnum, uint8 const _instance, Driver::MsgQueue const _queue ) { if( _getTypeEnum == ThermostatModeCmd_SupportedGet ) { // Request the supported modes Msg* msg = new Msg( "ThermostatModeCmd_SupportedGet", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->SetInstance( this, _instance ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( ThermostatModeCmd_SupportedGet ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, _queue ); return true; } if( _getTypeEnum == 0 ) // get current mode { if ( IsGetSupported() ) { // Request the current mode Msg* msg = new Msg( "ThermostatModeCmd_Get", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->SetInstance( this, _instance ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( ThermostatModeCmd_Get ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, _queue ); return true; } else { Log::Write( LogLevel_Info, GetNodeId(), _instance, "ThermostatModeCmd_Get Not Supported on this node"); } } return false; }
//----------------------------------------------------------------------------- // <ClimateControlSchedule::RequestValue> // Request current value from the device //----------------------------------------------------------------------------- bool ClimateControlSchedule::RequestValue ( uint32 const _requestFlags, uint8 const _dummy1, // = 0 (not used) uint8 const _instance, Driver::MsgQueue const _queue ) { // See if the schedule has changed since last time Msg* msg = new Msg( "ClimateControlScheduleCmd_ChangedGet", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->SetInstance( this, _instance ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( ClimateControlScheduleCmd_ChangedGet ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, _queue ); return true; }
//----------------------------------------------------------------------------- // <Security::RequestNonce> // Request a nonce from the node //----------------------------------------------------------------------------- void Security::RequestNonce ( ) { if (m_waitingForNonce == true) return; m_waitingForNonce = true; Msg* msg = new Msg( "SecurityCmd_NonceGet", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( SecurityCmd_NonceGet ); msg->Append( TRANSMIT_OPTION_ACK | TRANSMIT_OPTION_AUTO_ROUTE ); GetDriver()->SendMsg( msg, Driver::MsgQueue_Security); // Reset the nonce timer. The nonce report // must be received within 10 seconds. m_nonceTimer.Reset(); }
//----------------------------------------------------------------------------- // <ThermostatMode::SetValue> // Set the device's thermostat mode //----------------------------------------------------------------------------- bool ThermostatMode::SetValue ( Value const& _value ) { if( ValueID::ValueType_List == _value.GetID().GetType() ) { ValueList const* value = static_cast<ValueList const*>(&_value); if (value->GetItem() == NULL) return false; uint8 state = (uint8)value->GetItem()->m_value; Msg* msg = new Msg( "ThermostatModeCmd_Set", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true ); msg->Append( GetNodeId() ); msg->Append( 3 ); msg->Append( GetCommandClassId() ); msg->Append( ThermostatModeCmd_Set ); msg->Append( state ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, Driver::MsgQueue_Send ); return true; } return false; }
//----------------------------------------------------------------------------- // <SwitchAll::SetValue> // Set the device's response to SWITCH_ALL commands //----------------------------------------------------------------------------- bool SwitchAll::SetValue ( Value const& _value ) { if( ValueID::ValueType_List == _value.GetID().GetType() ) { ValueList const* value = static_cast<ValueList const*>(&_value); ValueList::Item const *item = value->GetItem(); if (item == NULL) return false; Log::Write( LogLevel_Info, GetNodeId(), "SwitchAll::Set - %s on node %d", item->m_label.c_str(), GetNodeId() ); Msg* msg = new Msg( "SwitchAllCmd_Set", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true ); msg->SetInstance( this, _value.GetID().GetInstance() ); msg->Append( GetNodeId() ); msg->Append( 3 ); msg->Append( GetCommandClassId() ); msg->Append( SwitchAllCmd_Set ); msg->Append( (uint8)item->m_value ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, Driver::MsgQueue_Send ); return true; } return false; }
//----------------------------------------------------------------------------- // <Protection::SetValue> // Set the device's protection state //----------------------------------------------------------------------------- bool Protection::SetValue ( Value const& _value ) { if( ValueID::ValueType_List == _value.GetID().GetType() ) { ValueList const* value = static_cast<ValueList const*>(&_value); ValueList::Item const& item = value->GetItem(); Log::Write( LogLevel_Info, GetNodeId(), "Protection::Set - Setting protection state to '%s'", item.m_label.c_str() ); Msg* msg = new Msg( "Protection Set", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true ); msg->SetInstance( this, _value.GetID().GetInstance() ); msg->Append( GetNodeId() ); msg->Append( 3 ); msg->Append( GetCommandClassId() ); msg->Append( ProtectionCmd_Set ); msg->Append( (uint8)item.m_value ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, Driver::MsgQueue_Send ); return true; } return false; }
//----------------------------------------------------------------------------- // <Security::SendNonceReport> // Send a nonce to the node //----------------------------------------------------------------------------- void Security::SendNonceReport ( ) { //uint8 publicNonce[8]; /* this should be pretty random */ for (int i = 0; i < 8; i++) { //this->currentNonce[i] = (rand()%0xFF)+1; this->currentNonce[i] = 0xAA; } Msg* msg = new Msg( "SecurityCmd_NonceReport", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->Append( GetNodeId() ); msg->Append( 10 ); msg->Append( GetCommandClassId() ); msg->Append( SecurityCmd_NonceReport ); for( int i=0; i<8; ++i ) { msg->Append( this->currentNonce[i] ); } msg->Append( TRANSMIT_OPTION_ACK | TRANSMIT_OPTION_AUTO_ROUTE ); GetDriver()->SendMsg( msg, Driver::MsgQueue_Security); // Reset the nonce timer. The encapsulated message // must be received within 10 seconds. m_nonceTimer.Reset(); }
//----------------------------------------------------------------------------- // <Basic::SetValue> // Set a value on the Z-Wave device //----------------------------------------------------------------------------- bool Basic::SetValue ( Value const& _value ) { Log::Write(LogLevel_Info,"Basic set"); if( ValueID::ValueType_Byte == _value.GetID().GetType() ) { ValueByte const* value = static_cast<ValueByte const*>(&_value); Log::Write(LogLevel_Info,"send a basic value out"); Msg* msg = new Msg( "Basic Set", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true ); msg->SetInstance( this, _value.GetID().GetInstance() ); msg->Append( GetNodeId() ); msg->Append( 3 ); msg->Append( GetCommandClassId() ); msg->Append( BasicCmd_Set ); msg->Append( value->GetValue() ); msg->Append( GetDriver()->GetTransmitOptions() ); if (m_has485) { GetDriver()->Send485(GetNodeId(),msg,Driver::MsgQueue_Send); return true; } else { GetDriver()->SendMsg( msg, Driver::MsgQueue_Send ); return true; } webdebug_add(TYPE_ZWAVE, ZWAVE_COMMAND, GetCommandClassId(), GetNodeId(), _value.GetID().GetInstance(), value->GetValue()); } else { Log::Write(LogLevel_Info,"Type error %d", _value.GetID().GetType()); } return false; }
//----------------------------------------------------------------------------- // <Version::RequestValue> // Request current value from the device //----------------------------------------------------------------------------- bool Version::RequestValue ( uint32 const _requestFlags, uint8 const _dummy1, // = 0 uint8 const _instance, Driver::MsgQueue const _queue ) { if( _instance != 1 ) { // This command class doesn't work with multiple instances return false; } Msg* msg = new Msg( "VersionCmd_Get", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( VersionCmd_Get ); msg->Append( TRANSMIT_OPTION_ACK | TRANSMIT_OPTION_AUTO_ROUTE ); GetDriver()->SendMsg( msg, _queue ); return true; }
//----------------------------------------------------------------------------- // <SwitchBinary::SetValue> // Set the state of the switch //----------------------------------------------------------------------------- bool SwitchBinary::SetValue ( Value const& _value ) { if( ValueID::ValueType_Bool == _value.GetID().GetType() ) { ValueBool const* value = static_cast<ValueBool const*>(&_value); Log::Write( "SwitchBinary::Set - Setting node %d to %s", GetNodeId(), value->GetValue() ? "On" : "Off" ); Msg* msg = new Msg( "SwitchBinary Set", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true ); msg->Append( GetNodeId() ); msg->Append( 3 ); msg->Append( GetCommandClassId() ); msg->Append( SwitchBinaryCmd_Set ); msg->Append( value->GetValue() ? 0xff : 0x00 ); msg->Append( TRANSMIT_OPTION_ACK | TRANSMIT_OPTION_AUTO_ROUTE ); GetDriver()->SendMsg( msg ); return true; } return false; }
//----------------------------------------------------------------------------- // <SwitchMultilevel::SetVersion> // Set the command class version //----------------------------------------------------------------------------- void SwitchMultilevel::SetVersion ( uint8 const _version ) { CommandClass::SetVersion( _version ); if( _version == 3 ) { // Request the supported switch types Msg* msg = new Msg( "SwitchMultilevelCmd_SupportedGet", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( SwitchMultilevelCmd_SupportedGet ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, Driver::MsgQueue_Send ); // Set the request flag again - it will be cleared when we get a // response to the SwitchMultilevelCmd_SupportedGet message. SetStaticRequest( StaticRequest_Version ); } }
//----------------------------------------------------------------------------- // <AssociationCommandConfiguration::RequestValue> // Request current value from the device //----------------------------------------------------------------------------- bool AssociationCommandConfiguration::RequestValue ( uint32 const _requestFlags, uint8 const _dummy1, // = 0 (not used) uint8 const _instance, Driver::MsgQueue const _queue ) { if( _instance != 1 ) { // This command class doesn't work with multiple instances return false; } Msg* msg = new Msg( "AssociationCommandConfigurationCmd_SupportedRecordsGet", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->Append( GetNodeId() ); msg->Append( 2 ); msg->Append( GetCommandClassId() ); msg->Append( AssociationCommandConfigurationCmd_SupportedRecordsGet ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, _queue ); return true; }
//----------------------------------------------------------------------------- // <SwitchBinary::SetValue> // Set the state of the switch //----------------------------------------------------------------------------- bool SwitchBinary::SetValue ( Value const& _value ) { if( ValueID::ValueType_Bool == _value.GetID().GetType() ) { ValueBool const* value = static_cast<ValueBool const*>(&_value); Log::Write( LogLevel_Info, GetNodeId(), "SwitchBinary::Set - Setting node %d to %s", GetNodeId(), value->GetValue() ? "On" : "Off" ); Msg* msg = new Msg( "SwitchBinary Set", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true ); msg->SetInstance( this, _value.GetID().GetInstance() ); msg->Append( GetNodeId() ); msg->Append( 3 ); msg->Append( GetCommandClassId() ); msg->Append( SwitchBinaryCmd_Set ); msg->Append( value->GetValue() ? 0xff : 0x00 ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, Driver::MsgQueue_Send ); return true; } return false; }