//----------------------------------------------------------------------------- // <ClimateControlSchedule::SetValue> // Set a value in the device //----------------------------------------------------------------------------- bool ClimateControlSchedule::SetValue ( Value const& _value ) { // bool res = false; uint8 instance = _value.GetID().GetInstance(); uint8 idx = _value.GetID().GetIndex(); if( idx < 8 ) { // Set a schedule ValueSchedule const* value = static_cast<ValueSchedule const*>(&_value); Log::Write( LogLevel_Info, GetNodeId(), instance, "Set the climate control schedule for %s", c_dayNames[idx]); Msg* msg = new Msg( "ClimateControlScheduleCmd_Set", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->SetInstance( this, instance ); msg->Append( GetNodeId() ); msg->Append( 30 ); msg->Append( GetCommandClassId() ); msg->Append( ClimateControlScheduleCmd_Set ); msg->Append( idx ); // Day of week for( uint8 i=0; i<9; ++i ) { uint8 hours; uint8 minutes; int8 setback; if( value->GetSwitchPoint( i, &hours, &minutes, &setback ) ) { msg->Append( hours ); msg->Append( minutes ); msg->Append( setback ); } else { // Unused switch point msg->Append( 0 ); msg->Append( 0 ); msg->Append( 0x7f ); } } msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, Driver::MsgQueue_Send ); } else { // Set an override ValueList* state = static_cast<ValueList*>( GetValue( instance, ClimateControlScheduleIndex_OverrideState ) ); ValueByte* setback = static_cast<ValueByte*>( GetValue( instance, ClimateControlScheduleIndex_OverrideSetback ) ); if( state && setback ) { ValueList::Item const *item = state->GetItem(); if (item == NULL) { return false; } Msg* msg = new Msg( "ClimateControlScheduleCmd_OverrideSet", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true, true, FUNC_ID_APPLICATION_COMMAND_HANDLER, GetCommandClassId() ); msg->SetInstance( this, instance ); msg->Append( GetNodeId() ); msg->Append( 4 ); msg->Append( GetCommandClassId() ); msg->Append( ClimateControlScheduleCmd_OverrideSet ); msg->Append( (uint8)item->m_value ); msg->Append( setback->GetValue() ); msg->Append( GetDriver()->GetTransmitOptions() ); GetDriver()->SendMsg( msg, Driver::MsgQueue_Send ); } } return true; }